grpc 1.0.1 → 1.1.2

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 (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -39,13 +39,15 @@
39
39
  #include <grpc/support/string_util.h>
40
40
 
41
41
  #include "src/core/ext/transport/chttp2/transport/frame.h"
42
+ #include "src/core/ext/transport/chttp2/transport/http2_errors.h"
43
+ #include "src/core/ext/transport/chttp2/transport/status_conversion.h"
42
44
 
43
- gpr_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
44
- grpc_transport_one_way_stats *stats) {
45
+ grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
46
+ grpc_transport_one_way_stats *stats) {
45
47
  static const size_t frame_size = 13;
46
- gpr_slice slice = gpr_slice_malloc(frame_size);
48
+ grpc_slice slice = grpc_slice_malloc(frame_size);
47
49
  stats->framing_bytes += frame_size;
48
- uint8_t *p = GPR_SLICE_START_PTR(slice);
50
+ uint8_t *p = GRPC_SLICE_START_PTR(slice);
49
51
 
50
52
  // Frame size.
51
53
  *p++ = 0;
@@ -83,12 +85,13 @@ grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
83
85
  return GRPC_ERROR_NONE;
84
86
  }
85
87
 
86
- grpc_error *grpc_chttp2_rst_stream_parser_parse(
87
- grpc_exec_ctx *exec_ctx, void *parser,
88
- grpc_chttp2_transport_parsing *transport_parsing,
89
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
90
- uint8_t *const beg = GPR_SLICE_START_PTR(slice);
91
- uint8_t *const end = GPR_SLICE_END_PTR(slice);
88
+ grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
89
+ void *parser,
90
+ grpc_chttp2_transport *t,
91
+ grpc_chttp2_stream *s,
92
+ grpc_slice slice, int is_last) {
93
+ uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
94
+ uint8_t *const end = GRPC_SLICE_END_PTR(slice);
92
95
  uint8_t *cur = beg;
93
96
  grpc_chttp2_rst_stream_parser *p = parser;
94
97
 
@@ -97,19 +100,28 @@ grpc_error *grpc_chttp2_rst_stream_parser_parse(
97
100
  cur++;
98
101
  p->byte++;
99
102
  }
100
- stream_parsing->stats.incoming.framing_bytes += (uint64_t)(end - cur);
103
+ s->stats.incoming.framing_bytes += (uint64_t)(end - cur);
101
104
 
102
105
  if (p->byte == 4) {
103
106
  GPR_ASSERT(is_last);
104
- stream_parsing->received_close = 1;
105
- if (stream_parsing->forced_close_error == GRPC_ERROR_NONE) {
106
- stream_parsing->forced_close_error = grpc_error_set_int(
107
- GRPC_ERROR_CREATE("RST_STREAM"), GRPC_ERROR_INT_HTTP2_ERROR,
108
- (intptr_t)((((uint32_t)p->reason_bytes[0]) << 24) |
109
- (((uint32_t)p->reason_bytes[1]) << 16) |
110
- (((uint32_t)p->reason_bytes[2]) << 8) |
111
- (((uint32_t)p->reason_bytes[3]))));
107
+ uint32_t reason = (((uint32_t)p->reason_bytes[0]) << 24) |
108
+ (((uint32_t)p->reason_bytes[1]) << 16) |
109
+ (((uint32_t)p->reason_bytes[2]) << 8) |
110
+ (((uint32_t)p->reason_bytes[3]));
111
+ grpc_error *error = GRPC_ERROR_NONE;
112
+ if (reason != GRPC_CHTTP2_NO_ERROR || s->header_frames_received < 2) {
113
+ error = grpc_error_set_int(GRPC_ERROR_CREATE("RST_STREAM"),
114
+ GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)reason);
115
+ grpc_status_code status_code = grpc_chttp2_http2_error_to_grpc_status(
116
+ (grpc_chttp2_error_code)reason, s->deadline);
117
+ char *status_details;
118
+ gpr_asprintf(&status_details, "Received RST_STREAM with error code %d",
119
+ reason);
120
+ grpc_slice slice_details = grpc_slice_from_copied_string(status_details);
121
+ gpr_free(status_details);
122
+ grpc_chttp2_fake_status(exec_ctx, t, s, status_code, &slice_details);
112
123
  }
124
+ grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, true, error);
113
125
  }
114
126
 
115
127
  return GRPC_ERROR_NONE;
@@ -34,7 +34,7 @@
34
34
  #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H
35
35
  #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H
36
36
 
37
- #include <grpc/support/slice.h>
37
+ #include <grpc/slice.h>
38
38
  #include "src/core/ext/transport/chttp2/transport/frame.h"
39
39
  #include "src/core/lib/iomgr/exec_ctx.h"
40
40
  #include "src/core/lib/transport/transport.h"
@@ -44,14 +44,15 @@ typedef struct {
44
44
  uint8_t reason_bytes[4];
45
45
  } grpc_chttp2_rst_stream_parser;
46
46
 
47
- gpr_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code,
48
- grpc_transport_one_way_stats *stats);
47
+ grpc_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code,
48
+ grpc_transport_one_way_stats *stats);
49
49
 
50
50
  grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
51
51
  grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags);
52
- grpc_error *grpc_chttp2_rst_stream_parser_parse(
53
- grpc_exec_ctx *exec_ctx, void *parser,
54
- grpc_chttp2_transport_parsing *transport_parsing,
55
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
52
+ grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
53
+ void *parser,
54
+ grpc_chttp2_transport *t,
55
+ grpc_chttp2_stream *s,
56
+ grpc_slice slice, int is_last);
56
57
 
57
58
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
@@ -82,19 +82,19 @@ static uint8_t *fill_header(uint8_t *out, uint32_t length, uint8_t flags) {
82
82
  return out;
83
83
  }
84
84
 
85
- gpr_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
86
- uint32_t force_mask, size_t count) {
85
+ grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
86
+ uint32_t force_mask, size_t count) {
87
87
  size_t i;
88
88
  uint32_t n = 0;
89
- gpr_slice output;
89
+ grpc_slice output;
90
90
  uint8_t *p;
91
91
 
92
92
  for (i = 0; i < count; i++) {
93
93
  n += (new[i] != old[i] || (force_mask & (1u << i)) != 0);
94
94
  }
95
95
 
96
- output = gpr_slice_malloc(9 + 6 * n);
97
- p = fill_header(GPR_SLICE_START_PTR(output), 6 * n, 0);
96
+ output = grpc_slice_malloc(9 + 6 * n);
97
+ p = fill_header(GRPC_SLICE_START_PTR(output), 6 * n, 0);
98
98
 
99
99
  for (i = 0; i < count; i++) {
100
100
  if (new[i] != old[i] || (force_mask & (1u << i)) != 0) {
@@ -109,14 +109,14 @@ gpr_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
109
109
  }
110
110
  }
111
111
 
112
- GPR_ASSERT(p == GPR_SLICE_END_PTR(output));
112
+ GPR_ASSERT(p == GRPC_SLICE_END_PTR(output));
113
113
 
114
114
  return output;
115
115
  }
116
116
 
117
- gpr_slice grpc_chttp2_settings_ack_create(void) {
118
- gpr_slice output = gpr_slice_malloc(9);
119
- fill_header(GPR_SLICE_START_PTR(output), 0, GRPC_CHTTP2_FLAG_ACK);
117
+ grpc_slice grpc_chttp2_settings_ack_create(void) {
118
+ grpc_slice output = grpc_slice_malloc(9);
119
+ fill_header(GRPC_SLICE_START_PTR(output), 0, GRPC_CHTTP2_FLAG_ACK);
120
120
  return output;
121
121
  }
122
122
 
@@ -143,13 +143,13 @@ grpc_error *grpc_chttp2_settings_parser_begin_frame(
143
143
  }
144
144
  }
145
145
 
146
- grpc_error *grpc_chttp2_settings_parser_parse(
147
- grpc_exec_ctx *exec_ctx, void *p,
148
- grpc_chttp2_transport_parsing *transport_parsing,
149
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
146
+ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
147
+ grpc_chttp2_transport *t,
148
+ grpc_chttp2_stream *s,
149
+ grpc_slice slice, int is_last) {
150
150
  grpc_chttp2_settings_parser *parser = p;
151
- const uint8_t *cur = GPR_SLICE_START_PTR(slice);
152
- const uint8_t *end = GPR_SLICE_END_PTR(slice);
151
+ const uint8_t *cur = GRPC_SLICE_START_PTR(slice);
152
+ const uint8_t *end = GRPC_SLICE_END_PTR(slice);
153
153
  char *msg;
154
154
 
155
155
  if (parser->is_ack) {
@@ -162,11 +162,9 @@ grpc_error *grpc_chttp2_settings_parser_parse(
162
162
  if (cur == end) {
163
163
  parser->state = GRPC_CHTTP2_SPS_ID0;
164
164
  if (is_last) {
165
- transport_parsing->settings_updated = 1;
166
165
  memcpy(parser->target_settings, parser->incoming_settings,
167
166
  GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
168
- gpr_slice_buffer_add(&transport_parsing->qbuf,
169
- grpc_chttp2_settings_ack_create());
167
+ grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
170
168
  }
171
169
  return GRPC_ERROR_NONE;
172
170
  }
@@ -226,9 +224,9 @@ grpc_error *grpc_chttp2_settings_parser_parse(
226
224
  break;
227
225
  case GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE:
228
226
  grpc_chttp2_goaway_append(
229
- transport_parsing->last_incoming_stream_id, sp->error_value,
230
- gpr_slice_from_static_string("HTTP2 settings error"),
231
- &transport_parsing->qbuf);
227
+ t->last_new_stream_id, sp->error_value,
228
+ grpc_slice_from_static_string("HTTP2 settings error"),
229
+ &t->qbuf);
232
230
  gpr_asprintf(&msg, "invalid value %u passed for %s",
233
231
  parser->value, sp->name);
234
232
  grpc_error *err = GRPC_ERROR_CREATE(msg);
@@ -238,18 +236,17 @@ grpc_error *grpc_chttp2_settings_parser_parse(
238
236
  }
239
237
  if (parser->id == GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE &&
240
238
  parser->incoming_settings[parser->id] != parser->value) {
241
- transport_parsing->initial_window_update =
239
+ t->initial_window_update =
242
240
  (int64_t)parser->value - parser->incoming_settings[parser->id];
243
241
  if (grpc_http_trace) {
244
242
  gpr_log(GPR_DEBUG, "adding %d for initial_window change",
245
- (int)transport_parsing->initial_window_update);
243
+ (int)t->initial_window_update);
246
244
  }
247
245
  }
248
246
  parser->incoming_settings[parser->id] = parser->value;
249
247
  if (grpc_http_trace) {
250
248
  gpr_log(GPR_DEBUG, "CHTTP2:%s: got setting %d = %d",
251
- transport_parsing->is_client ? "CLI" : "SVR", parser->id,
252
- parser->value);
249
+ t->is_client ? "CLI" : "SVR", parser->id, parser->value);
253
250
  }
254
251
  } else if (grpc_http_trace) {
255
252
  gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
@@ -34,8 +34,8 @@
34
34
  #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H
35
35
  #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H
36
36
 
37
+ #include <grpc/slice.h>
37
38
  #include <grpc/support/port_platform.h>
38
- #include <grpc/support/slice.h>
39
39
  #include "src/core/ext/transport/chttp2/transport/frame.h"
40
40
  #include "src/core/lib/iomgr/exec_ctx.h"
41
41
 
@@ -87,17 +87,18 @@ extern const grpc_chttp2_setting_parameters
87
87
  grpc_chttp2_settings_parameters[GRPC_CHTTP2_NUM_SETTINGS];
88
88
 
89
89
  /* Create a settings frame by diffing old & new, and updating old to be new */
90
- gpr_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
91
- uint32_t force_mask, size_t count);
90
+ grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
91
+ uint32_t force_mask, size_t count);
92
92
  /* Create an ack settings frame */
93
- gpr_slice grpc_chttp2_settings_ack_create(void);
93
+ grpc_slice grpc_chttp2_settings_ack_create(void);
94
94
 
95
95
  grpc_error *grpc_chttp2_settings_parser_begin_frame(
96
96
  grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags,
97
97
  uint32_t *settings);
98
- grpc_error *grpc_chttp2_settings_parser_parse(
99
- grpc_exec_ctx *exec_ctx, void *parser,
100
- grpc_chttp2_transport_parsing *transport_parsing,
101
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
98
+ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx,
99
+ void *parser,
100
+ grpc_chttp2_transport *t,
101
+ grpc_chttp2_stream *s,
102
+ grpc_slice slice, int is_last);
102
103
 
103
104
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
@@ -38,12 +38,12 @@
38
38
  #include <grpc/support/log.h>
39
39
  #include <grpc/support/string_util.h>
40
40
 
41
- gpr_slice grpc_chttp2_window_update_create(
41
+ grpc_slice grpc_chttp2_window_update_create(
42
42
  uint32_t id, uint32_t window_update, grpc_transport_one_way_stats *stats) {
43
43
  static const size_t frame_size = 13;
44
- gpr_slice slice = gpr_slice_malloc(frame_size);
44
+ grpc_slice slice = grpc_slice_malloc(frame_size);
45
45
  stats->header_bytes += frame_size;
46
- uint8_t *p = GPR_SLICE_START_PTR(slice);
46
+ uint8_t *p = GRPC_SLICE_START_PTR(slice);
47
47
 
48
48
  GPR_ASSERT(window_update);
49
49
 
@@ -80,11 +80,10 @@ grpc_error *grpc_chttp2_window_update_parser_begin_frame(
80
80
  }
81
81
 
82
82
  grpc_error *grpc_chttp2_window_update_parser_parse(
83
- grpc_exec_ctx *exec_ctx, void *parser,
84
- grpc_chttp2_transport_parsing *transport_parsing,
85
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last) {
86
- uint8_t *const beg = GPR_SLICE_START_PTR(slice);
87
- uint8_t *const end = GPR_SLICE_END_PTR(slice);
83
+ grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
84
+ grpc_chttp2_stream *s, grpc_slice slice, int is_last) {
85
+ uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
86
+ uint8_t *const end = GRPC_SLICE_END_PTR(slice);
88
87
  uint8_t *cur = beg;
89
88
  grpc_chttp2_window_update_parser *p = parser;
90
89
 
@@ -94,8 +93,8 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
94
93
  p->byte++;
95
94
  }
96
95
 
97
- if (stream_parsing != NULL) {
98
- stream_parsing->stats.incoming.framing_bytes += (uint32_t)(end - cur);
96
+ if (s != NULL) {
97
+ s->stats.incoming.framing_bytes += (uint32_t)(end - cur);
99
98
  }
100
99
 
101
100
  if (p->byte == 4) {
@@ -109,17 +108,26 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
109
108
  }
110
109
  GPR_ASSERT(is_last);
111
110
 
112
- if (transport_parsing->incoming_stream_id != 0) {
113
- if (stream_parsing != NULL) {
114
- GRPC_CHTTP2_FLOW_CREDIT_STREAM("parse", transport_parsing,
115
- stream_parsing, outgoing_window,
111
+ if (t->incoming_stream_id != 0) {
112
+ if (s != NULL) {
113
+ bool was_zero = s->outgoing_window <= 0;
114
+ GRPC_CHTTP2_FLOW_CREDIT_STREAM("parse", t, s, outgoing_window,
116
115
  received_update);
117
- grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
118
- stream_parsing);
116
+ bool is_zero = s->outgoing_window <= 0;
117
+ if (was_zero && !is_zero) {
118
+ grpc_chttp2_become_writable(exec_ctx, t, s, false,
119
+ "stream.read_flow_control");
120
+ }
119
121
  }
120
122
  } else {
121
- GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parse", transport_parsing,
122
- outgoing_window, received_update);
123
+ bool was_zero = t->outgoing_window <= 0;
124
+ GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parse", t, outgoing_window,
125
+ received_update);
126
+ bool is_zero = t->outgoing_window <= 0;
127
+ if (was_zero && !is_zero) {
128
+ grpc_chttp2_initiate_write(exec_ctx, t, false,
129
+ "new_global_flow_control");
130
+ }
123
131
  }
124
132
  }
125
133
 
@@ -34,7 +34,7 @@
34
34
  #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H
35
35
  #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H
36
36
 
37
- #include <grpc/support/slice.h>
37
+ #include <grpc/slice.h>
38
38
  #include "src/core/ext/transport/chttp2/transport/frame.h"
39
39
  #include "src/core/lib/iomgr/exec_ctx.h"
40
40
  #include "src/core/lib/transport/transport.h"
@@ -45,14 +45,13 @@ typedef struct {
45
45
  uint32_t amount;
46
46
  } grpc_chttp2_window_update_parser;
47
47
 
48
- gpr_slice grpc_chttp2_window_update_create(uint32_t id, uint32_t window_delta,
49
- grpc_transport_one_way_stats *stats);
48
+ grpc_slice grpc_chttp2_window_update_create(
49
+ uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats *stats);
50
50
 
51
51
  grpc_error *grpc_chttp2_window_update_parser_begin_frame(
52
52
  grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags);
53
53
  grpc_error *grpc_chttp2_window_update_parser_parse(
54
- grpc_exec_ctx *exec_ctx, void *parser,
55
- grpc_chttp2_transport_parsing *transport_parsing,
56
- grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
54
+ grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
55
+ grpc_chttp2_stream *s, grpc_slice slice, int is_last);
57
56
 
58
57
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */
@@ -47,10 +47,11 @@
47
47
 
48
48
  #include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
49
49
  #include "src/core/ext/transport/chttp2/transport/hpack_table.h"
50
- #include "src/core/ext/transport/chttp2/transport/timeout_encoding.h"
51
50
  #include "src/core/ext/transport/chttp2/transport/varint.h"
51
+ #include "src/core/lib/slice/slice_internal.h"
52
52
  #include "src/core/lib/transport/metadata.h"
53
53
  #include "src/core/lib/transport/static_metadata.h"
54
+ #include "src/core/lib/transport/timeout_encoding.h"
54
55
 
55
56
  #define HASH_FRAGMENT_1(x) ((x)&255)
56
57
  #define HASH_FRAGMENT_2(x) ((x >> 8) & 255)
@@ -76,8 +77,10 @@ typedef struct {
76
77
  uint8_t seen_regular_header;
77
78
  /* output stream id */
78
79
  uint32_t stream_id;
79
- gpr_slice_buffer *output;
80
+ grpc_slice_buffer *output;
80
81
  grpc_transport_one_way_stats *stats;
82
+ /* maximum size of a frame */
83
+ size_t max_frame_size;
81
84
  } framer_state;
82
85
 
83
86
  /* fills p (which is expected to be 9 bytes long) with a data frame header */
@@ -102,7 +105,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
102
105
  type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
103
106
  : GRPC_CHTTP2_FRAME_CONTINUATION;
104
107
  fill_header(
105
- GPR_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
108
+ GRPC_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
106
109
  st->stream_id, st->output->length - st->output_length_at_start_of_frame,
107
110
  (uint8_t)((is_last_in_stream ? GRPC_CHTTP2_DATA_FLAG_END_STREAM : 0) |
108
111
  (is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
@@ -114,7 +117,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
114
117
  output before beginning */
115
118
  static void begin_frame(framer_state *st) {
116
119
  st->header_idx =
117
- gpr_slice_buffer_add_indexed(st->output, gpr_slice_malloc(9));
120
+ grpc_slice_buffer_add_indexed(st->output, grpc_slice_malloc(9));
118
121
  st->output_length_at_start_of_frame = st->output->length;
119
122
  }
120
123
 
@@ -123,7 +126,7 @@ static void begin_frame(framer_state *st) {
123
126
  needed */
124
127
  static void ensure_space(framer_state *st, size_t need_bytes) {
125
128
  if (st->output->length - st->output_length_at_start_of_frame + need_bytes <=
126
- GRPC_CHTTP2_MAX_PAYLOAD_LENGTH) {
129
+ st->max_frame_size) {
127
130
  return;
128
131
  }
129
132
  finish_frame(st, 0, 0);
@@ -145,18 +148,18 @@ static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
145
148
  }
146
149
  }
147
150
 
148
- static void add_header_data(framer_state *st, gpr_slice slice) {
149
- size_t len = GPR_SLICE_LENGTH(slice);
151
+ static void add_header_data(framer_state *st, grpc_slice slice) {
152
+ size_t len = GRPC_SLICE_LENGTH(slice);
150
153
  size_t remaining;
151
154
  if (len == 0) return;
152
- remaining = GRPC_CHTTP2_MAX_PAYLOAD_LENGTH +
153
- st->output_length_at_start_of_frame - st->output->length;
155
+ remaining = st->max_frame_size + st->output_length_at_start_of_frame -
156
+ st->output->length;
154
157
  if (len <= remaining) {
155
158
  st->stats->header_bytes += len;
156
- gpr_slice_buffer_add(st->output, slice);
159
+ grpc_slice_buffer_add(st->output, slice);
157
160
  } else {
158
161
  st->stats->header_bytes += remaining;
159
- gpr_slice_buffer_add(st->output, gpr_slice_split_head(&slice, remaining));
162
+ grpc_slice_buffer_add(st->output, grpc_slice_split_head(&slice, remaining));
160
163
  finish_frame(st, 0, 0);
161
164
  begin_frame(st);
162
165
  add_header_data(st, slice);
@@ -165,7 +168,7 @@ static void add_header_data(framer_state *st, gpr_slice slice) {
165
168
 
166
169
  static uint8_t *add_tiny_header_data(framer_state *st, size_t len) {
167
170
  ensure_space(st, len);
168
- return gpr_slice_buffer_tiny_add(st->output, len);
171
+ return grpc_slice_buffer_tiny_add(st->output, len);
169
172
  }
170
173
 
171
174
  static void evict_entry(grpc_chttp2_hpack_compressor *c) {
@@ -181,7 +184,8 @@ static void evict_entry(grpc_chttp2_hpack_compressor *c) {
181
184
  }
182
185
 
183
186
  /* add an element to the decoder table */
184
- static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
187
+ static void add_elem(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
188
+ grpc_mdelem *elem) {
185
189
  uint32_t key_hash = elem->key->hash;
186
190
  uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
187
191
  uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
@@ -225,12 +229,12 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
225
229
  } else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
226
230
  c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
227
231
  /* not there: replace oldest */
228
- GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
232
+ GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
229
233
  c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
230
234
  c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
231
235
  } else {
232
236
  /* not there: replace oldest */
233
- GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
237
+ GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
234
238
  c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
235
239
  c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
236
240
  }
@@ -249,11 +253,11 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
249
253
  c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
250
254
  } else if (c->indices_keys[HASH_FRAGMENT_2(key_hash)] <
251
255
  c->indices_keys[HASH_FRAGMENT_3(key_hash)]) {
252
- GRPC_MDSTR_UNREF(c->entries_keys[HASH_FRAGMENT_2(key_hash)]);
256
+ GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[HASH_FRAGMENT_2(key_hash)]);
253
257
  c->entries_keys[HASH_FRAGMENT_2(key_hash)] = GRPC_MDSTR_REF(elem->key);
254
258
  c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
255
259
  } else {
256
- GRPC_MDSTR_UNREF(c->entries_keys[HASH_FRAGMENT_3(key_hash)]);
260
+ GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[HASH_FRAGMENT_3(key_hash)]);
257
261
  c->entries_keys[HASH_FRAGMENT_3(key_hash)] = GRPC_MDSTR_REF(elem->key);
258
262
  c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
259
263
  }
@@ -266,9 +270,10 @@ static void emit_indexed(grpc_chttp2_hpack_compressor *c, uint32_t elem_index,
266
270
  len);
267
271
  }
268
272
 
269
- static gpr_slice get_wire_value(grpc_mdelem *elem, uint8_t *huffman_prefix) {
270
- if (grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(elem->key->slice),
271
- GPR_SLICE_LENGTH(elem->key->slice))) {
273
+ static grpc_slice get_wire_value(grpc_mdelem *elem, uint8_t *huffman_prefix) {
274
+ if (grpc_is_binary_header(
275
+ (const char *)GRPC_SLICE_START_PTR(elem->key->slice),
276
+ GRPC_SLICE_LENGTH(elem->key->slice))) {
272
277
  *huffman_prefix = 0x80;
273
278
  return grpc_mdstr_as_base64_encoded_and_huffman_compressed(elem->value);
274
279
  }
@@ -282,8 +287,8 @@ static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
282
287
  framer_state *st) {
283
288
  uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
284
289
  uint8_t huffman_prefix;
285
- gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
286
- size_t len_val = GPR_SLICE_LENGTH(value_slice);
290
+ grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
291
+ size_t len_val = GRPC_SLICE_LENGTH(value_slice);
287
292
  uint32_t len_val_len;
288
293
  GPR_ASSERT(len_val <= UINT32_MAX);
289
294
  len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
@@ -291,7 +296,7 @@ static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
291
296
  add_tiny_header_data(st, len_pfx), len_pfx);
292
297
  GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
293
298
  add_tiny_header_data(st, len_val_len), len_val_len);
294
- add_header_data(st, gpr_slice_ref(value_slice));
299
+ add_header_data(st, grpc_slice_ref_internal(value_slice));
295
300
  }
296
301
 
297
302
  static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
@@ -299,8 +304,8 @@ static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
299
304
  framer_state *st) {
300
305
  uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
301
306
  uint8_t huffman_prefix;
302
- gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
303
- size_t len_val = GPR_SLICE_LENGTH(value_slice);
307
+ grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
308
+ size_t len_val = GRPC_SLICE_LENGTH(value_slice);
304
309
  uint32_t len_val_len;
305
310
  GPR_ASSERT(len_val <= UINT32_MAX);
306
311
  len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
@@ -308,45 +313,45 @@ static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
308
313
  add_tiny_header_data(st, len_pfx), len_pfx);
309
314
  GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
310
315
  add_tiny_header_data(st, len_val_len), len_val_len);
311
- add_header_data(st, gpr_slice_ref(value_slice));
316
+ add_header_data(st, grpc_slice_ref_internal(value_slice));
312
317
  }
313
318
 
314
319
  static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c,
315
320
  grpc_mdelem *elem, framer_state *st) {
316
- uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
321
+ uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(elem->key->slice);
317
322
  uint8_t huffman_prefix;
318
- gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
319
- uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
323
+ grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
324
+ uint32_t len_val = (uint32_t)GRPC_SLICE_LENGTH(value_slice);
320
325
  uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
321
326
  uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
322
327
  GPR_ASSERT(len_key <= UINT32_MAX);
323
- GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
328
+ GPR_ASSERT(GRPC_SLICE_LENGTH(value_slice) <= UINT32_MAX);
324
329
  *add_tiny_header_data(st, 1) = 0x40;
325
330
  GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
326
331
  add_tiny_header_data(st, len_key_len), len_key_len);
327
- add_header_data(st, gpr_slice_ref(elem->key->slice));
332
+ add_header_data(st, grpc_slice_ref_internal(elem->key->slice));
328
333
  GRPC_CHTTP2_WRITE_VARINT(len_val, 1, huffman_prefix,
329
334
  add_tiny_header_data(st, len_val_len), len_val_len);
330
- add_header_data(st, gpr_slice_ref(value_slice));
335
+ add_header_data(st, grpc_slice_ref_internal(value_slice));
331
336
  }
332
337
 
333
338
  static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c,
334
339
  grpc_mdelem *elem, framer_state *st) {
335
- uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
340
+ uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(elem->key->slice);
336
341
  uint8_t huffman_prefix;
337
- gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
338
- uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
342
+ grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
343
+ uint32_t len_val = (uint32_t)GRPC_SLICE_LENGTH(value_slice);
339
344
  uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
340
345
  uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
341
346
  GPR_ASSERT(len_key <= UINT32_MAX);
342
- GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
347
+ GPR_ASSERT(GRPC_SLICE_LENGTH(value_slice) <= UINT32_MAX);
343
348
  *add_tiny_header_data(st, 1) = 0x00;
344
349
  GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
345
350
  add_tiny_header_data(st, len_key_len), len_key_len);
346
- add_header_data(st, gpr_slice_ref(elem->key->slice));
351
+ add_header_data(st, grpc_slice_ref_internal(elem->key->slice));
347
352
  GRPC_CHTTP2_WRITE_VARINT(len_val, 1, huffman_prefix,
348
353
  add_tiny_header_data(st, len_val_len), len_val_len);
349
- add_header_data(st, gpr_slice_ref(value_slice));
354
+ add_header_data(st, grpc_slice_ref_internal(value_slice));
350
355
  }
351
356
 
352
357
  static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor *c,
@@ -363,16 +368,16 @@ static uint32_t dynidx(grpc_chttp2_hpack_compressor *c, uint32_t elem_index) {
363
368
  }
364
369
 
365
370
  /* encode an mdelem */
366
- static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
367
- framer_state *st) {
371
+ static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
372
+ grpc_mdelem *elem, framer_state *st) {
368
373
  uint32_t key_hash = elem->key->hash;
369
374
  uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
370
375
  size_t decoder_space_usage;
371
376
  uint32_t indices_key;
372
377
  int should_add_elem;
373
378
 
374
- GPR_ASSERT(GPR_SLICE_LENGTH(elem->key->slice) > 0);
375
- if (GPR_SLICE_START_PTR(elem->key->slice)[0] != ':') { /* regular header */
379
+ GPR_ASSERT(GRPC_SLICE_LENGTH(elem->key->slice) > 0);
380
+ if (GRPC_SLICE_START_PTR(elem->key->slice)[0] != ':') { /* regular header */
376
381
  st->seen_regular_header = 1;
377
382
  } else {
378
383
  GPR_ASSERT(
@@ -414,7 +419,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
414
419
  /* HIT: key (first cuckoo hash) */
415
420
  if (should_add_elem) {
416
421
  emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
417
- add_elem(c, elem);
422
+ add_elem(exec_ctx, c, elem);
418
423
  return;
419
424
  } else {
420
425
  emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
@@ -429,7 +434,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
429
434
  /* HIT: key (first cuckoo hash) */
430
435
  if (should_add_elem) {
431
436
  emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
432
- add_elem(c, elem);
437
+ add_elem(exec_ctx, c, elem);
433
438
  return;
434
439
  } else {
435
440
  emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
@@ -442,7 +447,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
442
447
 
443
448
  if (should_add_elem) {
444
449
  emit_lithdr_incidx_v(c, elem, st);
445
- add_elem(c, elem);
450
+ add_elem(exec_ctx, c, elem);
446
451
  return;
447
452
  } else {
448
453
  emit_lithdr_noidx_v(c, elem, st);
@@ -454,16 +459,17 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
454
459
  #define STRLEN_LIT(x) (sizeof(x) - 1)
455
460
  #define TIMEOUT_KEY "grpc-timeout"
456
461
 
457
- static void deadline_enc(grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
462
+ static void deadline_enc(grpc_exec_ctx *exec_ctx,
463
+ grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
458
464
  framer_state *st) {
459
- char timeout_str[GRPC_CHTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
465
+ char timeout_str[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
460
466
  grpc_mdelem *mdelem;
461
- grpc_chttp2_encode_timeout(
467
+ grpc_http2_encode_timeout(
462
468
  gpr_time_sub(deadline, gpr_now(deadline.clock_type)), timeout_str);
463
469
  mdelem = grpc_mdelem_from_metadata_strings(
464
- GRPC_MDSTR_GRPC_TIMEOUT, grpc_mdstr_from_string(timeout_str));
465
- hpack_enc(c, mdelem, st);
466
- GRPC_MDELEM_UNREF(mdelem);
470
+ exec_ctx, GRPC_MDSTR_GRPC_TIMEOUT, grpc_mdstr_from_string(timeout_str));
471
+ hpack_enc(exec_ctx, c, mdelem, st);
472
+ GRPC_MDELEM_UNREF(exec_ctx, mdelem);
467
473
  }
468
474
 
469
475
  static uint32_t elems_for_bytes(uint32_t bytes) { return (bytes + 31) / 32; }
@@ -480,11 +486,12 @@ void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
480
486
  sizeof(*c->table_elem_size) * c->cap_table_elems);
481
487
  }
482
488
 
483
- void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor *c) {
489
+ void grpc_chttp2_hpack_compressor_destroy(grpc_exec_ctx *exec_ctx,
490
+ grpc_chttp2_hpack_compressor *c) {
484
491
  int i;
485
492
  for (i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
486
- if (c->entries_keys[i]) GRPC_MDSTR_UNREF(c->entries_keys[i]);
487
- if (c->entries_elems[i]) GRPC_MDELEM_UNREF(c->entries_elems[i]);
493
+ if (c->entries_keys[i]) GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[i]);
494
+ if (c->entries_elems[i]) GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[i]);
488
495
  }
489
496
  gpr_free(c->table_elem_size);
490
497
  }
@@ -539,11 +546,13 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
539
546
  }
540
547
  }
541
548
 
542
- void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
549
+ void grpc_chttp2_encode_header(grpc_exec_ctx *exec_ctx,
550
+ grpc_chttp2_hpack_compressor *c,
543
551
  uint32_t stream_id,
544
552
  grpc_metadata_batch *metadata, int is_eof,
553
+ size_t max_frame_size,
545
554
  grpc_transport_one_way_stats *stats,
546
- gpr_slice_buffer *outbuf) {
555
+ grpc_slice_buffer *outbuf) {
547
556
  framer_state st;
548
557
  grpc_linked_mdelem *l;
549
558
  gpr_timespec deadline;
@@ -555,6 +564,7 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
555
564
  st.output = outbuf;
556
565
  st.is_first_frame = 1;
557
566
  st.stats = stats;
567
+ st.max_frame_size = max_frame_size;
558
568
 
559
569
  /* Encode a metadata batch; store the returned values, representing
560
570
  a metadata element that needs to be unreffed back into the metadata
@@ -566,11 +576,11 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
566
576
  }
567
577
  grpc_metadata_batch_assert_ok(metadata);
568
578
  for (l = metadata->list.head; l; l = l->next) {
569
- hpack_enc(c, l->md, &st);
579
+ hpack_enc(exec_ctx, c, l->md, &st);
570
580
  }
571
581
  deadline = metadata->deadline;
572
582
  if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) != 0) {
573
- deadline_enc(c, deadline, &st);
583
+ deadline_enc(exec_ctx, c, deadline, &st);
574
584
  }
575
585
 
576
586
  finish_frame(&st, 1, is_eof);