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
@@ -41,235 +41,46 @@
41
41
 
42
42
  #include "src/core/ext/transport/chttp2/transport/http2_errors.h"
43
43
  #include "src/core/ext/transport/chttp2/transport/status_conversion.h"
44
- #include "src/core/ext/transport/chttp2/transport/timeout_encoding.h"
45
44
  #include "src/core/lib/profiling/timers.h"
46
45
  #include "src/core/lib/transport/static_metadata.h"
47
-
48
- #define TRANSPORT_FROM_PARSING(tp) \
49
- ((grpc_chttp2_transport *)((char *)(tp)-offsetof(grpc_chttp2_transport, \
50
- parsing)))
51
-
52
- static grpc_error *init_frame_parser(
53
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
54
- static grpc_error *init_header_frame_parser(
55
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
56
- int is_continuation);
57
- static grpc_error *init_data_frame_parser(
58
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
59
- static grpc_error *init_rst_stream_parser(
60
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
61
- static grpc_error *init_settings_frame_parser(
62
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
63
- static grpc_error *init_window_update_frame_parser(
64
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
65
- static grpc_error *init_ping_parser(
66
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
67
- static grpc_error *init_goaway_parser(
68
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
69
- static grpc_error *init_skip_frame_parser(
70
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
71
- int is_header);
72
-
73
- static grpc_error *parse_frame_slice(
74
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
75
- gpr_slice slice, int is_last);
76
-
77
- void grpc_chttp2_prepare_to_read(
78
- grpc_chttp2_transport_global *transport_global,
79
- grpc_chttp2_transport_parsing *transport_parsing) {
80
- grpc_chttp2_stream_global *stream_global;
81
- grpc_chttp2_stream_parsing *stream_parsing;
82
-
83
- GPR_TIMER_BEGIN("grpc_chttp2_prepare_to_read", 0);
84
-
85
- transport_parsing->next_stream_id = transport_global->next_stream_id;
86
- memcpy(transport_parsing->last_sent_settings,
87
- transport_global->settings[GRPC_SENT_SETTINGS],
88
- sizeof(transport_parsing->last_sent_settings));
89
- transport_parsing->max_frame_size =
90
- transport_global->settings[GRPC_ACKED_SETTINGS]
91
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE];
92
-
93
- /* update the parsing view of incoming window */
94
- while (grpc_chttp2_list_pop_unannounced_incoming_window_available(
95
- transport_global, transport_parsing, &stream_global, &stream_parsing)) {
96
- GRPC_CHTTP2_FLOW_MOVE_STREAM("parse", transport_parsing, stream_parsing,
97
- incoming_window, stream_global,
98
- unannounced_incoming_window_for_parse);
99
- }
100
-
101
- GPR_TIMER_END("grpc_chttp2_prepare_to_read", 0);
102
- }
103
-
104
- void grpc_chttp2_publish_reads(
105
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
106
- grpc_chttp2_transport_parsing *transport_parsing) {
107
- grpc_chttp2_stream_global *stream_global;
108
- grpc_chttp2_stream_parsing *stream_parsing;
109
- int was_zero;
110
- int is_zero;
111
-
112
- /* transport_parsing->last_incoming_stream_id is used as
113
- last-grpc_chttp2_stream-id when
114
- sending GOAWAY frame.
115
- https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.8
116
- says that last-grpc_chttp2_stream-id is peer-initiated grpc_chttp2_stream
117
- ID. So,
118
- since we don't have server pushed streams, client should send
119
- GOAWAY last-grpc_chttp2_stream-id=0 in this case. */
120
- if (!transport_parsing->is_client) {
121
- transport_global->last_incoming_stream_id =
122
- transport_parsing->last_incoming_stream_id;
123
- }
124
-
125
- /* update global settings */
126
- if (transport_parsing->settings_updated) {
127
- memcpy(transport_global->settings[GRPC_PEER_SETTINGS],
128
- transport_parsing->settings, sizeof(transport_parsing->settings));
129
- transport_parsing->settings_updated = 0;
130
- }
131
-
132
- /* update settings based on ack if received */
133
- if (transport_parsing->settings_ack_received) {
134
- memcpy(transport_global->settings[GRPC_ACKED_SETTINGS],
135
- transport_global->settings[GRPC_SENT_SETTINGS],
136
- GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
137
- transport_parsing->settings_ack_received = 0;
138
- transport_global->sent_local_settings = 0;
139
- }
140
-
141
- /* move goaway to the global state if we received one (it will be
142
- published later */
143
- if (transport_parsing->goaway_received) {
144
- grpc_chttp2_add_incoming_goaway(exec_ctx, transport_global,
145
- (uint32_t)transport_parsing->goaway_error,
146
- transport_parsing->goaway_text);
147
- transport_parsing->goaway_text = gpr_empty_slice();
148
- transport_parsing->goaway_received = 0;
149
- }
150
-
151
- /* propagate flow control tokens to global state */
152
- was_zero = transport_global->outgoing_window <= 0;
153
- GRPC_CHTTP2_FLOW_MOVE_TRANSPORT("parsed", transport_global, outgoing_window,
154
- transport_parsing, outgoing_window);
155
- is_zero = transport_global->outgoing_window <= 0;
156
- if (was_zero && !is_zero) {
157
- grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
158
- "new_global_flow_control");
159
- }
160
-
161
- if (transport_parsing->incoming_window <
162
- transport_global->connection_window_target * 3 / 4) {
163
- int64_t announce_bytes = transport_global->connection_window_target -
164
- transport_parsing->incoming_window;
165
- GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", transport_global,
166
- announce_incoming_window, announce_bytes);
167
- GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parsed", transport_parsing,
168
- incoming_window, announce_bytes);
169
- grpc_chttp2_initiate_write(exec_ctx, transport_global, false,
170
- "global incoming window");
171
- }
172
-
173
- /* for each stream that saw an update, fixup global state */
174
- while (grpc_chttp2_list_pop_parsing_seen_stream(
175
- transport_global, transport_parsing, &stream_global, &stream_parsing)) {
176
- if (stream_parsing->seen_error) {
177
- stream_global->seen_error = true;
178
- stream_global->exceeded_metadata_size =
179
- stream_parsing->exceeded_metadata_size;
180
- grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
181
- }
182
-
183
- /* flush stats to global stream state */
184
- grpc_transport_move_stats(&stream_parsing->stats, &stream_global->stats);
185
-
186
- /* update outgoing flow control window */
187
- was_zero = stream_global->outgoing_window <= 0;
188
- GRPC_CHTTP2_FLOW_MOVE_STREAM("parsed", transport_global, stream_global,
189
- outgoing_window, stream_parsing,
190
- outgoing_window);
191
- is_zero = stream_global->outgoing_window <= 0;
192
- if (was_zero && !is_zero) {
193
- grpc_chttp2_become_writable(exec_ctx, transport_global, stream_global,
194
- false, "stream.read_flow_control");
195
- }
196
-
197
- stream_global->max_recv_bytes -= (uint32_t)GPR_MIN(
198
- stream_global->max_recv_bytes, stream_parsing->received_bytes);
199
- stream_parsing->received_bytes = 0;
200
-
201
- /* publish incoming stream ops */
202
- if (stream_global->incoming_frames.tail != NULL) {
203
- stream_global->incoming_frames.tail->is_tail = 0;
204
- }
205
- if (stream_parsing->data_parser.incoming_frames.head != NULL) {
206
- grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
207
- }
208
- grpc_chttp2_incoming_frame_queue_merge(
209
- &stream_global->incoming_frames,
210
- &stream_parsing->data_parser.incoming_frames);
211
- if (stream_global->incoming_frames.tail != NULL) {
212
- stream_global->incoming_frames.tail->is_tail = 1;
213
- }
214
-
215
- if (!stream_global->published_initial_metadata &&
216
- stream_parsing->got_metadata_on_parse[0]) {
217
- stream_parsing->got_metadata_on_parse[0] = 0;
218
- stream_global->published_initial_metadata = 1;
219
- GPR_SWAP(grpc_chttp2_incoming_metadata_buffer,
220
- stream_parsing->metadata_buffer[0],
221
- stream_global->received_initial_metadata);
222
- grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
223
- }
224
- if (!stream_global->published_trailing_metadata &&
225
- stream_parsing->got_metadata_on_parse[1]) {
226
- stream_parsing->got_metadata_on_parse[1] = 0;
227
- stream_global->published_trailing_metadata = 1;
228
- GPR_SWAP(grpc_chttp2_incoming_metadata_buffer,
229
- stream_parsing->metadata_buffer[1],
230
- stream_global->received_trailing_metadata);
231
- grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
232
- }
233
-
234
- if (stream_parsing->forced_close_error != GRPC_ERROR_NONE) {
235
- intptr_t reason;
236
- bool has_reason = grpc_error_get_int(stream_parsing->forced_close_error,
237
- GRPC_ERROR_INT_HTTP2_ERROR, &reason);
238
- if (has_reason && reason != GRPC_CHTTP2_NO_ERROR) {
239
- grpc_status_code status_code =
240
- has_reason
241
- ? grpc_chttp2_http2_error_to_grpc_status(
242
- (grpc_chttp2_error_code)reason, stream_global->deadline)
243
- : GRPC_STATUS_INTERNAL;
244
- const char *status_details =
245
- grpc_error_string(stream_parsing->forced_close_error);
246
- gpr_slice slice_details = gpr_slice_from_copied_string(status_details);
247
- grpc_error_free_string(status_details);
248
- grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global,
249
- status_code, &slice_details);
250
- }
251
- grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global,
252
- 1, 1, stream_parsing->forced_close_error);
253
- }
254
-
255
- if (stream_parsing->received_close) {
256
- grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global,
257
- 1, 0, GRPC_ERROR_NONE);
258
- }
259
- }
260
- }
261
-
262
- grpc_error *grpc_chttp2_perform_read(
263
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
264
- gpr_slice slice) {
265
- uint8_t *beg = GPR_SLICE_START_PTR(slice);
266
- uint8_t *end = GPR_SLICE_END_PTR(slice);
46
+ #include "src/core/lib/transport/timeout_encoding.h"
47
+
48
+ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx,
49
+ grpc_chttp2_transport *t);
50
+ static grpc_error *init_header_frame_parser(grpc_exec_ctx *exec_ctx,
51
+ grpc_chttp2_transport *t,
52
+ int is_continuation);
53
+ static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx,
54
+ grpc_chttp2_transport *t);
55
+ static grpc_error *init_rst_stream_parser(grpc_exec_ctx *exec_ctx,
56
+ grpc_chttp2_transport *t);
57
+ static grpc_error *init_settings_frame_parser(grpc_exec_ctx *exec_ctx,
58
+ grpc_chttp2_transport *t);
59
+ static grpc_error *init_window_update_frame_parser(grpc_exec_ctx *exec_ctx,
60
+ grpc_chttp2_transport *t);
61
+ static grpc_error *init_ping_parser(grpc_exec_ctx *exec_ctx,
62
+ grpc_chttp2_transport *t);
63
+ static grpc_error *init_goaway_parser(grpc_exec_ctx *exec_ctx,
64
+ grpc_chttp2_transport *t);
65
+ static grpc_error *init_skip_frame_parser(grpc_exec_ctx *exec_ctx,
66
+ grpc_chttp2_transport *t,
67
+ int is_header);
68
+
69
+ static grpc_error *parse_frame_slice(grpc_exec_ctx *exec_ctx,
70
+ grpc_chttp2_transport *t, grpc_slice slice,
71
+ int is_last);
72
+
73
+ grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx,
74
+ grpc_chttp2_transport *t,
75
+ grpc_slice slice) {
76
+ uint8_t *beg = GRPC_SLICE_START_PTR(slice);
77
+ uint8_t *end = GRPC_SLICE_END_PTR(slice);
267
78
  uint8_t *cur = beg;
268
79
  grpc_error *err;
269
80
 
270
81
  if (cur == end) return GRPC_ERROR_NONE;
271
82
 
272
- switch (transport_parsing->deframe_state) {
83
+ switch (t->deframe_state) {
273
84
  case GRPC_DTS_CLIENT_PREFIX_0:
274
85
  case GRPC_DTS_CLIENT_PREFIX_1:
275
86
  case GRPC_DTS_CLIENT_PREFIX_2:
@@ -294,25 +105,22 @@ grpc_error *grpc_chttp2_perform_read(
294
105
  case GRPC_DTS_CLIENT_PREFIX_21:
295
106
  case GRPC_DTS_CLIENT_PREFIX_22:
296
107
  case GRPC_DTS_CLIENT_PREFIX_23:
297
- while (cur != end && transport_parsing->deframe_state != GRPC_DTS_FH_0) {
298
- if (*cur != GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing
299
- ->deframe_state]) {
108
+ while (cur != end && t->deframe_state != GRPC_DTS_FH_0) {
109
+ if (*cur != GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state]) {
300
110
  char *msg;
301
111
  gpr_asprintf(
302
112
  &msg,
303
113
  "Connect string mismatch: expected '%c' (%d) got '%c' (%d) "
304
114
  "at byte %d",
305
- GRPC_CHTTP2_CLIENT_CONNECT_STRING[transport_parsing
306
- ->deframe_state],
307
- (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING
308
- [transport_parsing->deframe_state],
309
- *cur, (int)*cur, transport_parsing->deframe_state);
115
+ GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
116
+ (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
117
+ *cur, (int)*cur, t->deframe_state);
310
118
  err = GRPC_ERROR_CREATE(msg);
311
119
  gpr_free(msg);
312
120
  return err;
313
121
  }
314
122
  ++cur;
315
- ++transport_parsing->deframe_state;
123
+ ++t->deframe_state;
316
124
  }
317
125
  if (cur == end) {
318
126
  return GRPC_ERROR_NONE;
@@ -321,100 +129,95 @@ grpc_error *grpc_chttp2_perform_read(
321
129
  dts_fh_0:
322
130
  case GRPC_DTS_FH_0:
323
131
  GPR_ASSERT(cur < end);
324
- transport_parsing->incoming_frame_size = ((uint32_t)*cur) << 16;
132
+ t->incoming_frame_size = ((uint32_t)*cur) << 16;
325
133
  if (++cur == end) {
326
- transport_parsing->deframe_state = GRPC_DTS_FH_1;
134
+ t->deframe_state = GRPC_DTS_FH_1;
327
135
  return GRPC_ERROR_NONE;
328
136
  }
329
137
  /* fallthrough */
330
138
  case GRPC_DTS_FH_1:
331
139
  GPR_ASSERT(cur < end);
332
- transport_parsing->incoming_frame_size |= ((uint32_t)*cur) << 8;
140
+ t->incoming_frame_size |= ((uint32_t)*cur) << 8;
333
141
  if (++cur == end) {
334
- transport_parsing->deframe_state = GRPC_DTS_FH_2;
142
+ t->deframe_state = GRPC_DTS_FH_2;
335
143
  return GRPC_ERROR_NONE;
336
144
  }
337
145
  /* fallthrough */
338
146
  case GRPC_DTS_FH_2:
339
147
  GPR_ASSERT(cur < end);
340
- transport_parsing->incoming_frame_size |= *cur;
148
+ t->incoming_frame_size |= *cur;
341
149
  if (++cur == end) {
342
- transport_parsing->deframe_state = GRPC_DTS_FH_3;
150
+ t->deframe_state = GRPC_DTS_FH_3;
343
151
  return GRPC_ERROR_NONE;
344
152
  }
345
153
  /* fallthrough */
346
154
  case GRPC_DTS_FH_3:
347
155
  GPR_ASSERT(cur < end);
348
- transport_parsing->incoming_frame_type = *cur;
156
+ t->incoming_frame_type = *cur;
349
157
  if (++cur == end) {
350
- transport_parsing->deframe_state = GRPC_DTS_FH_4;
158
+ t->deframe_state = GRPC_DTS_FH_4;
351
159
  return GRPC_ERROR_NONE;
352
160
  }
353
161
  /* fallthrough */
354
162
  case GRPC_DTS_FH_4:
355
163
  GPR_ASSERT(cur < end);
356
- transport_parsing->incoming_frame_flags = *cur;
164
+ t->incoming_frame_flags = *cur;
357
165
  if (++cur == end) {
358
- transport_parsing->deframe_state = GRPC_DTS_FH_5;
166
+ t->deframe_state = GRPC_DTS_FH_5;
359
167
  return GRPC_ERROR_NONE;
360
168
  }
361
169
  /* fallthrough */
362
170
  case GRPC_DTS_FH_5:
363
171
  GPR_ASSERT(cur < end);
364
- transport_parsing->incoming_stream_id = (((uint32_t)*cur) & 0x7f) << 24;
172
+ t->incoming_stream_id = (((uint32_t)*cur) & 0x7f) << 24;
365
173
  if (++cur == end) {
366
- transport_parsing->deframe_state = GRPC_DTS_FH_6;
174
+ t->deframe_state = GRPC_DTS_FH_6;
367
175
  return GRPC_ERROR_NONE;
368
176
  }
369
177
  /* fallthrough */
370
178
  case GRPC_DTS_FH_6:
371
179
  GPR_ASSERT(cur < end);
372
- transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 16;
180
+ t->incoming_stream_id |= ((uint32_t)*cur) << 16;
373
181
  if (++cur == end) {
374
- transport_parsing->deframe_state = GRPC_DTS_FH_7;
182
+ t->deframe_state = GRPC_DTS_FH_7;
375
183
  return GRPC_ERROR_NONE;
376
184
  }
377
185
  /* fallthrough */
378
186
  case GRPC_DTS_FH_7:
379
187
  GPR_ASSERT(cur < end);
380
- transport_parsing->incoming_stream_id |= ((uint32_t)*cur) << 8;
188
+ t->incoming_stream_id |= ((uint32_t)*cur) << 8;
381
189
  if (++cur == end) {
382
- transport_parsing->deframe_state = GRPC_DTS_FH_8;
190
+ t->deframe_state = GRPC_DTS_FH_8;
383
191
  return GRPC_ERROR_NONE;
384
192
  }
385
193
  /* fallthrough */
386
194
  case GRPC_DTS_FH_8:
387
195
  GPR_ASSERT(cur < end);
388
- transport_parsing->incoming_stream_id |= ((uint32_t)*cur);
389
- transport_parsing->deframe_state = GRPC_DTS_FRAME;
390
- err = init_frame_parser(exec_ctx, transport_parsing);
196
+ t->incoming_stream_id |= ((uint32_t)*cur);
197
+ t->deframe_state = GRPC_DTS_FRAME;
198
+ err = init_frame_parser(exec_ctx, t);
391
199
  if (err != GRPC_ERROR_NONE) {
392
200
  return err;
393
201
  }
394
- if (transport_parsing->incoming_stream_id != 0 &&
395
- transport_parsing->incoming_stream_id >
396
- transport_parsing->last_incoming_stream_id) {
397
- transport_parsing->last_incoming_stream_id =
398
- transport_parsing->incoming_stream_id;
399
- }
400
- if (transport_parsing->incoming_frame_size == 0) {
401
- err = parse_frame_slice(exec_ctx, transport_parsing, gpr_empty_slice(),
402
- 1);
202
+ if (t->incoming_frame_size == 0) {
203
+ err = parse_frame_slice(exec_ctx, t, gpr_empty_slice(), 1);
403
204
  if (err != GRPC_ERROR_NONE) {
404
205
  return err;
405
206
  }
406
- transport_parsing->incoming_stream = NULL;
207
+ t->incoming_stream = NULL;
407
208
  if (++cur == end) {
408
- transport_parsing->deframe_state = GRPC_DTS_FH_0;
209
+ t->deframe_state = GRPC_DTS_FH_0;
409
210
  return GRPC_ERROR_NONE;
410
211
  }
411
212
  goto dts_fh_0; /* loop */
412
- } else if (transport_parsing->incoming_frame_size >
413
- transport_parsing->max_frame_size) {
213
+ } else if (t->incoming_frame_size >
214
+ t->settings[GRPC_ACKED_SETTINGS]
215
+ [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
414
216
  char *msg;
415
217
  gpr_asprintf(&msg, "Frame size %d is larger than max frame size %d",
416
- transport_parsing->incoming_frame_size,
417
- transport_parsing->max_frame_size);
218
+ t->incoming_frame_size,
219
+ t->settings[GRPC_ACKED_SETTINGS]
220
+ [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]);
418
221
  err = GRPC_ERROR_CREATE(msg);
419
222
  gpr_free(msg);
420
223
  return err;
@@ -425,41 +228,39 @@ grpc_error *grpc_chttp2_perform_read(
425
228
  /* fallthrough */
426
229
  case GRPC_DTS_FRAME:
427
230
  GPR_ASSERT(cur < end);
428
- if ((uint32_t)(end - cur) == transport_parsing->incoming_frame_size) {
429
- err = parse_frame_slice(exec_ctx, transport_parsing,
430
- gpr_slice_sub_no_ref(slice, (size_t)(cur - beg),
431
- (size_t)(end - beg)),
432
- 1);
231
+ if ((uint32_t)(end - cur) == t->incoming_frame_size) {
232
+ err = parse_frame_slice(
233
+ exec_ctx, t, grpc_slice_sub_no_ref(slice, (size_t)(cur - beg),
234
+ (size_t)(end - beg)),
235
+ 1);
433
236
  if (err != GRPC_ERROR_NONE) {
434
237
  return err;
435
238
  }
436
- transport_parsing->deframe_state = GRPC_DTS_FH_0;
437
- transport_parsing->incoming_stream = NULL;
239
+ t->deframe_state = GRPC_DTS_FH_0;
240
+ t->incoming_stream = NULL;
438
241
  return GRPC_ERROR_NONE;
439
- } else if ((uint32_t)(end - cur) >
440
- transport_parsing->incoming_frame_size) {
242
+ } else if ((uint32_t)(end - cur) > t->incoming_frame_size) {
441
243
  size_t cur_offset = (size_t)(cur - beg);
442
244
  err = parse_frame_slice(
443
- exec_ctx, transport_parsing,
444
- gpr_slice_sub_no_ref(
445
- slice, cur_offset,
446
- cur_offset + transport_parsing->incoming_frame_size),
245
+ exec_ctx, t,
246
+ grpc_slice_sub_no_ref(slice, cur_offset,
247
+ cur_offset + t->incoming_frame_size),
447
248
  1);
448
249
  if (err != GRPC_ERROR_NONE) {
449
250
  return err;
450
251
  }
451
- cur += transport_parsing->incoming_frame_size;
452
- transport_parsing->incoming_stream = NULL;
252
+ cur += t->incoming_frame_size;
253
+ t->incoming_stream = NULL;
453
254
  goto dts_fh_0; /* loop */
454
255
  } else {
455
- err = parse_frame_slice(exec_ctx, transport_parsing,
456
- gpr_slice_sub_no_ref(slice, (size_t)(cur - beg),
457
- (size_t)(end - beg)),
458
- 0);
256
+ err = parse_frame_slice(
257
+ exec_ctx, t, grpc_slice_sub_no_ref(slice, (size_t)(cur - beg),
258
+ (size_t)(end - beg)),
259
+ 0);
459
260
  if (err != GRPC_ERROR_NONE) {
460
261
  return err;
461
262
  }
462
- transport_parsing->incoming_frame_size -= (uint32_t)(end - cur);
263
+ t->incoming_frame_size -= (uint32_t)(end - cur);
463
264
  return GRPC_ERROR_NONE;
464
265
  }
465
266
  GPR_UNREACHABLE_CODE(return 0);
@@ -468,175 +269,172 @@ grpc_error *grpc_chttp2_perform_read(
468
269
  GPR_UNREACHABLE_CODE(return 0);
469
270
  }
470
271
 
471
- static grpc_error *init_frame_parser(
472
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
473
- if (transport_parsing->is_first_frame &&
474
- transport_parsing->incoming_frame_type != GRPC_CHTTP2_FRAME_SETTINGS) {
272
+ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx,
273
+ grpc_chttp2_transport *t) {
274
+ if (t->is_first_frame &&
275
+ t->incoming_frame_type != GRPC_CHTTP2_FRAME_SETTINGS) {
475
276
  char *msg;
476
277
  gpr_asprintf(
477
278
  &msg, "Expected SETTINGS frame as the first frame, got frame type %d",
478
- transport_parsing->incoming_frame_type);
279
+ t->incoming_frame_type);
479
280
  grpc_error *err = GRPC_ERROR_CREATE(msg);
480
281
  gpr_free(msg);
481
282
  return err;
482
283
  }
483
- transport_parsing->is_first_frame = false;
484
- if (transport_parsing->expect_continuation_stream_id != 0) {
485
- if (transport_parsing->incoming_frame_type !=
486
- GRPC_CHTTP2_FRAME_CONTINUATION) {
284
+ t->is_first_frame = false;
285
+ if (t->expect_continuation_stream_id != 0) {
286
+ if (t->incoming_frame_type != GRPC_CHTTP2_FRAME_CONTINUATION) {
487
287
  char *msg;
488
288
  gpr_asprintf(&msg, "Expected CONTINUATION frame, got frame type %02x",
489
- transport_parsing->incoming_frame_type);
289
+ t->incoming_frame_type);
490
290
  grpc_error *err = GRPC_ERROR_CREATE(msg);
491
291
  gpr_free(msg);
492
292
  return err;
493
293
  }
494
- if (transport_parsing->expect_continuation_stream_id !=
495
- transport_parsing->incoming_stream_id) {
294
+ if (t->expect_continuation_stream_id != t->incoming_stream_id) {
496
295
  char *msg;
497
296
  gpr_asprintf(
498
297
  &msg,
499
298
  "Expected CONTINUATION frame for grpc_chttp2_stream %08x, got "
500
299
  "grpc_chttp2_stream %08x",
501
- transport_parsing->expect_continuation_stream_id,
502
- transport_parsing->incoming_stream_id);
300
+ t->expect_continuation_stream_id, t->incoming_stream_id);
503
301
  grpc_error *err = GRPC_ERROR_CREATE(msg);
504
302
  gpr_free(msg);
505
303
  return err;
506
304
  }
507
- return init_header_frame_parser(exec_ctx, transport_parsing, 1);
305
+ return init_header_frame_parser(exec_ctx, t, 1);
508
306
  }
509
- switch (transport_parsing->incoming_frame_type) {
307
+ switch (t->incoming_frame_type) {
510
308
  case GRPC_CHTTP2_FRAME_DATA:
511
- return init_data_frame_parser(exec_ctx, transport_parsing);
309
+ return init_data_frame_parser(exec_ctx, t);
512
310
  case GRPC_CHTTP2_FRAME_HEADER:
513
- return init_header_frame_parser(exec_ctx, transport_parsing, 0);
311
+ return init_header_frame_parser(exec_ctx, t, 0);
514
312
  case GRPC_CHTTP2_FRAME_CONTINUATION:
515
313
  return GRPC_ERROR_CREATE("Unexpected CONTINUATION frame");
516
314
  case GRPC_CHTTP2_FRAME_RST_STREAM:
517
- return init_rst_stream_parser(exec_ctx, transport_parsing);
315
+ return init_rst_stream_parser(exec_ctx, t);
518
316
  case GRPC_CHTTP2_FRAME_SETTINGS:
519
- return init_settings_frame_parser(exec_ctx, transport_parsing);
317
+ return init_settings_frame_parser(exec_ctx, t);
520
318
  case GRPC_CHTTP2_FRAME_WINDOW_UPDATE:
521
- return init_window_update_frame_parser(exec_ctx, transport_parsing);
319
+ return init_window_update_frame_parser(exec_ctx, t);
522
320
  case GRPC_CHTTP2_FRAME_PING:
523
- return init_ping_parser(exec_ctx, transport_parsing);
321
+ return init_ping_parser(exec_ctx, t);
524
322
  case GRPC_CHTTP2_FRAME_GOAWAY:
525
- return init_goaway_parser(exec_ctx, transport_parsing);
323
+ return init_goaway_parser(exec_ctx, t);
526
324
  default:
527
325
  if (grpc_http_trace) {
528
- gpr_log(GPR_ERROR, "Unknown frame type %02x",
529
- transport_parsing->incoming_frame_type);
326
+ gpr_log(GPR_ERROR, "Unknown frame type %02x", t->incoming_frame_type);
530
327
  }
531
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
328
+ return init_skip_frame_parser(exec_ctx, t, 0);
532
329
  }
533
330
  }
534
331
 
535
332
  static grpc_error *skip_parser(grpc_exec_ctx *exec_ctx, void *parser,
536
- grpc_chttp2_transport_parsing *transport_parsing,
537
- grpc_chttp2_stream_parsing *stream_parsing,
538
- gpr_slice slice, int is_last) {
333
+ grpc_chttp2_transport *t, grpc_chttp2_stream *s,
334
+ grpc_slice slice, int is_last) {
539
335
  return GRPC_ERROR_NONE;
540
336
  }
541
337
 
542
- static void skip_header(void *tp, grpc_mdelem *md) { GRPC_MDELEM_UNREF(md); }
338
+ static void skip_header(grpc_exec_ctx *exec_ctx, void *tp, grpc_mdelem *md) {
339
+ GRPC_MDELEM_UNREF(exec_ctx, md);
340
+ }
543
341
 
544
- static grpc_error *init_skip_frame_parser(
545
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
546
- int is_header) {
342
+ static grpc_error *init_skip_frame_parser(grpc_exec_ctx *exec_ctx,
343
+ grpc_chttp2_transport *t,
344
+ int is_header) {
547
345
  if (is_header) {
548
- uint8_t is_eoh = transport_parsing->expect_continuation_stream_id != 0;
549
- transport_parsing->parser = grpc_chttp2_header_parser_parse;
550
- transport_parsing->parser_data = &transport_parsing->hpack_parser;
551
- transport_parsing->hpack_parser.on_header = skip_header;
552
- transport_parsing->hpack_parser.on_header_user_data = NULL;
553
- transport_parsing->hpack_parser.is_boundary = is_eoh;
554
- transport_parsing->hpack_parser.is_eof =
555
- (uint8_t)(is_eoh ? transport_parsing->header_eof : 0);
346
+ uint8_t is_eoh = t->expect_continuation_stream_id != 0;
347
+ t->parser = grpc_chttp2_header_parser_parse;
348
+ t->parser_data = &t->hpack_parser;
349
+ t->hpack_parser.on_header = skip_header;
350
+ t->hpack_parser.on_header_user_data = NULL;
351
+ t->hpack_parser.is_boundary = is_eoh;
352
+ t->hpack_parser.is_eof = (uint8_t)(is_eoh ? t->header_eof : 0);
556
353
  } else {
557
- transport_parsing->parser = skip_parser;
354
+ t->parser = skip_parser;
558
355
  }
559
356
  return GRPC_ERROR_NONE;
560
357
  }
561
358
 
562
- void grpc_chttp2_parsing_become_skip_parser(
563
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
564
- init_skip_frame_parser(
565
- exec_ctx, transport_parsing,
566
- transport_parsing->parser == grpc_chttp2_header_parser_parse);
359
+ void grpc_chttp2_parsing_become_skip_parser(grpc_exec_ctx *exec_ctx,
360
+ grpc_chttp2_transport *t) {
361
+ init_skip_frame_parser(exec_ctx, t,
362
+ t->parser == grpc_chttp2_header_parser_parse);
567
363
  }
568
364
 
569
- static grpc_error *update_incoming_window(
570
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
571
- grpc_chttp2_stream_parsing *stream_parsing) {
572
- uint32_t incoming_frame_size = transport_parsing->incoming_frame_size;
573
- if (incoming_frame_size > transport_parsing->incoming_window) {
574
- char *msg;
575
- gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64,
576
- transport_parsing->incoming_frame_size,
577
- transport_parsing->incoming_window);
578
- grpc_error *err = GRPC_ERROR_CREATE(msg);
579
- gpr_free(msg);
580
- return err;
581
- }
582
-
583
- if (incoming_frame_size > stream_parsing->incoming_window) {
365
+ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
366
+ grpc_chttp2_transport *t,
367
+ grpc_chttp2_stream *s) {
368
+ uint32_t incoming_frame_size = t->incoming_frame_size;
369
+ if (incoming_frame_size > t->incoming_window) {
584
370
  char *msg;
585
371
  gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64,
586
- transport_parsing->incoming_frame_size,
587
- stream_parsing->incoming_window);
372
+ t->incoming_frame_size, t->incoming_window);
588
373
  grpc_error *err = GRPC_ERROR_CREATE(msg);
589
374
  gpr_free(msg);
590
375
  return err;
591
376
  }
592
377
 
593
- GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", transport_parsing, incoming_window,
378
+ GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("parse", t, incoming_window,
594
379
  incoming_frame_size);
595
- GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", transport_parsing, stream_parsing,
596
- incoming_window, incoming_frame_size);
597
- stream_parsing->received_bytes += incoming_frame_size;
598
380
 
599
- grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
381
+ if (s != NULL) {
382
+ if (incoming_frame_size > s->incoming_window) {
383
+ char *msg;
384
+ gpr_asprintf(&msg,
385
+ "frame of size %d overflows incoming window of %" PRId64,
386
+ t->incoming_frame_size, s->incoming_window);
387
+ grpc_error *err = GRPC_ERROR_CREATE(msg);
388
+ gpr_free(msg);
389
+ return err;
390
+ }
391
+
392
+ GRPC_CHTTP2_FLOW_DEBIT_STREAM("parse", t, s, incoming_window,
393
+ incoming_frame_size);
394
+ s->received_bytes += incoming_frame_size;
395
+ s->max_recv_bytes -=
396
+ (uint32_t)GPR_MIN(s->max_recv_bytes, incoming_frame_size);
397
+ }
600
398
 
601
399
  return GRPC_ERROR_NONE;
602
400
  }
603
401
 
604
- static grpc_error *init_data_frame_parser(
605
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
606
- grpc_chttp2_stream_parsing *stream_parsing =
607
- grpc_chttp2_parsing_lookup_stream(transport_parsing,
608
- transport_parsing->incoming_stream_id);
402
+ static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx,
403
+ grpc_chttp2_transport *t) {
404
+ grpc_chttp2_stream *s =
405
+ grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
609
406
  grpc_error *err = GRPC_ERROR_NONE;
610
- if (stream_parsing == NULL) {
611
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
407
+ err = update_incoming_window(exec_ctx, t, s);
408
+ if (err != GRPC_ERROR_NONE) {
409
+ goto error_handler;
612
410
  }
613
- stream_parsing->stats.incoming.framing_bytes += 9;
614
- if (stream_parsing->received_close) {
615
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
411
+ if (s == NULL) {
412
+ return init_skip_frame_parser(exec_ctx, t, 0);
616
413
  }
617
- if (err == GRPC_ERROR_NONE) {
618
- err = update_incoming_window(exec_ctx, transport_parsing, stream_parsing);
414
+ s->stats.incoming.framing_bytes += 9;
415
+ if (err == GRPC_ERROR_NONE && s->read_closed) {
416
+ return init_skip_frame_parser(exec_ctx, t, 0);
619
417
  }
620
418
  if (err == GRPC_ERROR_NONE) {
621
- err = grpc_chttp2_data_parser_begin_frame(
622
- &stream_parsing->data_parser, transport_parsing->incoming_frame_flags,
623
- stream_parsing->id);
419
+ err = grpc_chttp2_data_parser_begin_frame(&s->data_parser,
420
+ t->incoming_frame_flags, s->id);
624
421
  }
422
+ error_handler:
625
423
  if (err == GRPC_ERROR_NONE) {
626
- transport_parsing->incoming_stream = stream_parsing;
627
- transport_parsing->parser = grpc_chttp2_data_parser_parse;
628
- transport_parsing->parser_data = &stream_parsing->data_parser;
424
+ t->incoming_stream = s;
425
+ t->parser = grpc_chttp2_data_parser_parse;
426
+ t->parser_data = &s->data_parser;
629
427
  return GRPC_ERROR_NONE;
630
428
  } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) {
631
429
  /* handle stream errors by closing the stream */
632
- stream_parsing->received_close = 1;
633
- stream_parsing->forced_close_error = err;
634
- gpr_slice_buffer_add(
635
- &transport_parsing->qbuf,
636
- grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id,
637
- GRPC_CHTTP2_PROTOCOL_ERROR,
638
- &stream_parsing->stats.outgoing));
639
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
430
+ if (s != NULL) {
431
+ grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, false, err);
432
+ }
433
+ grpc_slice_buffer_add(
434
+ &t->qbuf, grpc_chttp2_rst_stream_create(t->incoming_stream_id,
435
+ GRPC_CHTTP2_PROTOCOL_ERROR,
436
+ &s->stats.outgoing));
437
+ return init_skip_frame_parser(exec_ctx, t, 0);
640
438
  } else {
641
439
  return err;
642
440
  }
@@ -644,23 +442,22 @@ static grpc_error *init_data_frame_parser(
644
442
 
645
443
  static void free_timeout(void *p) { gpr_free(p); }
646
444
 
647
- static void on_initial_header(void *tp, grpc_mdelem *md) {
648
- grpc_chttp2_transport_parsing *transport_parsing = tp;
649
- grpc_chttp2_stream_parsing *stream_parsing =
650
- transport_parsing->incoming_stream;
445
+ static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp,
446
+ grpc_mdelem *md) {
447
+ grpc_chttp2_transport *t = tp;
448
+ grpc_chttp2_stream *s = t->incoming_stream;
651
449
 
652
450
  GPR_TIMER_BEGIN("on_initial_header", 0);
653
451
 
654
- GPR_ASSERT(stream_parsing);
452
+ GPR_ASSERT(s != NULL);
655
453
 
656
454
  GRPC_CHTTP2_IF_TRACING(gpr_log(
657
- GPR_INFO, "HTTP:%d:HDR:%s: %s: %s", stream_parsing->id,
658
- transport_parsing->is_client ? "CLI" : "SVR",
455
+ GPR_INFO, "HTTP:%d:HDR:%s: %s: %s", s->id, t->is_client ? "CLI" : "SVR",
659
456
  grpc_mdstr_as_c_string(md->key), grpc_mdstr_as_c_string(md->value)));
660
457
 
661
458
  if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
662
459
  /* TODO(ctiller): check for a status like " 0" */
663
- stream_parsing->seen_error = true;
460
+ s->seen_error = true;
664
461
  }
665
462
 
666
463
  if (md->key == GRPC_MDSTR_GRPC_TIMEOUT) {
@@ -668,315 +465,283 @@ static void on_initial_header(void *tp, grpc_mdelem *md) {
668
465
  if (!cached_timeout) {
669
466
  /* not already parsed: parse it now, and store the result away */
670
467
  cached_timeout = gpr_malloc(sizeof(gpr_timespec));
671
- if (!grpc_chttp2_decode_timeout(grpc_mdstr_as_c_string(md->value),
672
- cached_timeout)) {
468
+ if (!grpc_http2_decode_timeout(grpc_mdstr_as_c_string(md->value),
469
+ cached_timeout)) {
673
470
  gpr_log(GPR_ERROR, "Ignoring bad timeout value '%s'",
674
471
  grpc_mdstr_as_c_string(md->value));
675
472
  *cached_timeout = gpr_inf_future(GPR_TIMESPAN);
676
473
  }
677
- grpc_mdelem_set_user_data(md, free_timeout, cached_timeout);
474
+ cached_timeout =
475
+ grpc_mdelem_set_user_data(md, free_timeout, cached_timeout);
678
476
  }
679
477
  grpc_chttp2_incoming_metadata_buffer_set_deadline(
680
- &stream_parsing->metadata_buffer[0],
478
+ &s->metadata_buffer[0],
681
479
  gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), *cached_timeout));
682
- GRPC_MDELEM_UNREF(md);
480
+ GRPC_MDELEM_UNREF(exec_ctx, md);
683
481
  } else {
684
- const size_t new_size =
685
- stream_parsing->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
686
- grpc_chttp2_transport_global *transport_global =
687
- &TRANSPORT_FROM_PARSING(transport_parsing)->global;
482
+ const size_t new_size = s->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
688
483
  const size_t metadata_size_limit =
689
- transport_global->settings[GRPC_LOCAL_SETTINGS]
690
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
484
+ t->settings[GRPC_ACKED_SETTINGS]
485
+ [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
691
486
  if (new_size > metadata_size_limit) {
692
- if (!stream_parsing->exceeded_metadata_size) {
693
- gpr_log(GPR_DEBUG,
694
- "received initial metadata size exceeds limit (%" PRIuPTR
695
- " vs. %" PRIuPTR ")",
696
- new_size, metadata_size_limit);
697
- stream_parsing->seen_error = true;
698
- stream_parsing->exceeded_metadata_size = true;
699
- }
700
- GRPC_MDELEM_UNREF(md);
487
+ gpr_log(GPR_DEBUG,
488
+ "received initial metadata size exceeds limit (%" PRIuPTR
489
+ " vs. %" PRIuPTR ")",
490
+ new_size, metadata_size_limit);
491
+ grpc_chttp2_cancel_stream(
492
+ exec_ctx, t, s,
493
+ grpc_error_set_int(
494
+ GRPC_ERROR_CREATE("received initial metadata size exceeds limit"),
495
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
496
+ grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
497
+ s->seen_error = true;
498
+ GRPC_MDELEM_UNREF(exec_ctx, md);
701
499
  } else {
702
- grpc_chttp2_incoming_metadata_buffer_add(
703
- &stream_parsing->metadata_buffer[0], md);
500
+ grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[0], md);
704
501
  }
705
502
  }
706
503
 
707
- grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
708
-
709
504
  GPR_TIMER_END("on_initial_header", 0);
710
505
  }
711
506
 
712
- static void on_trailing_header(void *tp, grpc_mdelem *md) {
713
- grpc_chttp2_transport_parsing *transport_parsing = tp;
714
- grpc_chttp2_stream_parsing *stream_parsing =
715
- transport_parsing->incoming_stream;
507
+ static void on_trailing_header(grpc_exec_ctx *exec_ctx, void *tp,
508
+ grpc_mdelem *md) {
509
+ grpc_chttp2_transport *t = tp;
510
+ grpc_chttp2_stream *s = t->incoming_stream;
716
511
 
717
512
  GPR_TIMER_BEGIN("on_trailing_header", 0);
718
513
 
719
- GPR_ASSERT(stream_parsing);
514
+ GPR_ASSERT(s != NULL);
720
515
 
721
516
  GRPC_CHTTP2_IF_TRACING(gpr_log(
722
- GPR_INFO, "HTTP:%d:TRL:%s: %s: %s", stream_parsing->id,
723
- transport_parsing->is_client ? "CLI" : "SVR",
517
+ GPR_INFO, "HTTP:%d:TRL:%s: %s: %s", s->id, t->is_client ? "CLI" : "SVR",
724
518
  grpc_mdstr_as_c_string(md->key), grpc_mdstr_as_c_string(md->value)));
725
519
 
726
520
  if (md->key == GRPC_MDSTR_GRPC_STATUS && md != GRPC_MDELEM_GRPC_STATUS_0) {
727
521
  /* TODO(ctiller): check for a status like " 0" */
728
- stream_parsing->seen_error = true;
522
+ s->seen_error = true;
729
523
  }
730
524
 
731
- const size_t new_size =
732
- stream_parsing->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
733
- grpc_chttp2_transport_global *transport_global =
734
- &TRANSPORT_FROM_PARSING(transport_parsing)->global;
525
+ const size_t new_size = s->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
735
526
  const size_t metadata_size_limit =
736
- transport_global->settings[GRPC_LOCAL_SETTINGS]
737
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
527
+ t->settings[GRPC_ACKED_SETTINGS]
528
+ [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
738
529
  if (new_size > metadata_size_limit) {
739
- if (!stream_parsing->exceeded_metadata_size) {
740
- gpr_log(GPR_DEBUG,
741
- "received trailing metadata size exceeds limit (%" PRIuPTR
742
- " vs. %" PRIuPTR ")",
743
- new_size, metadata_size_limit);
744
- stream_parsing->seen_error = true;
745
- stream_parsing->exceeded_metadata_size = true;
746
- }
747
- GRPC_MDELEM_UNREF(md);
530
+ gpr_log(GPR_DEBUG,
531
+ "received trailing metadata size exceeds limit (%" PRIuPTR
532
+ " vs. %" PRIuPTR ")",
533
+ new_size, metadata_size_limit);
534
+ grpc_chttp2_cancel_stream(
535
+ exec_ctx, t, s,
536
+ grpc_error_set_int(
537
+ GRPC_ERROR_CREATE("received trailing metadata size exceeds limit"),
538
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
539
+ grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
540
+ s->seen_error = true;
541
+ GRPC_MDELEM_UNREF(exec_ctx, md);
748
542
  } else {
749
- grpc_chttp2_incoming_metadata_buffer_add(
750
- &stream_parsing->metadata_buffer[1], md);
543
+ grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[1], md);
751
544
  }
752
545
 
753
- grpc_chttp2_list_add_parsing_seen_stream(transport_parsing, stream_parsing);
754
-
755
546
  GPR_TIMER_END("on_trailing_header", 0);
756
547
  }
757
548
 
758
- static grpc_error *init_header_frame_parser(
759
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
760
- int is_continuation) {
761
- uint8_t is_eoh = (transport_parsing->incoming_frame_flags &
762
- GRPC_CHTTP2_DATA_FLAG_END_HEADERS) != 0;
763
- int via_accept = 0;
764
- grpc_chttp2_stream_parsing *stream_parsing;
549
+ static grpc_error *init_header_frame_parser(grpc_exec_ctx *exec_ctx,
550
+ grpc_chttp2_transport *t,
551
+ int is_continuation) {
552
+ uint8_t is_eoh =
553
+ (t->incoming_frame_flags & GRPC_CHTTP2_DATA_FLAG_END_HEADERS) != 0;
554
+ grpc_chttp2_stream *s;
765
555
 
766
556
  /* TODO(ctiller): when to increment header_frames_received? */
767
557
 
768
558
  if (is_eoh) {
769
- transport_parsing->expect_continuation_stream_id = 0;
559
+ t->expect_continuation_stream_id = 0;
770
560
  } else {
771
- transport_parsing->expect_continuation_stream_id =
772
- transport_parsing->incoming_stream_id;
561
+ t->expect_continuation_stream_id = t->incoming_stream_id;
773
562
  }
774
563
 
775
564
  if (!is_continuation) {
776
- transport_parsing->header_eof = (transport_parsing->incoming_frame_flags &
777
- GRPC_CHTTP2_DATA_FLAG_END_STREAM) != 0;
565
+ t->header_eof =
566
+ (t->incoming_frame_flags & GRPC_CHTTP2_DATA_FLAG_END_STREAM) != 0;
778
567
  }
779
568
 
780
569
  /* could be a new grpc_chttp2_stream or an existing grpc_chttp2_stream */
781
- stream_parsing = grpc_chttp2_parsing_lookup_stream(
782
- transport_parsing, transport_parsing->incoming_stream_id);
783
- if (stream_parsing == NULL) {
570
+ s = grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
571
+ if (s == NULL) {
784
572
  if (is_continuation) {
785
- gpr_log(GPR_ERROR,
786
- "grpc_chttp2_stream disbanded before CONTINUATION received");
787
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
573
+ GRPC_CHTTP2_IF_TRACING(
574
+ gpr_log(GPR_ERROR,
575
+ "grpc_chttp2_stream disbanded before CONTINUATION received"));
576
+ return init_skip_frame_parser(exec_ctx, t, 1);
788
577
  }
789
- if (transport_parsing->is_client) {
790
- if ((transport_parsing->incoming_stream_id & 1) &&
791
- transport_parsing->incoming_stream_id <
792
- transport_parsing->next_stream_id) {
578
+ if (t->is_client) {
579
+ if ((t->incoming_stream_id & 1) &&
580
+ t->incoming_stream_id < t->next_stream_id) {
793
581
  /* this is an old (probably cancelled) grpc_chttp2_stream */
794
582
  } else {
795
- gpr_log(GPR_ERROR,
796
- "ignoring new grpc_chttp2_stream creation on client");
583
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
584
+ GPR_ERROR, "ignoring new grpc_chttp2_stream creation on client"));
797
585
  }
798
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
799
- } else if (transport_parsing->last_incoming_stream_id >
800
- transport_parsing->incoming_stream_id) {
801
- gpr_log(GPR_ERROR,
802
- "ignoring out of order new grpc_chttp2_stream request on server; "
803
- "last grpc_chttp2_stream "
804
- "id=%d, new grpc_chttp2_stream id=%d",
805
- transport_parsing->last_incoming_stream_id,
806
- transport_parsing->incoming_stream_id);
807
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
808
- } else if ((transport_parsing->incoming_stream_id & 1) == 0) {
809
- gpr_log(GPR_ERROR,
810
- "ignoring grpc_chttp2_stream with non-client generated index %d",
811
- transport_parsing->incoming_stream_id);
812
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
586
+ return init_skip_frame_parser(exec_ctx, t, 1);
587
+ } else if (t->last_new_stream_id >= t->incoming_stream_id) {
588
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
589
+ GPR_ERROR,
590
+ "ignoring out of order new grpc_chttp2_stream request on server; "
591
+ "last grpc_chttp2_stream "
592
+ "id=%d, new grpc_chttp2_stream id=%d",
593
+ t->last_new_stream_id, t->incoming_stream_id));
594
+ return init_skip_frame_parser(exec_ctx, t, 1);
595
+ } else if ((t->incoming_stream_id & 1) == 0) {
596
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
597
+ GPR_ERROR,
598
+ "ignoring grpc_chttp2_stream with non-client generated index %d",
599
+ t->incoming_stream_id));
600
+ return init_skip_frame_parser(exec_ctx, t, 1);
813
601
  }
814
- stream_parsing = transport_parsing->incoming_stream =
815
- grpc_chttp2_parsing_accept_stream(
816
- exec_ctx, transport_parsing, transport_parsing->incoming_stream_id);
817
- if (stream_parsing == NULL) {
818
- gpr_log(GPR_ERROR, "grpc_chttp2_stream not accepted");
819
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
602
+ t->last_new_stream_id = t->incoming_stream_id;
603
+ s = t->incoming_stream =
604
+ grpc_chttp2_parsing_accept_stream(exec_ctx, t, t->incoming_stream_id);
605
+ if (s == NULL) {
606
+ GRPC_CHTTP2_IF_TRACING(
607
+ gpr_log(GPR_ERROR, "grpc_chttp2_stream not accepted"));
608
+ return init_skip_frame_parser(exec_ctx, t, 1);
820
609
  }
821
- via_accept = 1;
822
610
  } else {
823
- transport_parsing->incoming_stream = stream_parsing;
824
- }
825
- GPR_ASSERT(stream_parsing != NULL && (via_accept == 0 || via_accept == 1));
826
- stream_parsing->stats.incoming.framing_bytes += 9;
827
- if (stream_parsing->received_close) {
828
- gpr_log(GPR_ERROR, "skipping already closed grpc_chttp2_stream header");
829
- transport_parsing->incoming_stream = NULL;
830
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
831
- }
832
- transport_parsing->parser = grpc_chttp2_header_parser_parse;
833
- transport_parsing->parser_data = &transport_parsing->hpack_parser;
834
- switch (stream_parsing->header_frames_received) {
611
+ t->incoming_stream = s;
612
+ }
613
+ GPR_ASSERT(s != NULL);
614
+ s->stats.incoming.framing_bytes += 9;
615
+ if (s->read_closed) {
616
+ GRPC_CHTTP2_IF_TRACING(gpr_log(
617
+ GPR_ERROR, "skipping already closed grpc_chttp2_stream header"));
618
+ t->incoming_stream = NULL;
619
+ return init_skip_frame_parser(exec_ctx, t, 1);
620
+ }
621
+ t->parser = grpc_chttp2_header_parser_parse;
622
+ t->parser_data = &t->hpack_parser;
623
+ switch (s->header_frames_received) {
835
624
  case 0:
836
- transport_parsing->hpack_parser.on_header = on_initial_header;
625
+ t->hpack_parser.on_header = on_initial_header;
837
626
  break;
838
627
  case 1:
839
- transport_parsing->hpack_parser.on_header = on_trailing_header;
628
+ t->hpack_parser.on_header = on_trailing_header;
840
629
  break;
841
630
  case 2:
842
631
  gpr_log(GPR_ERROR, "too many header frames received");
843
- return init_skip_frame_parser(exec_ctx, transport_parsing, 1);
632
+ return init_skip_frame_parser(exec_ctx, t, 1);
844
633
  }
845
- transport_parsing->hpack_parser.on_header_user_data = transport_parsing;
846
- transport_parsing->hpack_parser.is_boundary = is_eoh;
847
- transport_parsing->hpack_parser.is_eof =
848
- (uint8_t)(is_eoh ? transport_parsing->header_eof : 0);
849
- if (!is_continuation && (transport_parsing->incoming_frame_flags &
850
- GRPC_CHTTP2_FLAG_HAS_PRIORITY)) {
851
- grpc_chttp2_hpack_parser_set_has_priority(&transport_parsing->hpack_parser);
634
+ t->hpack_parser.on_header_user_data = t;
635
+ t->hpack_parser.is_boundary = is_eoh;
636
+ t->hpack_parser.is_eof = (uint8_t)(is_eoh ? t->header_eof : 0);
637
+ if (!is_continuation &&
638
+ (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_HAS_PRIORITY)) {
639
+ grpc_chttp2_hpack_parser_set_has_priority(&t->hpack_parser);
852
640
  }
853
641
  return GRPC_ERROR_NONE;
854
642
  }
855
643
 
856
- static grpc_error *init_window_update_frame_parser(
857
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
644
+ static grpc_error *init_window_update_frame_parser(grpc_exec_ctx *exec_ctx,
645
+ grpc_chttp2_transport *t) {
858
646
  grpc_error *err = grpc_chttp2_window_update_parser_begin_frame(
859
- &transport_parsing->simple.window_update,
860
- transport_parsing->incoming_frame_size,
861
- transport_parsing->incoming_frame_flags);
647
+ &t->simple.window_update, t->incoming_frame_size,
648
+ t->incoming_frame_flags);
862
649
  if (err != GRPC_ERROR_NONE) return err;
863
- if (transport_parsing->incoming_stream_id != 0) {
864
- grpc_chttp2_stream_parsing *stream_parsing =
865
- transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream(
866
- transport_parsing, transport_parsing->incoming_stream_id);
867
- if (stream_parsing == NULL) {
868
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
650
+ if (t->incoming_stream_id != 0) {
651
+ grpc_chttp2_stream *s = t->incoming_stream =
652
+ grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
653
+ if (s == NULL) {
654
+ return init_skip_frame_parser(exec_ctx, t, 0);
869
655
  }
870
- stream_parsing->stats.incoming.framing_bytes += 9;
656
+ s->stats.incoming.framing_bytes += 9;
871
657
  }
872
- transport_parsing->parser = grpc_chttp2_window_update_parser_parse;
873
- transport_parsing->parser_data = &transport_parsing->simple.window_update;
658
+ t->parser = grpc_chttp2_window_update_parser_parse;
659
+ t->parser_data = &t->simple.window_update;
874
660
  return GRPC_ERROR_NONE;
875
661
  }
876
662
 
877
- static grpc_error *init_ping_parser(
878
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
663
+ static grpc_error *init_ping_parser(grpc_exec_ctx *exec_ctx,
664
+ grpc_chttp2_transport *t) {
879
665
  grpc_error *err = grpc_chttp2_ping_parser_begin_frame(
880
- &transport_parsing->simple.ping, transport_parsing->incoming_frame_size,
881
- transport_parsing->incoming_frame_flags);
666
+ &t->simple.ping, t->incoming_frame_size, t->incoming_frame_flags);
882
667
  if (err != GRPC_ERROR_NONE) return err;
883
- transport_parsing->parser = grpc_chttp2_ping_parser_parse;
884
- transport_parsing->parser_data = &transport_parsing->simple.ping;
668
+ t->parser = grpc_chttp2_ping_parser_parse;
669
+ t->parser_data = &t->simple.ping;
885
670
  return GRPC_ERROR_NONE;
886
671
  }
887
672
 
888
- static grpc_error *init_rst_stream_parser(
889
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
673
+ static grpc_error *init_rst_stream_parser(grpc_exec_ctx *exec_ctx,
674
+ grpc_chttp2_transport *t) {
890
675
  grpc_error *err = grpc_chttp2_rst_stream_parser_begin_frame(
891
- &transport_parsing->simple.rst_stream,
892
- transport_parsing->incoming_frame_size,
893
- transport_parsing->incoming_frame_flags);
676
+ &t->simple.rst_stream, t->incoming_frame_size, t->incoming_frame_flags);
894
677
  if (err != GRPC_ERROR_NONE) return err;
895
- grpc_chttp2_stream_parsing *stream_parsing =
896
- transport_parsing->incoming_stream = grpc_chttp2_parsing_lookup_stream(
897
- transport_parsing, transport_parsing->incoming_stream_id);
898
- if (!transport_parsing->incoming_stream) {
899
- return init_skip_frame_parser(exec_ctx, transport_parsing, 0);
900
- }
901
- stream_parsing->stats.incoming.framing_bytes += 9;
902
- transport_parsing->parser = grpc_chttp2_rst_stream_parser_parse;
903
- transport_parsing->parser_data = &transport_parsing->simple.rst_stream;
678
+ grpc_chttp2_stream *s = t->incoming_stream =
679
+ grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
680
+ if (!t->incoming_stream) {
681
+ return init_skip_frame_parser(exec_ctx, t, 0);
682
+ }
683
+ s->stats.incoming.framing_bytes += 9;
684
+ t->parser = grpc_chttp2_rst_stream_parser_parse;
685
+ t->parser_data = &t->simple.rst_stream;
904
686
  return GRPC_ERROR_NONE;
905
687
  }
906
688
 
907
- static grpc_error *init_goaway_parser(
908
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
689
+ static grpc_error *init_goaway_parser(grpc_exec_ctx *exec_ctx,
690
+ grpc_chttp2_transport *t) {
909
691
  grpc_error *err = grpc_chttp2_goaway_parser_begin_frame(
910
- &transport_parsing->goaway_parser, transport_parsing->incoming_frame_size,
911
- transport_parsing->incoming_frame_flags);
692
+ &t->goaway_parser, t->incoming_frame_size, t->incoming_frame_flags);
912
693
  if (err != GRPC_ERROR_NONE) return err;
913
- transport_parsing->parser = grpc_chttp2_goaway_parser_parse;
914
- transport_parsing->parser_data = &transport_parsing->goaway_parser;
694
+ t->parser = grpc_chttp2_goaway_parser_parse;
695
+ t->parser_data = &t->goaway_parser;
915
696
  return GRPC_ERROR_NONE;
916
697
  }
917
698
 
918
- static grpc_error *init_settings_frame_parser(
919
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing) {
920
- if (transport_parsing->incoming_stream_id != 0) {
699
+ static grpc_error *init_settings_frame_parser(grpc_exec_ctx *exec_ctx,
700
+ grpc_chttp2_transport *t) {
701
+ if (t->incoming_stream_id != 0) {
921
702
  return GRPC_ERROR_CREATE("Settings frame received for grpc_chttp2_stream");
922
703
  }
923
704
 
924
705
  grpc_error *err = grpc_chttp2_settings_parser_begin_frame(
925
- &transport_parsing->simple.settings,
926
- transport_parsing->incoming_frame_size,
927
- transport_parsing->incoming_frame_flags, transport_parsing->settings);
706
+ &t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
707
+ t->settings[GRPC_PEER_SETTINGS]);
928
708
  if (err != GRPC_ERROR_NONE) {
929
709
  return err;
930
710
  }
931
- if (transport_parsing->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
932
- transport_parsing->settings_ack_received = 1;
711
+ if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
712
+ memcpy(t->settings[GRPC_ACKED_SETTINGS], t->settings[GRPC_SENT_SETTINGS],
713
+ GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
933
714
  grpc_chttp2_hptbl_set_max_bytes(
934
- &transport_parsing->hpack_parser.table,
935
- transport_parsing
936
- ->last_sent_settings[GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
937
- transport_parsing->max_frame_size =
938
- transport_parsing
939
- ->last_sent_settings[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE];
715
+ exec_ctx, &t->hpack_parser.table,
716
+ t->settings[GRPC_ACKED_SETTINGS]
717
+ [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
718
+ t->sent_local_settings = 0;
940
719
  }
941
- transport_parsing->parser = grpc_chttp2_settings_parser_parse;
942
- transport_parsing->parser_data = &transport_parsing->simple.settings;
720
+ t->parser = grpc_chttp2_settings_parser_parse;
721
+ t->parser_data = &t->simple.settings;
943
722
  return GRPC_ERROR_NONE;
944
723
  }
945
724
 
946
- /*
947
- static int is_window_update_legal(int64_t window_update, int64_t window) {
948
- return window + window_update < MAX_WINDOW;
949
- }
950
- */
951
-
952
- static grpc_error *parse_frame_slice(
953
- grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
954
- gpr_slice slice, int is_last) {
955
- grpc_chttp2_stream_parsing *stream_parsing =
956
- transport_parsing->incoming_stream;
957
- grpc_error *err = transport_parsing->parser(
958
- exec_ctx, transport_parsing->parser_data, transport_parsing,
959
- stream_parsing, slice, is_last);
725
+ static grpc_error *parse_frame_slice(grpc_exec_ctx *exec_ctx,
726
+ grpc_chttp2_transport *t, grpc_slice slice,
727
+ int is_last) {
728
+ grpc_chttp2_stream *s = t->incoming_stream;
729
+ grpc_error *err = t->parser(exec_ctx, t->parser_data, t, s, slice, is_last);
960
730
  if (err == GRPC_ERROR_NONE) {
961
- if (stream_parsing) {
962
- grpc_chttp2_list_add_parsing_seen_stream(transport_parsing,
963
- stream_parsing);
964
- }
965
- return GRPC_ERROR_NONE;
731
+ return err;
966
732
  } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) {
967
733
  if (grpc_http_trace) {
968
734
  const char *msg = grpc_error_string(err);
969
735
  gpr_log(GPR_ERROR, "%s", msg);
970
736
  grpc_error_free_string(msg);
971
737
  }
972
- grpc_chttp2_parsing_become_skip_parser(exec_ctx, transport_parsing);
973
- if (stream_parsing) {
974
- stream_parsing->forced_close_error = err;
975
- gpr_slice_buffer_add(
976
- &transport_parsing->qbuf,
977
- grpc_chttp2_rst_stream_create(transport_parsing->incoming_stream_id,
978
- GRPC_CHTTP2_PROTOCOL_ERROR,
979
- &stream_parsing->stats.outgoing));
738
+ grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
739
+ if (s) {
740
+ s->forced_close_error = err;
741
+ grpc_slice_buffer_add(
742
+ &t->qbuf, grpc_chttp2_rst_stream_create(t->incoming_stream_id,
743
+ GRPC_CHTTP2_PROTOCOL_ERROR,
744
+ &s->stats.outgoing));
980
745
  } else {
981
746
  GRPC_ERROR_UNREF(err);
982
747
  }