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
@@ -104,23 +104,21 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
104
104
  uint8_t* end = nullptr;
105
105
  uint8_t* cur = nullptr;
106
106
 
107
- grpc_slice slice = grpc_slice_buffer_take_first(slices);
108
-
109
- beg = GRPC_SLICE_START_PTR(slice);
110
- end = GRPC_SLICE_END_PTR(slice);
107
+ grpc_slice* slice = grpc_slice_buffer_peek_first(slices);
108
+ beg = GRPC_SLICE_START_PTR(*slice);
109
+ end = GRPC_SLICE_END_PTR(*slice);
111
110
  cur = beg;
112
111
  uint32_t message_flags;
113
- char* msg;
114
112
 
115
113
  if (cur == end) {
116
- grpc_slice_unref_internal(slice);
114
+ grpc_slice_buffer_remove_first(slices);
117
115
  continue;
118
116
  }
119
117
 
120
118
  switch (p->state) {
121
119
  case GRPC_CHTTP2_DATA_ERROR:
122
120
  p->state = GRPC_CHTTP2_DATA_ERROR;
123
- grpc_slice_unref_internal(slice);
121
+ grpc_slice_buffer_remove_first(slices);
124
122
  return GRPC_ERROR_REF(p->error);
125
123
  case GRPC_CHTTP2_DATA_FH_0:
126
124
  s->stats.incoming.framing_bytes++;
@@ -133,24 +131,25 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
133
131
  p->is_frame_compressed = true; /* GPR_TRUE */
134
132
  break;
135
133
  default:
134
+ char* msg;
136
135
  gpr_asprintf(&msg, "Bad GRPC frame type 0x%02x", p->frame_type);
137
136
  p->error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
138
137
  p->error = grpc_error_set_int(p->error, GRPC_ERROR_INT_STREAM_ID,
139
138
  static_cast<intptr_t>(s->id));
140
139
  gpr_free(msg);
141
- msg = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII);
142
- p->error = grpc_error_set_str(p->error, GRPC_ERROR_STR_RAW_BYTES,
143
- grpc_slice_from_copied_string(msg));
144
- gpr_free(msg);
140
+ p->error =
141
+ grpc_error_set_str(p->error, GRPC_ERROR_STR_RAW_BYTES,
142
+ grpc_dump_slice_to_slice(
143
+ *slice, GPR_DUMP_HEX | GPR_DUMP_ASCII));
145
144
  p->error =
146
145
  grpc_error_set_int(p->error, GRPC_ERROR_INT_OFFSET, cur - beg);
147
146
  p->state = GRPC_CHTTP2_DATA_ERROR;
148
- grpc_slice_unref_internal(slice);
147
+ grpc_slice_buffer_remove_first(slices);
149
148
  return GRPC_ERROR_REF(p->error);
150
149
  }
151
150
  if (++cur == end) {
152
151
  p->state = GRPC_CHTTP2_DATA_FH_1;
153
- grpc_slice_unref_internal(slice);
152
+ grpc_slice_buffer_remove_first(slices);
154
153
  continue;
155
154
  }
156
155
  /* fallthrough */
@@ -159,7 +158,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
159
158
  p->frame_size = (static_cast<uint32_t>(*cur)) << 24;
160
159
  if (++cur == end) {
161
160
  p->state = GRPC_CHTTP2_DATA_FH_2;
162
- grpc_slice_unref_internal(slice);
161
+ grpc_slice_buffer_remove_first(slices);
163
162
  continue;
164
163
  }
165
164
  /* fallthrough */
@@ -168,7 +167,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
168
167
  p->frame_size |= (static_cast<uint32_t>(*cur)) << 16;
169
168
  if (++cur == end) {
170
169
  p->state = GRPC_CHTTP2_DATA_FH_3;
171
- grpc_slice_unref_internal(slice);
170
+ grpc_slice_buffer_remove_first(slices);
172
171
  continue;
173
172
  }
174
173
  /* fallthrough */
@@ -177,7 +176,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
177
176
  p->frame_size |= (static_cast<uint32_t>(*cur)) << 8;
178
177
  if (++cur == end) {
179
178
  p->state = GRPC_CHTTP2_DATA_FH_4;
180
- grpc_slice_unref_internal(slice);
179
+ grpc_slice_buffer_remove_first(slices);
181
180
  continue;
182
181
  }
183
182
  /* fallthrough */
@@ -204,19 +203,18 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
204
203
  p->state = GRPC_CHTTP2_DATA_FH_0;
205
204
  }
206
205
  s->pending_byte_stream = true;
207
-
208
206
  if (cur != end) {
209
- grpc_slice_buffer_undo_take_first(
210
- slices, grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
211
- static_cast<size_t>(end - beg)));
207
+ grpc_slice_buffer_sub_first(slices, static_cast<size_t>(cur - beg),
208
+ static_cast<size_t>(end - beg));
209
+ } else {
210
+ grpc_slice_buffer_remove_first(slices);
212
211
  }
213
- grpc_slice_unref_internal(slice);
214
212
  return GRPC_ERROR_NONE;
215
213
  case GRPC_CHTTP2_DATA_FRAME: {
216
214
  GPR_ASSERT(p->parsing_frame != nullptr);
217
215
  GPR_ASSERT(slice_out != nullptr);
218
216
  if (cur == end) {
219
- grpc_slice_unref_internal(slice);
217
+ grpc_slice_buffer_remove_first(slices);
220
218
  continue;
221
219
  }
222
220
  uint32_t remaining = static_cast<uint32_t>(end - cur);
@@ -224,32 +222,32 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
224
222
  s->stats.incoming.data_bytes += remaining;
225
223
  if (GRPC_ERROR_NONE !=
226
224
  (error = p->parsing_frame->Push(
227
- grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
225
+ grpc_slice_sub(*slice, static_cast<size_t>(cur - beg),
228
226
  static_cast<size_t>(end - beg)),
229
227
  slice_out))) {
230
- grpc_slice_unref_internal(slice);
228
+ grpc_slice_buffer_remove_first(slices);
231
229
  return error;
232
230
  }
233
231
  if (GRPC_ERROR_NONE !=
234
232
  (error = p->parsing_frame->Finished(GRPC_ERROR_NONE, true))) {
235
- grpc_slice_unref_internal(slice);
233
+ grpc_slice_buffer_remove_first(slices);
236
234
  return error;
237
235
  }
238
236
  p->parsing_frame = nullptr;
239
237
  p->state = GRPC_CHTTP2_DATA_FH_0;
240
- grpc_slice_unref_internal(slice);
238
+ grpc_slice_buffer_remove_first(slices);
241
239
  return GRPC_ERROR_NONE;
242
240
  } else if (remaining < p->frame_size) {
243
241
  s->stats.incoming.data_bytes += remaining;
244
242
  if (GRPC_ERROR_NONE !=
245
243
  (error = p->parsing_frame->Push(
246
- grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
244
+ grpc_slice_sub(*slice, static_cast<size_t>(cur - beg),
247
245
  static_cast<size_t>(end - beg)),
248
246
  slice_out))) {
249
247
  return error;
250
248
  }
251
249
  p->frame_size -= remaining;
252
- grpc_slice_unref_internal(slice);
250
+ grpc_slice_buffer_remove_first(slices);
253
251
  return GRPC_ERROR_NONE;
254
252
  } else {
255
253
  GPR_ASSERT(remaining > p->frame_size);
@@ -257,37 +255,35 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
257
255
  if (GRPC_ERROR_NONE !=
258
256
  p->parsing_frame->Push(
259
257
  grpc_slice_sub(
260
- slice, static_cast<size_t>(cur - beg),
258
+ *slice, static_cast<size_t>(cur - beg),
261
259
  static_cast<size_t>(cur + p->frame_size - beg)),
262
260
  slice_out)) {
263
- grpc_slice_unref_internal(slice);
261
+ grpc_slice_buffer_remove_first(slices);
264
262
  return error;
265
263
  }
266
264
  if (GRPC_ERROR_NONE !=
267
265
  (error = p->parsing_frame->Finished(GRPC_ERROR_NONE, true))) {
268
- grpc_slice_unref_internal(slice);
266
+ grpc_slice_buffer_remove_first(slices);
269
267
  return error;
270
268
  }
271
269
  p->parsing_frame = nullptr;
272
270
  p->state = GRPC_CHTTP2_DATA_FH_0;
273
271
  cur += p->frame_size;
274
- grpc_slice_buffer_undo_take_first(
275
- slices, grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
276
- static_cast<size_t>(end - beg)));
277
- grpc_slice_unref_internal(slice);
272
+ grpc_slice_buffer_sub_first(slices, static_cast<size_t>(cur - beg),
273
+ static_cast<size_t>(end - beg));
278
274
  return GRPC_ERROR_NONE;
279
275
  }
280
276
  }
281
277
  }
282
278
  }
283
-
284
279
  return GRPC_ERROR_NONE;
285
280
  }
286
281
 
287
282
  grpc_error* grpc_chttp2_data_parser_parse(void* parser,
288
283
  grpc_chttp2_transport* t,
289
284
  grpc_chttp2_stream* s,
290
- grpc_slice slice, int is_last) {
285
+ const grpc_slice& slice,
286
+ int is_last) {
291
287
  if (!s->pending_byte_stream) {
292
288
  grpc_slice_ref_internal(slice);
293
289
  grpc_slice_buffer_add(&s->frame_storage, slice);
@@ -67,7 +67,7 @@ grpc_error* grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser* parser,
67
67
  grpc_error* grpc_chttp2_data_parser_parse(void* parser,
68
68
  grpc_chttp2_transport* t,
69
69
  grpc_chttp2_stream* s,
70
- grpc_slice slice, int is_last);
70
+ const grpc_slice& slice, int is_last);
71
71
 
72
72
  void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
73
73
  uint32_t write_bytes, int is_eof,
@@ -57,10 +57,11 @@ grpc_error* grpc_chttp2_goaway_parser_begin_frame(grpc_chttp2_goaway_parser* p,
57
57
  grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
58
58
  grpc_chttp2_transport* t,
59
59
  grpc_chttp2_stream* s,
60
- grpc_slice slice, int is_last) {
61
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
62
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
63
- uint8_t* cur = beg;
60
+ const grpc_slice& slice,
61
+ int is_last) {
62
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
63
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
64
+ const uint8_t* cur = beg;
64
65
  grpc_chttp2_goaway_parser* p =
65
66
  static_cast<grpc_chttp2_goaway_parser*>(parser);
66
67
 
@@ -149,7 +150,7 @@ grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
149
150
  }
150
151
 
151
152
  void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
152
- grpc_slice debug_data,
153
+ const grpc_slice& debug_data,
153
154
  grpc_slice_buffer* slice_buffer) {
154
155
  grpc_slice header = GRPC_SLICE_MALLOC(9 + 4 + 4);
155
156
  uint8_t* p = GRPC_SLICE_START_PTR(header);
@@ -53,10 +53,11 @@ grpc_error* grpc_chttp2_goaway_parser_begin_frame(
53
53
  grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
54
54
  grpc_chttp2_transport* t,
55
55
  grpc_chttp2_stream* s,
56
- grpc_slice slice, int is_last);
56
+ const grpc_slice& slice,
57
+ int is_last);
57
58
 
58
59
  void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
59
- grpc_slice debug_data,
60
+ const grpc_slice& debug_data,
60
61
  grpc_slice_buffer* slice_buffer);
61
62
 
62
63
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_GOAWAY_H */
@@ -73,10 +73,11 @@ grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
73
73
  grpc_error* grpc_chttp2_ping_parser_parse(void* parser,
74
74
  grpc_chttp2_transport* t,
75
75
  grpc_chttp2_stream* s,
76
- grpc_slice slice, int is_last) {
77
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
78
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
79
- uint8_t* cur = beg;
76
+ const grpc_slice& slice,
77
+ int is_last) {
78
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
79
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
80
+ const uint8_t* cur = beg;
80
81
  grpc_chttp2_ping_parser* p = static_cast<grpc_chttp2_ping_parser*>(parser);
81
82
 
82
83
  while (p->byte != 8 && cur != end) {
@@ -37,7 +37,7 @@ grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
37
37
  grpc_error* grpc_chttp2_ping_parser_parse(void* parser,
38
38
  grpc_chttp2_transport* t,
39
39
  grpc_chttp2_stream* s,
40
- grpc_slice slice, int is_last);
40
+ const grpc_slice& slice, int is_last);
41
41
 
42
42
  /* Test-only function for disabling ping ack */
43
43
  void grpc_set_disable_ping_ack(bool disable_ping_ack);
@@ -26,6 +26,7 @@
26
26
  #include <grpc/support/string_util.h>
27
27
 
28
28
  #include "src/core/ext/transport/chttp2/transport/frame.h"
29
+ #include "src/core/lib/gprpp/memory.h"
29
30
  #include "src/core/lib/transport/http2_errors.h"
30
31
 
31
32
  grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
@@ -74,10 +75,11 @@ grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
74
75
  grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
75
76
  grpc_chttp2_transport* t,
76
77
  grpc_chttp2_stream* s,
77
- grpc_slice slice, int is_last) {
78
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
79
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
80
- uint8_t* cur = beg;
78
+ const grpc_slice& slice,
79
+ int is_last) {
80
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
81
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
82
+ const uint8_t* cur = beg;
81
83
  grpc_chttp2_rst_stream_parser* p =
82
84
  static_cast<grpc_chttp2_rst_stream_parser*>(parser);
83
85
 
@@ -101,9 +103,9 @@ grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
101
103
  error = grpc_error_set_int(
102
104
  grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("RST_STREAM"),
103
105
  GRPC_ERROR_STR_GRPC_MESSAGE,
104
- grpc_slice_from_copied_string(message)),
106
+ grpc_slice_from_moved_string(
107
+ grpc_core::UniquePtr<char>(message))),
105
108
  GRPC_ERROR_INT_HTTP2_ERROR, static_cast<intptr_t>(reason));
106
- gpr_free(message);
107
109
  }
108
110
  grpc_chttp2_mark_stream_closed(t, s, true, true, error);
109
111
  }
@@ -38,6 +38,7 @@ grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
38
38
  grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
39
39
  grpc_chttp2_transport* t,
40
40
  grpc_chttp2_stream* s,
41
- grpc_slice slice, int is_last);
41
+ const grpc_slice& slice,
42
+ int is_last);
42
43
 
43
44
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
@@ -111,7 +111,8 @@ grpc_error* grpc_chttp2_settings_parser_begin_frame(
111
111
 
112
112
  grpc_error* grpc_chttp2_settings_parser_parse(void* p, grpc_chttp2_transport* t,
113
113
  grpc_chttp2_stream* s,
114
- grpc_slice slice, int is_last) {
114
+ const grpc_slice& slice,
115
+ int is_last) {
115
116
  grpc_chttp2_settings_parser* parser =
116
117
  static_cast<grpc_chttp2_settings_parser*>(p);
117
118
  const uint8_t* cur = GRPC_SLICE_START_PTR(slice);
@@ -216,19 +217,20 @@ grpc_error* grpc_chttp2_settings_parser_parse(void* p, grpc_chttp2_transport* t,
216
217
  parser->incoming_settings[id] != parser->value) {
217
218
  t->initial_window_update += static_cast<int64_t>(parser->value) -
218
219
  parser->incoming_settings[id];
219
- if (grpc_http_trace.enabled() || grpc_flowctl_trace.enabled()) {
220
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
221
+ GRPC_TRACE_FLAG_ENABLED(grpc_flowctl_trace)) {
220
222
  gpr_log(GPR_INFO, "%p[%s] adding %d for initial_window change", t,
221
223
  t->is_client ? "cli" : "svr",
222
224
  static_cast<int>(t->initial_window_update));
223
225
  }
224
226
  }
225
227
  parser->incoming_settings[id] = parser->value;
226
- if (grpc_http_trace.enabled()) {
228
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
227
229
  gpr_log(GPR_INFO, "CHTTP2:%s:%s: got setting %s = %d",
228
230
  t->is_client ? "CLI" : "SVR", t->peer_string, sp->name,
229
231
  parser->value);
230
232
  }
231
- } else if (grpc_http_trace.enabled()) {
233
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
232
234
  gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
233
235
  parser->id, parser->value);
234
236
  }
@@ -55,6 +55,7 @@ grpc_error* grpc_chttp2_settings_parser_begin_frame(
55
55
  grpc_error* grpc_chttp2_settings_parser_parse(void* parser,
56
56
  grpc_chttp2_transport* t,
57
57
  grpc_chttp2_stream* s,
58
- grpc_slice slice, int is_last);
58
+ const grpc_slice& slice,
59
+ int is_last);
59
60
 
60
61
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
@@ -69,11 +69,11 @@ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
69
69
  grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
70
70
  grpc_chttp2_transport* t,
71
71
  grpc_chttp2_stream* s,
72
- grpc_slice slice,
72
+ const grpc_slice& slice,
73
73
  int is_last) {
74
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
75
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
76
- uint8_t* cur = beg;
74
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
75
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
76
+ const uint8_t* cur = beg;
77
77
  grpc_chttp2_window_update_parser* p =
78
78
  static_cast<grpc_chttp2_window_update_parser*>(parser);
79
79
 
@@ -88,8 +88,9 @@ grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
88
88
  }
89
89
 
90
90
  if (p->byte == 4) {
91
- uint32_t received_update = p->amount;
92
- if (received_update == 0 || (received_update & 0x80000000u)) {
91
+ // top bit is reserved and must be ignored.
92
+ uint32_t received_update = p->amount & 0x7fffffffu;
93
+ if (received_update == 0) {
93
94
  char* msg;
94
95
  gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount);
95
96
  grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
@@ -39,7 +39,7 @@ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
39
39
  grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
40
40
  grpc_chttp2_transport* t,
41
41
  grpc_chttp2_stream* s,
42
- grpc_slice slice,
42
+ const grpc_slice& slice,
43
43
  int is_last);
44
44
 
45
45
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */