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
@@ -90,7 +90,7 @@ static void start_timer_thread_and_unlock(void) {
90
90
  ++g_waiter_count;
91
91
  ++g_thread_count;
92
92
  gpr_mu_unlock(&g_mu);
93
- if (grpc_timer_check_trace.enabled()) {
93
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
94
94
  gpr_log(GPR_INFO, "Spawn timer thread");
95
95
  }
96
96
  completed_thread* ct =
@@ -105,6 +105,14 @@ void grpc_timer_manager_tick() {
105
105
  }
106
106
 
107
107
  static void run_some_timers() {
108
+ // In the case of timers, the ExecCtx for the thread is declared
109
+ // in the timer thread itself, but this is the point where we
110
+ // could start seeing application-level callbacks. No need to
111
+ // create a new ExecCtx, though, since there already is one and it is
112
+ // flushed (but not destructed) in this function itself
113
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx(
114
+ GRPC_APP_CALLBACK_EXEC_CTX_FLAG_IS_INTERNAL_THREAD);
115
+
108
116
  // if there's something to execute...
109
117
  gpr_mu_lock(&g_mu);
110
118
  // remove a waiter from the pool, and start another thread if necessary
@@ -118,7 +126,7 @@ static void run_some_timers() {
118
126
  // if there's no thread waiting with a timeout, kick an existing untimed
119
127
  // waiter so that the next deadline is not missed
120
128
  if (!g_has_timed_waiter) {
121
- if (grpc_timer_check_trace.enabled()) {
129
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
122
130
  gpr_log(GPR_INFO, "kick untimed waiter");
123
131
  }
124
132
  gpr_cv_signal(&g_cv_wait);
@@ -126,7 +134,7 @@ static void run_some_timers() {
126
134
  gpr_mu_unlock(&g_mu);
127
135
  }
128
136
  // without our lock, flush the exec_ctx
129
- if (grpc_timer_check_trace.enabled()) {
137
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
130
138
  gpr_log(GPR_INFO, "flush exec_ctx");
131
139
  }
132
140
  grpc_core::ExecCtx::Get()->Flush();
@@ -181,7 +189,7 @@ static bool wait_until(grpc_millis next) {
181
189
  g_has_timed_waiter = true;
182
190
  g_timed_waiter_deadline = next;
183
191
 
184
- if (grpc_timer_check_trace.enabled()) {
192
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
185
193
  grpc_millis wait_time = next - grpc_core::ExecCtx::Get()->Now();
186
194
  gpr_log(GPR_INFO, "sleep for a %" PRId64 " milliseconds", wait_time);
187
195
  }
@@ -190,7 +198,8 @@ static bool wait_until(grpc_millis next) {
190
198
  }
191
199
  }
192
200
 
193
- if (grpc_timer_check_trace.enabled() && next == GRPC_MILLIS_INF_FUTURE) {
201
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace) &&
202
+ next == GRPC_MILLIS_INF_FUTURE) {
194
203
  gpr_log(GPR_INFO, "sleep until kicked");
195
204
  }
196
205
 
@@ -202,7 +211,7 @@ static bool wait_until(grpc_millis next) {
202
211
  gpr_cv_wait(&g_cv_wait, &g_mu,
203
212
  grpc_millis_to_timespec(next, GPR_CLOCK_MONOTONIC));
204
213
 
205
- if (grpc_timer_check_trace.enabled()) {
214
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
206
215
  gpr_log(GPR_INFO, "wait ended: was_timed:%d kicked:%d",
207
216
  my_timed_waiter_generation == g_timed_waiter_generation,
208
217
  g_kicked);
@@ -247,7 +256,7 @@ static void timer_main_loop() {
247
256
 
248
257
  Consequently, we can just sleep forever here and be happy at some
249
258
  saved wakeup cycles. */
250
- if (grpc_timer_check_trace.enabled()) {
259
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
251
260
  gpr_log(GPR_INFO, "timers not checked: expect another thread to");
252
261
  }
253
262
  next = GRPC_MILLIS_INF_FUTURE;
@@ -273,7 +282,7 @@ static void timer_thread_cleanup(completed_thread* ct) {
273
282
  ct->next = g_completed_threads;
274
283
  g_completed_threads = ct;
275
284
  gpr_mu_unlock(&g_mu);
276
- if (grpc_timer_check_trace.enabled()) {
285
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
277
286
  gpr_log(GPR_INFO, "End timer thread");
278
287
  }
279
288
  }
@@ -319,18 +328,18 @@ void grpc_timer_manager_init(void) {
319
328
 
320
329
  static void stop_threads(void) {
321
330
  gpr_mu_lock(&g_mu);
322
- if (grpc_timer_check_trace.enabled()) {
331
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
323
332
  gpr_log(GPR_INFO, "stop timer threads: threaded=%d", g_threaded);
324
333
  }
325
334
  if (g_threaded) {
326
335
  g_threaded = false;
327
336
  gpr_cv_broadcast(&g_cv_wait);
328
- if (grpc_timer_check_trace.enabled()) {
337
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
329
338
  gpr_log(GPR_INFO, "num timer threads: %d", g_thread_count);
330
339
  }
331
340
  while (g_thread_count > 0) {
332
341
  gpr_cv_wait(&g_cv_shutdown, &g_mu, gpr_inf_future(GPR_CLOCK_MONOTONIC));
333
- if (grpc_timer_check_trace.enabled()) {
342
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
334
343
  gpr_log(GPR_INFO, "num timer threads: %d", g_thread_count);
335
344
  }
336
345
  gc_completed_threads();
@@ -332,7 +332,7 @@ void GrpcUdpListener::OnFdAboutToOrphan() {
332
332
  GRPC_CLOSURE_INIT(&destroyed_closure_, destroyed_port, server_,
333
333
  grpc_schedule_on_exec_ctx);
334
334
  if (!orphan_notified_ && udp_handler_ != nullptr) {
335
- /* Singals udp_handler that the FD is about to be closed and
335
+ /* Signals udp_handler that the FD is about to be closed and
336
336
  * should no longer be used. */
337
337
  GRPC_CLOSURE_INIT(&orphan_fd_closure_, shutdown_fd, this,
338
338
  grpc_schedule_on_exec_ctx);
@@ -481,8 +481,9 @@ void GrpcUdpListener::OnRead(grpc_error* error, void* do_read_arg) {
481
481
  if (udp_handler_->Read()) {
482
482
  /* There maybe more packets to read. Schedule read_more_cb_ closure to run
483
483
  * after finishing this event loop. */
484
- GRPC_CLOSURE_INIT(&do_read_closure_, do_read, do_read_arg,
485
- grpc_executor_scheduler(GRPC_EXECUTOR_LONG));
484
+ GRPC_CLOSURE_INIT(
485
+ &do_read_closure_, do_read, do_read_arg,
486
+ grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::LONG));
486
487
  GRPC_CLOSURE_SCHED(&do_read_closure_, GRPC_ERROR_NONE);
487
488
  } else {
488
489
  /* Finish reading all the packets, re-arm the notification event so we can
@@ -542,8 +543,9 @@ void GrpcUdpListener::OnCanWrite(grpc_error* error, void* do_write_arg) {
542
543
  }
543
544
 
544
545
  /* Schedule actual write in another thread. */
545
- GRPC_CLOSURE_INIT(&do_write_closure_, do_write, do_write_arg,
546
- grpc_executor_scheduler(GRPC_EXECUTOR_LONG));
546
+ GRPC_CLOSURE_INIT(
547
+ &do_write_closure_, do_write, do_write_arg,
548
+ grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::LONG));
547
549
 
548
550
  GRPC_CLOSURE_SCHED(&do_write_closure_, GRPC_ERROR_NONE);
549
551
  }
@@ -643,7 +645,7 @@ int grpc_udp_server_add_port(grpc_udp_server* s,
643
645
  grpc_sockaddr_set_port(addr, allocated_port1);
644
646
  port = allocated_port1;
645
647
  } else if (allocated_port1 >= 0) {
646
- /* The following sucessfully created socket should have same port as
648
+ /* The following successfully created socket should have same port as
647
649
  * the first one. */
648
650
  GPR_ASSERT(port == allocated_port1);
649
651
  }
@@ -23,7 +23,6 @@
23
23
  #ifdef GRPC_POSIX_WAKEUP_FD
24
24
 
25
25
  #include <stddef.h>
26
- #include "src/core/lib/iomgr/wakeup_fd_cv.h"
27
26
  #include "src/core/lib/iomgr/wakeup_fd_pipe.h"
28
27
  #include "src/core/lib/iomgr/wakeup_fd_posix.h"
29
28
 
@@ -51,37 +50,20 @@ void grpc_wakeup_fd_global_destroy(void) { wakeup_fd_vtable = nullptr; }
51
50
 
52
51
  int grpc_has_wakeup_fd(void) { return has_real_wakeup_fd; }
53
52
 
54
- int grpc_cv_wakeup_fds_enabled(void) { return cv_wakeup_fds_enabled; }
55
-
56
- void grpc_enable_cv_wakeup_fds(int enable) { cv_wakeup_fds_enabled = enable; }
57
-
58
53
  grpc_error* grpc_wakeup_fd_init(grpc_wakeup_fd* fd_info) {
59
- if (cv_wakeup_fds_enabled) {
60
- return grpc_cv_wakeup_fd_vtable.init(fd_info);
61
- }
62
54
  return wakeup_fd_vtable->init(fd_info);
63
55
  }
64
56
 
65
57
  grpc_error* grpc_wakeup_fd_consume_wakeup(grpc_wakeup_fd* fd_info) {
66
- if (cv_wakeup_fds_enabled) {
67
- return grpc_cv_wakeup_fd_vtable.consume(fd_info);
68
- }
69
58
  return wakeup_fd_vtable->consume(fd_info);
70
59
  }
71
60
 
72
61
  grpc_error* grpc_wakeup_fd_wakeup(grpc_wakeup_fd* fd_info) {
73
- if (cv_wakeup_fds_enabled) {
74
- return grpc_cv_wakeup_fd_vtable.wakeup(fd_info);
75
- }
76
62
  return wakeup_fd_vtable->wakeup(fd_info);
77
63
  }
78
64
 
79
65
  void grpc_wakeup_fd_destroy(grpc_wakeup_fd* fd_info) {
80
- if (cv_wakeup_fds_enabled) {
81
- grpc_cv_wakeup_fd_vtable.destroy(fd_info);
82
- } else {
83
- wakeup_fd_vtable->destroy(fd_info);
84
- }
66
+ wakeup_fd_vtable->destroy(fd_info);
85
67
  }
86
68
 
87
69
  #endif /* GRPC_POSIX_WAKEUP_FD */
@@ -35,24 +35,21 @@ grpc_json* grpc_json_create(grpc_json_type type) {
35
35
  }
36
36
 
37
37
  void grpc_json_destroy(grpc_json* json) {
38
+ if (json == nullptr) return;
38
39
  while (json->child) {
39
40
  grpc_json_destroy(json->child);
40
41
  }
41
-
42
42
  if (json->next) {
43
43
  json->next->prev = json->prev;
44
44
  }
45
-
46
45
  if (json->prev) {
47
46
  json->prev->next = json->next;
48
47
  } else if (json->parent) {
49
48
  json->parent->child = json->next;
50
49
  }
51
-
52
50
  if (json->owns_value) {
53
51
  gpr_free((void*)json->value);
54
52
  }
55
-
56
53
  gpr_free(json);
57
54
  }
58
55
 
@@ -31,7 +31,8 @@
31
31
  #include <stdio.h>
32
32
  #include <string.h>
33
33
 
34
- #include "src/core/lib/gpr/env.h"
34
+ #include "src/core/lib/gprpp/global_config.h"
35
+ #include "src/core/lib/profiling/timers.h"
35
36
 
36
37
  typedef enum { BEGIN = '{', END = '}', MARK = '.' } marker_type;
37
38
 
@@ -74,11 +75,16 @@ static __thread int g_thread_id;
74
75
  static int g_next_thread_id;
75
76
  static int g_writing_enabled = 1;
76
77
 
78
+ GPR_GLOBAL_CONFIG_DEFINE_STRING(grpc_latency_trace, "latency_trace.txt",
79
+ "Output file name for latency trace")
80
+
77
81
  static const char* output_filename() {
78
82
  if (output_filename_or_null == NULL) {
79
- output_filename_or_null = gpr_getenv("LATENCY_TRACE");
80
- if (output_filename_or_null == NULL ||
81
- strlen(output_filename_or_null) == 0) {
83
+ grpc_core::UniquePtr<char> value =
84
+ GPR_GLOBAL_CONFIG_GET(grpc_latency_trace);
85
+ if (strlen(value.get()) > 0) {
86
+ output_filename_or_null = value.release();
87
+ } else {
82
88
  output_filename_or_null = "latency_trace.txt";
83
89
  }
84
90
  }
@@ -21,8 +21,8 @@
21
21
  #include <string.h>
22
22
 
23
23
  #include "src/core/lib/channel/channel_args.h"
24
- #include "src/core/lib/gpr/arena.h"
25
24
  #include "src/core/lib/gpr/string.h"
25
+ #include "src/core/lib/gprpp/arena.h"
26
26
  #include "src/core/lib/gprpp/ref_counted.h"
27
27
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
28
  #include "src/core/lib/security/context/security_context.h"
@@ -102,9 +102,9 @@ grpc_client_security_context::~grpc_client_security_context() {
102
102
  }
103
103
 
104
104
  grpc_client_security_context* grpc_client_security_context_create(
105
- gpr_arena* arena, grpc_call_credentials* creds) {
106
- return new (gpr_arena_alloc(arena, sizeof(grpc_client_security_context)))
107
- grpc_client_security_context(creds != nullptr ? creds->Ref() : nullptr);
105
+ grpc_core::Arena* arena, grpc_call_credentials* creds) {
106
+ return arena->New<grpc_client_security_context>(
107
+ creds != nullptr ? creds->Ref() : nullptr);
108
108
  }
109
109
 
110
110
  void grpc_client_security_context_destroy(void* ctx) {
@@ -123,9 +123,8 @@ grpc_server_security_context::~grpc_server_security_context() {
123
123
  }
124
124
 
125
125
  grpc_server_security_context* grpc_server_security_context_create(
126
- gpr_arena* arena) {
127
- return new (gpr_arena_alloc(arena, sizeof(grpc_server_security_context)))
128
- grpc_server_security_context();
126
+ grpc_core::Arena* arena) {
127
+ return arena->New<grpc_server_security_context>();
129
128
  }
130
129
 
131
130
  void grpc_server_security_context_destroy(void* ctx) {
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/lib/gprpp/arena.h"
24
25
  #include "src/core/lib/gprpp/ref_counted.h"
25
26
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
26
27
  #include "src/core/lib/iomgr/pollset.h"
@@ -28,8 +29,6 @@
28
29
 
29
30
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_auth_context_refcount;
30
31
 
31
- struct gpr_arena;
32
-
33
32
  /* --- grpc_auth_context ---
34
33
 
35
34
  High level authentication context object. Can optionally be chained. */
@@ -121,7 +120,7 @@ struct grpc_client_security_context {
121
120
  };
122
121
 
123
122
  grpc_client_security_context* grpc_client_security_context_create(
124
- gpr_arena* arena, grpc_call_credentials* creds);
123
+ grpc_core::Arena* arena, grpc_call_credentials* creds);
125
124
  void grpc_client_security_context_destroy(void* ctx);
126
125
 
127
126
  /* --- grpc_server_security_context ---
@@ -137,7 +136,7 @@ struct grpc_server_security_context {
137
136
  };
138
137
 
139
138
  grpc_server_security_context* grpc_server_security_context_create(
140
- gpr_arena* arena);
139
+ grpc_core::Arena* arena);
141
140
  void grpc_server_security_context_destroy(void* ctx);
142
141
 
143
142
  /* --- Channel args for auth context --- */
@@ -31,7 +31,7 @@
31
31
  #include "src/core/lib/security/security_connector/alts/alts_security_connector.h"
32
32
 
33
33
  #define GRPC_CREDENTIALS_TYPE_ALTS "Alts"
34
- #define GRPC_ALTS_HANDSHAKER_SERVICE_URL "metadata.google.internal:8080"
34
+ #define GRPC_ALTS_HANDSHAKER_SERVICE_URL "metadata.google.internal.:8080"
35
35
 
36
36
  grpc_alts_credentials::grpc_alts_credentials(
37
37
  const grpc_alts_credentials_options* options,
@@ -25,8 +25,8 @@
25
25
  #include <grpc/support/log.h>
26
26
 
27
27
  bool grpc_alts_is_running_on_gcp() {
28
- gpr_log(GPR_ERROR,
29
- "Platforms other than Linux and Windows are not supported");
28
+ gpr_log(GPR_INFO,
29
+ "ALTS: Platforms other than Linux and Windows are not supported");
30
30
  return false;
31
31
  }
32
32
 
@@ -49,6 +49,10 @@ class grpc_composite_channel_credentials : public grpc_channel_credentials {
49
49
  const char* target, const grpc_channel_args* args,
50
50
  grpc_channel_args** new_args) override;
51
51
 
52
+ grpc_channel_args* update_arguments(grpc_channel_args* args) override {
53
+ return inner_creds_->update_arguments(args);
54
+ }
55
+
52
56
  const grpc_channel_credentials* inner_creds() const {
53
57
  return inner_creds_.get();
54
58
  }
@@ -60,7 +60,7 @@ typedef enum {
60
60
 
61
61
  #define GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS 60
62
62
 
63
- #define GRPC_COMPUTE_ENGINE_METADATA_HOST "metadata.google.internal"
63
+ #define GRPC_COMPUTE_ENGINE_METADATA_HOST "metadata.google.internal."
64
64
  #define GRPC_COMPUTE_ENGINE_METADATA_TOKEN_PATH \
65
65
  "/computeMetadata/v1/instance/service-accounts/default/token"
66
66
 
@@ -123,6 +123,14 @@ struct grpc_channel_credentials
123
123
  return Ref();
124
124
  }
125
125
 
126
+ // Allows credentials to optionally modify a parent channel's args.
127
+ // By default, leave channel args as is. The callee takes ownership
128
+ // of the passed-in channel args, and the caller takes ownership
129
+ // of the returned channel args.
130
+ virtual grpc_channel_args* update_arguments(grpc_channel_args* args) {
131
+ return args;
132
+ }
133
+
126
134
  const char* type() const { return type_; }
127
135
 
128
136
  GRPC_ABSTRACT_BASE_CLASS
@@ -46,7 +46,7 @@
46
46
 
47
47
  /* -- Constants. -- */
48
48
 
49
- #define GRPC_COMPUTE_ENGINE_DETECTION_HOST "metadata.google.internal"
49
+ #define GRPC_COMPUTE_ENGINE_DETECTION_HOST "metadata.google.internal."
50
50
 
51
51
  /* -- Default credentials. -- */
52
52
 
@@ -114,6 +114,19 @@ grpc_google_default_channel_credentials::create_security_connector(
114
114
  return sc;
115
115
  }
116
116
 
117
+ grpc_channel_args* grpc_google_default_channel_credentials::update_arguments(
118
+ grpc_channel_args* args) {
119
+ grpc_channel_args* updated = args;
120
+ if (grpc_channel_args_find(args, GRPC_ARG_DNS_ENABLE_SRV_QUERIES) ==
121
+ nullptr) {
122
+ grpc_arg new_srv_arg = grpc_channel_arg_integer_create(
123
+ const_cast<char*>(GRPC_ARG_DNS_ENABLE_SRV_QUERIES), true);
124
+ updated = grpc_channel_args_copy_and_add(args, &new_srv_arg, 1);
125
+ grpc_channel_args_destroy(args);
126
+ }
127
+ return updated;
128
+ }
129
+
117
130
  static void on_metadata_server_detection_http_response(void* user_data,
118
131
  grpc_error* error) {
119
132
  metadata_server_detector* detector =
@@ -159,7 +172,6 @@ static int is_metadata_server_reachable() {
159
172
  detector.pollent = grpc_polling_entity_create_from_pollset(pollset);
160
173
  detector.is_done = 0;
161
174
  detector.success = 0;
162
- memset(&detector.response, 0, sizeof(detector.response));
163
175
  memset(&request, 0, sizeof(grpc_httpcli_request));
164
176
  request.host = (char*)GRPC_COMPUTE_ENGINE_DETECTION_HOST;
165
177
  request.http.path = (char*)"/";
@@ -259,7 +271,7 @@ end:
259
271
  GPR_ASSERT((result == nullptr) + (error == GRPC_ERROR_NONE) == 1);
260
272
  if (creds_path != nullptr) gpr_free(creds_path);
261
273
  grpc_slice_unref_internal(creds_data);
262
- if (json != nullptr) grpc_json_destroy(json);
274
+ grpc_json_destroy(json);
263
275
  *creds = result;
264
276
  return error;
265
277
  }
@@ -58,6 +58,8 @@ class grpc_google_default_channel_credentials
58
58
  const char* target, const grpc_channel_args* args,
59
59
  grpc_channel_args** new_args) override;
60
60
 
61
+ grpc_channel_args* update_arguments(grpc_channel_args* args) override;
62
+
61
63
  const grpc_channel_credentials* alts_creds() const {
62
64
  return alts_creds_.get();
63
65
  }
@@ -121,7 +121,7 @@ grpc_auth_json_key grpc_auth_json_key_create_from_string(
121
121
  char* scratchpad = gpr_strdup(json_string);
122
122
  grpc_json* json = grpc_json_parse_string(scratchpad);
123
123
  grpc_auth_json_key result = grpc_auth_json_key_create_from_json(json);
124
- if (json != nullptr) grpc_json_destroy(json);
124
+ grpc_json_destroy(json);
125
125
  gpr_free(scratchpad);
126
126
  return result;
127
127
  }
@@ -160,7 +160,7 @@ static char* redact_private_key(const char* json_key) {
160
160
 
161
161
  grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
162
162
  const char* json_key, gpr_timespec token_lifetime, void* reserved) {
163
- if (grpc_api_trace.enabled()) {
163
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace)) {
164
164
  char* clean_json = redact_private_key(json_key);
165
165
  gpr_log(GPR_INFO,
166
166
  "grpc_service_account_jwt_access_credentials_create("
@@ -174,6 +174,7 @@ grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
174
174
  gpr_free(clean_json);
175
175
  }
176
176
  GPR_ASSERT(reserved == nullptr);
177
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
177
178
  grpc_core::ExecCtx exec_ctx;
178
179
  return grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
179
180
  grpc_auth_json_key_create_from_string(json_key), token_lifetime)
@@ -134,7 +134,8 @@ static void jose_header_destroy(jose_header* h) {
134
134
  }
135
135
 
136
136
  /* Takes ownership of json and buffer. */
137
- static jose_header* jose_header_from_json(grpc_json* json, grpc_slice buffer) {
137
+ static jose_header* jose_header_from_json(grpc_json* json,
138
+ const grpc_slice& buffer) {
138
139
  grpc_json* cur;
139
140
  jose_header* h = static_cast<jose_header*>(gpr_zalloc(sizeof(jose_header)));
140
141
  h->buffer = buffer;
@@ -235,7 +236,8 @@ gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims* claims) {
235
236
  }
236
237
 
237
238
  /* Takes ownership of json and buffer even in case of failure. */
238
- grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json, grpc_slice buffer) {
239
+ grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
240
+ const grpc_slice& buffer) {
239
241
  grpc_json* cur;
240
242
  grpc_jwt_claims* claims =
241
243
  static_cast<grpc_jwt_claims*>(gpr_malloc(sizeof(grpc_jwt_claims)));
@@ -350,9 +352,10 @@ typedef struct {
350
352
  /* Takes ownership of the header, claims and signature. */
351
353
  static verifier_cb_ctx* verifier_cb_ctx_create(
352
354
  grpc_jwt_verifier* verifier, grpc_pollset* pollset, jose_header* header,
353
- grpc_jwt_claims* claims, const char* audience, grpc_slice signature,
355
+ grpc_jwt_claims* claims, const char* audience, const grpc_slice& signature,
354
356
  const char* signed_jwt, size_t signed_jwt_len, void* user_data,
355
357
  grpc_jwt_verification_done_cb cb) {
358
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
356
359
  grpc_core::ExecCtx exec_ctx;
357
360
  verifier_cb_ctx* ctx =
358
361
  static_cast<verifier_cb_ctx*>(gpr_zalloc(sizeof(verifier_cb_ctx)));
@@ -601,7 +604,8 @@ static EVP_PKEY* find_verification_key(const grpc_json* json,
601
604
  }
602
605
 
603
606
  static int verify_jwt_signature(EVP_PKEY* key, const char* alg,
604
- grpc_slice signature, grpc_slice signed_data) {
607
+ const grpc_slice& signature,
608
+ const grpc_slice& signed_data) {
605
609
  EVP_MD_CTX* md_ctx = EVP_MD_CTX_create();
606
610
  const EVP_MD* md = evp_md_from_alg(alg);
607
611
  int result = 0;
@@ -666,7 +670,7 @@ static void on_keys_retrieved(void* user_data, grpc_error* error) {
666
670
  }
667
671
 
668
672
  end:
669
- if (json != nullptr) grpc_json_destroy(json);
673
+ grpc_json_destroy(json);
670
674
  EVP_PKEY_free(verification_key);
671
675
  ctx->user_cb(ctx->user_data, status, claims);
672
676
  verifier_cb_ctx_destroy(ctx);
@@ -719,7 +723,7 @@ static void on_openid_config_retrieved(void* user_data, grpc_error* error) {
719
723
  return;
720
724
 
721
725
  error:
722
- if (json != nullptr) grpc_json_destroy(json);
726
+ grpc_json_destroy(json);
723
727
  ctx->user_cb(ctx->user_data, GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR, nullptr);
724
728
  verifier_cb_ctx_destroy(ctx);
725
729
  }
@@ -115,7 +115,8 @@ void grpc_jwt_verifier_verify(grpc_jwt_verifier* verifier,
115
115
 
116
116
  /* --- TESTING ONLY exposed functions. --- */
117
117
 
118
- grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json, grpc_slice buffer);
118
+ grpc_jwt_claims* grpc_jwt_claims_from_json(grpc_json* json,
119
+ const grpc_slice& buffer);
119
120
  grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims* claims,
120
121
  const char* audience);
121
122
  const char* grpc_jwt_issuer_email_domain(const char* issuer);
@@ -80,7 +80,7 @@ grpc_auth_refresh_token grpc_auth_refresh_token_create_from_string(
80
80
  grpc_json* json = grpc_json_parse_string(scratchpad);
81
81
  grpc_auth_refresh_token result =
82
82
  grpc_auth_refresh_token_create_from_json(json);
83
- if (json != nullptr) grpc_json_destroy(json);
83
+ grpc_json_destroy(json);
84
84
  gpr_free(scratchpad);
85
85
  return result;
86
86
  }
@@ -199,7 +199,7 @@ end:
199
199
  }
200
200
  if (null_terminated_body != nullptr) gpr_free(null_terminated_body);
201
201
  if (new_access_token != nullptr) gpr_free(new_access_token);
202
- if (json != nullptr) grpc_json_destroy(json);
202
+ grpc_json_destroy(json);
203
203
  return status;
204
204
  }
205
205
 
@@ -459,7 +459,7 @@ grpc_call_credentials* grpc_google_refresh_token_credentials_create(
459
459
  const char* json_refresh_token, void* reserved) {
460
460
  grpc_auth_refresh_token token =
461
461
  grpc_auth_refresh_token_create_from_string(json_refresh_token);
462
- if (grpc_api_trace.enabled()) {
462
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace)) {
463
463
  char* loggable_token = create_loggable_refresh_token(&token);
464
464
  gpr_log(GPR_INFO,
465
465
  "grpc_refresh_token_credentials_create(json_refresh_token=%s, "
@@ -85,7 +85,7 @@ static grpc_error* process_plugin_result(
85
85
  grpc_validate_header_key_is_legal(md[i].key))) {
86
86
  seen_illegal_header = true;
87
87
  break;
88
- } else if (!grpc_is_binary_header(md[i].key) &&
88
+ } else if (!grpc_is_binary_header_internal(md[i].key) &&
89
89
  !GRPC_LOG_IF_ERROR(
90
90
  "validate_metadata_from_plugin",
91
91
  grpc_validate_header_nonbin_value_is_legal(md[i].value))) {
@@ -114,11 +114,12 @@ static void plugin_md_request_metadata_ready(void* request,
114
114
  grpc_status_code status,
115
115
  const char* error_details) {
116
116
  /* called from application code */
117
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
117
118
  grpc_core::ExecCtx exec_ctx(GRPC_EXEC_CTX_FLAG_IS_FINISHED |
118
119
  GRPC_EXEC_CTX_FLAG_THREAD_RESOURCE_LOOP);
119
120
  grpc_plugin_credentials::pending_request* r =
120
121
  static_cast<grpc_plugin_credentials::pending_request*>(request);
121
- if (grpc_plugin_credentials_trace.enabled()) {
122
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
122
123
  gpr_log(GPR_INFO,
123
124
  "plugin_credentials[%p]: request %p: plugin returned "
124
125
  "asynchronously",
@@ -131,7 +132,7 @@ static void plugin_md_request_metadata_ready(void* request,
131
132
  grpc_error* error =
132
133
  process_plugin_result(r, md, num_md, status, error_details);
133
134
  GRPC_CLOSURE_SCHED(r->on_request_metadata, error);
134
- } else if (grpc_plugin_credentials_trace.enabled()) {
135
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
135
136
  gpr_log(GPR_INFO,
136
137
  "plugin_credentials[%p]: request %p: plugin was previously "
137
138
  "cancelled",
@@ -161,7 +162,7 @@ bool grpc_plugin_credentials::get_request_metadata(
161
162
  pending_requests_ = request;
162
163
  gpr_mu_unlock(&mu_);
163
164
  // Invoke the plugin. The callback holds a ref to us.
164
- if (grpc_plugin_credentials_trace.enabled()) {
165
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
165
166
  gpr_log(GPR_INFO, "plugin_credentials[%p]: request %p: invoking plugin",
166
167
  this, request);
167
168
  }
@@ -173,7 +174,7 @@ bool grpc_plugin_credentials::get_request_metadata(
173
174
  if (!plugin_.get_metadata(
174
175
  plugin_.state, context, plugin_md_request_metadata_ready, request,
175
176
  creds_md, &num_creds_md, &status, &error_details)) {
176
- if (grpc_plugin_credentials_trace.enabled()) {
177
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
177
178
  gpr_log(GPR_INFO,
178
179
  "plugin_credentials[%p]: request %p: plugin will return "
179
180
  "asynchronously",
@@ -188,7 +189,7 @@ bool grpc_plugin_credentials::get_request_metadata(
188
189
  // asynchronously by plugin_cancel_get_request_metadata(), so return
189
190
  // false. Otherwise, process the result.
190
191
  if (request->cancelled) {
191
- if (grpc_plugin_credentials_trace.enabled()) {
192
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
192
193
  gpr_log(GPR_INFO,
193
194
  "plugin_credentials[%p]: request %p was cancelled, error "
194
195
  "will be returned asynchronously",
@@ -196,7 +197,7 @@ bool grpc_plugin_credentials::get_request_metadata(
196
197
  }
197
198
  retval = false;
198
199
  } else {
199
- if (grpc_plugin_credentials_trace.enabled()) {
200
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
200
201
  gpr_log(GPR_INFO,
201
202
  "plugin_credentials[%p]: request %p: plugin returned "
202
203
  "synchronously",
@@ -222,7 +223,7 @@ void grpc_plugin_credentials::cancel_get_request_metadata(
222
223
  for (pending_request* pending_request = pending_requests_;
223
224
  pending_request != nullptr; pending_request = pending_request->next) {
224
225
  if (pending_request->md_array == md_array) {
225
- if (grpc_plugin_credentials_trace.enabled()) {
226
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_plugin_credentials_trace)) {
226
227
  gpr_log(GPR_INFO, "plugin_credentials[%p]: cancelling request %p", this,
227
228
  pending_request);
228
229
  }