grpc 1.37.1 → 1.38.0.pre1

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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -67,71 +67,82 @@ typedef enum {
67
67
  a set of indirect jumps, and so not waste stack space. */
68
68
 
69
69
  /* forward declarations for parsing states */
70
- static grpc_error* parse_begin(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
71
- const uint8_t* end);
72
- static grpc_error* parse_error(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
73
- const uint8_t* end, grpc_error* error);
74
- static grpc_error* still_parse_error(grpc_chttp2_hpack_parser* p,
70
+ static grpc_error_handle parse_begin(grpc_chttp2_hpack_parser* p,
75
71
  const uint8_t* cur, const uint8_t* end);
76
- static grpc_error* parse_illegal_op(grpc_chttp2_hpack_parser* p,
77
- const uint8_t* cur, const uint8_t* end);
78
-
79
- static grpc_error* parse_string_prefix(grpc_chttp2_hpack_parser* p,
80
- const uint8_t* cur, const uint8_t* end);
81
- static grpc_error* parse_key_string(grpc_chttp2_hpack_parser* p,
82
- const uint8_t* cur, const uint8_t* end);
83
- static grpc_error* parse_value_string_with_indexed_key(
72
+ static grpc_error_handle parse_error(grpc_chttp2_hpack_parser* p,
73
+ const uint8_t* cur, const uint8_t* end,
74
+ grpc_error_handle error);
75
+ static grpc_error_handle still_parse_error(grpc_chttp2_hpack_parser* p,
76
+ const uint8_t* cur,
77
+ const uint8_t* end);
78
+ static grpc_error_handle parse_illegal_op(grpc_chttp2_hpack_parser* p,
79
+ const uint8_t* cur,
80
+ const uint8_t* end);
81
+
82
+ static grpc_error_handle parse_string_prefix(grpc_chttp2_hpack_parser* p,
83
+ const uint8_t* cur,
84
+ const uint8_t* end);
85
+ static grpc_error_handle parse_key_string(grpc_chttp2_hpack_parser* p,
86
+ const uint8_t* cur,
87
+ const uint8_t* end);
88
+ static grpc_error_handle parse_value_string_with_indexed_key(
84
89
  grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
85
- static grpc_error* parse_value_string_with_literal_key(
90
+ static grpc_error_handle parse_value_string_with_literal_key(
86
91
  grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
87
92
 
88
- static grpc_error* parse_value0(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
89
- const uint8_t* end);
90
- static grpc_error* parse_value1(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
91
- const uint8_t* end);
92
- static grpc_error* parse_value2(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
93
- const uint8_t* end);
94
- static grpc_error* parse_value3(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
95
- const uint8_t* end);
96
- static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
97
- const uint8_t* end);
98
- static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
99
- const uint8_t* cur, const uint8_t* end);
100
-
101
- static grpc_error* parse_indexed_field(grpc_chttp2_hpack_parser* p,
102
- const uint8_t* cur, const uint8_t* end);
103
- static grpc_error* parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
104
- const uint8_t* cur,
105
- const uint8_t* end);
106
- static grpc_error* parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
107
- const uint8_t* cur, const uint8_t* end);
108
- static grpc_error* parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
109
- const uint8_t* cur,
110
- const uint8_t* end);
111
- static grpc_error* parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
112
- const uint8_t* cur,
113
- const uint8_t* end);
114
- static grpc_error* parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
115
- const uint8_t* cur, const uint8_t* end);
116
- static grpc_error* parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
117
- const uint8_t* cur,
118
- const uint8_t* end);
119
- static grpc_error* parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
120
- const uint8_t* cur,
121
- const uint8_t* end);
122
- static grpc_error* parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
123
- const uint8_t* cur, const uint8_t* end);
124
- static grpc_error* parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
125
- const uint8_t* cur,
126
- const uint8_t* end);
127
- static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
128
- const uint8_t* cur,
129
- const uint8_t* end);
130
- static grpc_error* parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
93
+ static grpc_error_handle parse_value0(grpc_chttp2_hpack_parser* p,
94
+ const uint8_t* cur, const uint8_t* end);
95
+ static grpc_error_handle parse_value1(grpc_chttp2_hpack_parser* p,
131
96
  const uint8_t* cur, const uint8_t* end);
132
- static grpc_error* parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
97
+ static grpc_error_handle parse_value2(grpc_chttp2_hpack_parser* p,
98
+ const uint8_t* cur, const uint8_t* end);
99
+ static grpc_error_handle parse_value3(grpc_chttp2_hpack_parser* p,
100
+ const uint8_t* cur, const uint8_t* end);
101
+ static grpc_error_handle parse_value4(grpc_chttp2_hpack_parser* p,
102
+ const uint8_t* cur, const uint8_t* end);
103
+ static grpc_error_handle parse_value5up(grpc_chttp2_hpack_parser* p,
133
104
  const uint8_t* cur, const uint8_t* end);
134
105
 
106
+ static grpc_error_handle parse_indexed_field(grpc_chttp2_hpack_parser* p,
107
+ const uint8_t* cur,
108
+ const uint8_t* end);
109
+ static grpc_error_handle parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
110
+ const uint8_t* cur,
111
+ const uint8_t* end);
112
+ static grpc_error_handle parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
113
+ const uint8_t* cur,
114
+ const uint8_t* end);
115
+ static grpc_error_handle parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
116
+ const uint8_t* cur,
117
+ const uint8_t* end);
118
+ static grpc_error_handle parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
119
+ const uint8_t* cur,
120
+ const uint8_t* end);
121
+ static grpc_error_handle parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
122
+ const uint8_t* cur,
123
+ const uint8_t* end);
124
+ static grpc_error_handle parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
125
+ const uint8_t* cur,
126
+ const uint8_t* end);
127
+ static grpc_error_handle parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
128
+ const uint8_t* cur,
129
+ const uint8_t* end);
130
+ static grpc_error_handle parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
131
+ const uint8_t* cur,
132
+ const uint8_t* end);
133
+ static grpc_error_handle parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
134
+ const uint8_t* cur,
135
+ const uint8_t* end);
136
+ static grpc_error_handle parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
137
+ const uint8_t* cur,
138
+ const uint8_t* end);
139
+ static grpc_error_handle parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
140
+ const uint8_t* cur,
141
+ const uint8_t* end);
142
+ static grpc_error_handle parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
143
+ const uint8_t* cur,
144
+ const uint8_t* end);
145
+
135
146
  /* we translate the first byte of a hpack field into one of these decoding
136
147
  cases, then use a lookup table to jump directly to the appropriate parser.
137
148
 
@@ -647,14 +658,14 @@ static void GPR_ATTRIBUTE_NOINLINE on_hdr_log(grpc_mdelem md) {
647
658
 
648
659
  /* emission helpers */
649
660
  template <bool do_add>
650
- static grpc_error* on_hdr(grpc_chttp2_hpack_parser* p, grpc_mdelem md) {
661
+ static grpc_error_handle on_hdr(grpc_chttp2_hpack_parser* p, grpc_mdelem md) {
651
662
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
652
663
  on_hdr_log(md);
653
664
  }
654
665
  if (do_add) {
655
666
  GPR_DEBUG_ASSERT(GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_INTERNED ||
656
667
  GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC);
657
- grpc_error* err = grpc_chttp2_hptbl_add(&p->table, md);
668
+ grpc_error_handle err = grpc_chttp2_hptbl_add(&p->table, md);
658
669
  if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
659
670
  }
660
671
  return p->on_header(p->on_header_user_data, md);
@@ -693,16 +704,16 @@ static grpc_core::ManagedMemorySlice take_string_intern(
693
704
  }
694
705
 
695
706
  /* jump to the next state */
696
- static grpc_error* parse_next(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
697
- const uint8_t* end) {
707
+ static grpc_error_handle parse_next(grpc_chttp2_hpack_parser* p,
708
+ const uint8_t* cur, const uint8_t* end) {
698
709
  p->state = *p->next_state++;
699
710
  return p->state(p, cur, end);
700
711
  }
701
712
 
702
713
  /* begin parsing a header: all functionality is encoded into lookup tables
703
714
  above */
704
- static grpc_error* parse_begin(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
705
- const uint8_t* end) {
715
+ static grpc_error_handle parse_begin(grpc_chttp2_hpack_parser* p,
716
+ const uint8_t* cur, const uint8_t* end) {
706
717
  if (cur == end) {
707
718
  p->state = parse_begin;
708
719
  return GRPC_ERROR_NONE;
@@ -712,8 +723,9 @@ static grpc_error* parse_begin(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
712
723
  }
713
724
 
714
725
  /* stream dependency and prioritization data: we just skip it */
715
- static grpc_error* parse_stream_weight(grpc_chttp2_hpack_parser* p,
716
- const uint8_t* cur, const uint8_t* end) {
726
+ static grpc_error_handle parse_stream_weight(grpc_chttp2_hpack_parser* p,
727
+ const uint8_t* cur,
728
+ const uint8_t* end) {
717
729
  if (cur == end) {
718
730
  p->state = parse_stream_weight;
719
731
  return GRPC_ERROR_NONE;
@@ -722,8 +734,9 @@ static grpc_error* parse_stream_weight(grpc_chttp2_hpack_parser* p,
722
734
  return p->after_prioritization(p, cur + 1, end);
723
735
  }
724
736
 
725
- static grpc_error* parse_stream_dep3(grpc_chttp2_hpack_parser* p,
726
- const uint8_t* cur, const uint8_t* end) {
737
+ static grpc_error_handle parse_stream_dep3(grpc_chttp2_hpack_parser* p,
738
+ const uint8_t* cur,
739
+ const uint8_t* end) {
727
740
  if (cur == end) {
728
741
  p->state = parse_stream_dep3;
729
742
  return GRPC_ERROR_NONE;
@@ -732,8 +745,9 @@ static grpc_error* parse_stream_dep3(grpc_chttp2_hpack_parser* p,
732
745
  return parse_stream_weight(p, cur + 1, end);
733
746
  }
734
747
 
735
- static grpc_error* parse_stream_dep2(grpc_chttp2_hpack_parser* p,
736
- const uint8_t* cur, const uint8_t* end) {
748
+ static grpc_error_handle parse_stream_dep2(grpc_chttp2_hpack_parser* p,
749
+ const uint8_t* cur,
750
+ const uint8_t* end) {
737
751
  if (cur == end) {
738
752
  p->state = parse_stream_dep2;
739
753
  return GRPC_ERROR_NONE;
@@ -742,8 +756,9 @@ static grpc_error* parse_stream_dep2(grpc_chttp2_hpack_parser* p,
742
756
  return parse_stream_dep3(p, cur + 1, end);
743
757
  }
744
758
 
745
- static grpc_error* parse_stream_dep1(grpc_chttp2_hpack_parser* p,
746
- const uint8_t* cur, const uint8_t* end) {
759
+ static grpc_error_handle parse_stream_dep1(grpc_chttp2_hpack_parser* p,
760
+ const uint8_t* cur,
761
+ const uint8_t* end) {
747
762
  if (cur == end) {
748
763
  p->state = parse_stream_dep1;
749
764
  return GRPC_ERROR_NONE;
@@ -752,8 +767,9 @@ static grpc_error* parse_stream_dep1(grpc_chttp2_hpack_parser* p,
752
767
  return parse_stream_dep2(p, cur + 1, end);
753
768
  }
754
769
 
755
- static grpc_error* parse_stream_dep0(grpc_chttp2_hpack_parser* p,
756
- const uint8_t* cur, const uint8_t* end) {
770
+ static grpc_error_handle parse_stream_dep0(grpc_chttp2_hpack_parser* p,
771
+ const uint8_t* cur,
772
+ const uint8_t* end) {
757
773
  if (cur == end) {
758
774
  p->state = parse_stream_dep0;
759
775
  return GRPC_ERROR_NONE;
@@ -762,7 +778,7 @@ static grpc_error* parse_stream_dep0(grpc_chttp2_hpack_parser* p,
762
778
  return parse_stream_dep1(p, cur + 1, end);
763
779
  }
764
780
 
765
- static grpc_error* GPR_ATTRIBUTE_NOINLINE
781
+ static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
766
782
  on_invalid_hpack_idx(grpc_chttp2_hpack_parser* p) {
767
783
  return grpc_error_set_int(
768
784
  grpc_error_set_int(
@@ -772,22 +788,23 @@ on_invalid_hpack_idx(grpc_chttp2_hpack_parser* p) {
772
788
  }
773
789
 
774
790
  /* emit an indexed field; jumps to begin the next field on completion */
775
- static grpc_error* finish_indexed_field(grpc_chttp2_hpack_parser* p,
776
- const uint8_t* cur,
777
- const uint8_t* end) {
791
+ static grpc_error_handle finish_indexed_field(grpc_chttp2_hpack_parser* p,
792
+ const uint8_t* cur,
793
+ const uint8_t* end) {
778
794
  grpc_mdelem md = grpc_chttp2_hptbl_lookup<true>(&p->table, p->index);
779
795
  if (GPR_UNLIKELY(GRPC_MDISNULL(md))) {
780
796
  return on_invalid_hpack_idx(p);
781
797
  }
782
798
  GRPC_STATS_INC_HPACK_RECV_INDEXED();
783
- grpc_error* err = on_hdr<false>(p, md);
799
+ grpc_error_handle err = on_hdr<false>(p, md);
784
800
  if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
785
801
  return parse_begin(p, cur, end);
786
802
  }
787
803
 
788
804
  /* parse an indexed field with index < 127 */
789
- static grpc_error* parse_indexed_field(grpc_chttp2_hpack_parser* p,
790
- const uint8_t* cur, const uint8_t* end) {
805
+ static grpc_error_handle parse_indexed_field(grpc_chttp2_hpack_parser* p,
806
+ const uint8_t* cur,
807
+ const uint8_t* end) {
791
808
  p->dynamic_table_update_allowed = 0;
792
809
  p->index = (*cur) & 0x7f;
793
810
  p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
@@ -795,9 +812,9 @@ static grpc_error* parse_indexed_field(grpc_chttp2_hpack_parser* p,
795
812
  }
796
813
 
797
814
  /* parse an indexed field with index >= 127 */
798
- static grpc_error* parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
799
- const uint8_t* cur,
800
- const uint8_t* end) {
815
+ static grpc_error_handle parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
816
+ const uint8_t* cur,
817
+ const uint8_t* end) {
801
818
  static const grpc_chttp2_hpack_parser_state and_then[] = {
802
819
  finish_indexed_field};
803
820
  p->dynamic_table_update_allowed = 0;
@@ -830,12 +847,12 @@ static const grpc_core::ManagedMemorySlice& get_indexed_key(grpc_mdelem md) {
830
847
  }
831
848
 
832
849
  /* finish a literal header with incremental indexing */
833
- static grpc_error* finish_lithdr_incidx(grpc_chttp2_hpack_parser* p,
834
- const uint8_t* cur,
835
- const uint8_t* end) {
850
+ static grpc_error_handle finish_lithdr_incidx(grpc_chttp2_hpack_parser* p,
851
+ const uint8_t* cur,
852
+ const uint8_t* end) {
836
853
  GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX();
837
854
  grpc_mdelem md = get_precomputed_md_for_idx(p);
838
- grpc_error* err = on_hdr<true>(
855
+ grpc_error_handle err = on_hdr<true>(
839
856
  p, grpc_mdelem_from_slices(get_indexed_key(md),
840
857
  take_string_intern(p, &p->value)));
841
858
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -843,11 +860,11 @@ static grpc_error* finish_lithdr_incidx(grpc_chttp2_hpack_parser* p,
843
860
  }
844
861
 
845
862
  /* finish a literal header with incremental indexing with no index */
846
- static grpc_error* finish_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
847
- const uint8_t* cur,
848
- const uint8_t* end) {
863
+ static grpc_error_handle finish_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
864
+ const uint8_t* cur,
865
+ const uint8_t* end) {
849
866
  GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX_V();
850
- grpc_error* err = on_hdr<true>(
867
+ grpc_error_handle err = on_hdr<true>(
851
868
  p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
852
869
  take_string_intern(p, &p->value)));
853
870
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -855,8 +872,9 @@ static grpc_error* finish_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
855
872
  }
856
873
 
857
874
  /* parse a literal header with incremental indexing; index < 63 */
858
- static grpc_error* parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
859
- const uint8_t* cur, const uint8_t* end) {
875
+ static grpc_error_handle parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
876
+ const uint8_t* cur,
877
+ const uint8_t* end) {
860
878
  static const grpc_chttp2_hpack_parser_state and_then[] = {
861
879
  parse_value_string_with_indexed_key, finish_lithdr_incidx};
862
880
  p->dynamic_table_update_allowed = 0;
@@ -867,9 +885,9 @@ static grpc_error* parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
867
885
  }
868
886
 
869
887
  /* parse a literal header with incremental indexing; index >= 63 */
870
- static grpc_error* parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
871
- const uint8_t* cur,
872
- const uint8_t* end) {
888
+ static grpc_error_handle parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
889
+ const uint8_t* cur,
890
+ const uint8_t* end) {
873
891
  static const grpc_chttp2_hpack_parser_state and_then[] = {
874
892
  parse_string_prefix, parse_value_string_with_indexed_key,
875
893
  finish_lithdr_incidx};
@@ -882,9 +900,9 @@ static grpc_error* parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
882
900
  }
883
901
 
884
902
  /* parse a literal header with incremental indexing; index = 0 */
885
- static grpc_error* parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
886
- const uint8_t* cur,
887
- const uint8_t* end) {
903
+ static grpc_error_handle parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
904
+ const uint8_t* cur,
905
+ const uint8_t* end) {
888
906
  static const grpc_chttp2_hpack_parser_state and_then[] = {
889
907
  parse_key_string, parse_string_prefix,
890
908
  parse_value_string_with_literal_key, finish_lithdr_incidx_v};
@@ -894,12 +912,12 @@ static grpc_error* parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
894
912
  }
895
913
 
896
914
  /* finish a literal header without incremental indexing */
897
- static grpc_error* finish_lithdr_notidx(grpc_chttp2_hpack_parser* p,
898
- const uint8_t* cur,
899
- const uint8_t* end) {
915
+ static grpc_error_handle finish_lithdr_notidx(grpc_chttp2_hpack_parser* p,
916
+ const uint8_t* cur,
917
+ const uint8_t* end) {
900
918
  GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX();
901
919
  grpc_mdelem md = get_precomputed_md_for_idx(p);
902
- grpc_error* err = on_hdr<false>(
920
+ grpc_error_handle err = on_hdr<false>(
903
921
  p, grpc_mdelem_from_slices(get_indexed_key(md),
904
922
  take_string_extern(p, &p->value)));
905
923
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -907,11 +925,11 @@ static grpc_error* finish_lithdr_notidx(grpc_chttp2_hpack_parser* p,
907
925
  }
908
926
 
909
927
  /* finish a literal header without incremental indexing with index = 0 */
910
- static grpc_error* finish_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
911
- const uint8_t* cur,
912
- const uint8_t* end) {
928
+ static grpc_error_handle finish_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
929
+ const uint8_t* cur,
930
+ const uint8_t* end) {
913
931
  GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX_V();
914
- grpc_error* err = on_hdr<false>(
932
+ grpc_error_handle err = on_hdr<false>(
915
933
  p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
916
934
  take_string_extern(p, &p->value)));
917
935
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -919,8 +937,9 @@ static grpc_error* finish_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
919
937
  }
920
938
 
921
939
  /* parse a literal header without incremental indexing; index < 15 */
922
- static grpc_error* parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
923
- const uint8_t* cur, const uint8_t* end) {
940
+ static grpc_error_handle parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
941
+ const uint8_t* cur,
942
+ const uint8_t* end) {
924
943
  static const grpc_chttp2_hpack_parser_state and_then[] = {
925
944
  parse_value_string_with_indexed_key, finish_lithdr_notidx};
926
945
  p->dynamic_table_update_allowed = 0;
@@ -931,9 +950,9 @@ static grpc_error* parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
931
950
  }
932
951
 
933
952
  /* parse a literal header without incremental indexing; index >= 15 */
934
- static grpc_error* parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
935
- const uint8_t* cur,
936
- const uint8_t* end) {
953
+ static grpc_error_handle parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
954
+ const uint8_t* cur,
955
+ const uint8_t* end) {
937
956
  static const grpc_chttp2_hpack_parser_state and_then[] = {
938
957
  parse_string_prefix, parse_value_string_with_indexed_key,
939
958
  finish_lithdr_notidx};
@@ -946,9 +965,9 @@ static grpc_error* parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
946
965
  }
947
966
 
948
967
  /* parse a literal header without incremental indexing; index == 0 */
949
- static grpc_error* parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
950
- const uint8_t* cur,
951
- const uint8_t* end) {
968
+ static grpc_error_handle parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
969
+ const uint8_t* cur,
970
+ const uint8_t* end) {
952
971
  static const grpc_chttp2_hpack_parser_state and_then[] = {
953
972
  parse_key_string, parse_string_prefix,
954
973
  parse_value_string_with_literal_key, finish_lithdr_notidx_v};
@@ -958,12 +977,12 @@ static grpc_error* parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
958
977
  }
959
978
 
960
979
  /* finish a literal header that is never indexed */
961
- static grpc_error* finish_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
962
- const uint8_t* cur,
963
- const uint8_t* end) {
980
+ static grpc_error_handle finish_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
981
+ const uint8_t* cur,
982
+ const uint8_t* end) {
964
983
  GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX();
965
984
  grpc_mdelem md = get_precomputed_md_for_idx(p);
966
- grpc_error* err = on_hdr<false>(
985
+ grpc_error_handle err = on_hdr<false>(
967
986
  p, grpc_mdelem_from_slices(get_indexed_key(md),
968
987
  take_string_extern(p, &p->value)));
969
988
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -971,11 +990,11 @@ static grpc_error* finish_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
971
990
  }
972
991
 
973
992
  /* finish a literal header that is never indexed with an extra value */
974
- static grpc_error* finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
975
- const uint8_t* cur,
976
- const uint8_t* end) {
993
+ static grpc_error_handle finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
994
+ const uint8_t* cur,
995
+ const uint8_t* end) {
977
996
  GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX_V();
978
- grpc_error* err = on_hdr<false>(
997
+ grpc_error_handle err = on_hdr<false>(
979
998
  p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
980
999
  take_string_extern(p, &p->value)));
981
1000
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -983,8 +1002,9 @@ static grpc_error* finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
983
1002
  }
984
1003
 
985
1004
  /* parse a literal header that is never indexed; index < 15 */
986
- static grpc_error* parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
987
- const uint8_t* cur, const uint8_t* end) {
1005
+ static grpc_error_handle parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
1006
+ const uint8_t* cur,
1007
+ const uint8_t* end) {
988
1008
  static const grpc_chttp2_hpack_parser_state and_then[] = {
989
1009
  parse_value_string_with_indexed_key, finish_lithdr_nvridx};
990
1010
  p->dynamic_table_update_allowed = 0;
@@ -995,9 +1015,9 @@ static grpc_error* parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
995
1015
  }
996
1016
 
997
1017
  /* parse a literal header that is never indexed; index >= 15 */
998
- static grpc_error* parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
999
- const uint8_t* cur,
1000
- const uint8_t* end) {
1018
+ static grpc_error_handle parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
1019
+ const uint8_t* cur,
1020
+ const uint8_t* end) {
1001
1021
  static const grpc_chttp2_hpack_parser_state and_then[] = {
1002
1022
  parse_string_prefix, parse_value_string_with_indexed_key,
1003
1023
  finish_lithdr_nvridx};
@@ -1010,9 +1030,9 @@ static grpc_error* parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
1010
1030
  }
1011
1031
 
1012
1032
  /* parse a literal header that is never indexed; index == 0 */
1013
- static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
1014
- const uint8_t* cur,
1015
- const uint8_t* end) {
1033
+ static grpc_error_handle parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
1034
+ const uint8_t* cur,
1035
+ const uint8_t* end) {
1016
1036
  static const grpc_chttp2_hpack_parser_state and_then[] = {
1017
1037
  parse_key_string, parse_string_prefix,
1018
1038
  parse_value_string_with_literal_key, finish_lithdr_nvridx_v};
@@ -1022,20 +1042,22 @@ static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
1022
1042
  }
1023
1043
 
1024
1044
  /* finish parsing a max table size change */
1025
- static grpc_error* finish_max_tbl_size(grpc_chttp2_hpack_parser* p,
1026
- const uint8_t* cur, const uint8_t* end) {
1045
+ static grpc_error_handle finish_max_tbl_size(grpc_chttp2_hpack_parser* p,
1046
+ const uint8_t* cur,
1047
+ const uint8_t* end) {
1027
1048
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
1028
1049
  gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
1029
1050
  }
1030
- grpc_error* err =
1051
+ grpc_error_handle err =
1031
1052
  grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index);
1032
1053
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1033
1054
  return parse_begin(p, cur, end);
1034
1055
  }
1035
1056
 
1036
1057
  /* parse a max table size change, max size < 15 */
1037
- static grpc_error* parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
1038
- const uint8_t* cur, const uint8_t* end) {
1058
+ static grpc_error_handle parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
1059
+ const uint8_t* cur,
1060
+ const uint8_t* end) {
1039
1061
  if (p->dynamic_table_update_allowed == 0) {
1040
1062
  return parse_error(
1041
1063
  p, cur, end,
@@ -1049,9 +1071,9 @@ static grpc_error* parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
1049
1071
  }
1050
1072
 
1051
1073
  /* parse a max table size change, max size >= 15 */
1052
- static grpc_error* parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
1053
- const uint8_t* cur,
1054
- const uint8_t* end) {
1074
+ static grpc_error_handle parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
1075
+ const uint8_t* cur,
1076
+ const uint8_t* end) {
1055
1077
  static const grpc_chttp2_hpack_parser_state and_then[] = {
1056
1078
  finish_max_tbl_size};
1057
1079
  if (p->dynamic_table_update_allowed == 0) {
@@ -1069,9 +1091,10 @@ static grpc_error* parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
1069
1091
  }
1070
1092
 
1071
1093
  /* a parse error: jam the parse state into parse_error, and return error */
1072
- static grpc_error* parse_error(grpc_chttp2_hpack_parser* p,
1073
- const uint8_t* /*cur*/, const uint8_t* /*end*/,
1074
- grpc_error* err) {
1094
+ static grpc_error_handle parse_error(grpc_chttp2_hpack_parser* p,
1095
+ const uint8_t* /*cur*/,
1096
+ const uint8_t* /*end*/,
1097
+ grpc_error_handle err) {
1075
1098
  GPR_ASSERT(err != GRPC_ERROR_NONE);
1076
1099
  if (p->last_error == GRPC_ERROR_NONE) {
1077
1100
  p->last_error = GRPC_ERROR_REF(err);
@@ -1080,24 +1103,25 @@ static grpc_error* parse_error(grpc_chttp2_hpack_parser* p,
1080
1103
  return err;
1081
1104
  }
1082
1105
 
1083
- static grpc_error* still_parse_error(grpc_chttp2_hpack_parser* p,
1084
- const uint8_t* /*cur*/,
1085
- const uint8_t* /*end*/) {
1106
+ static grpc_error_handle still_parse_error(grpc_chttp2_hpack_parser* p,
1107
+ const uint8_t* /*cur*/,
1108
+ const uint8_t* /*end*/) {
1086
1109
  return GRPC_ERROR_REF(p->last_error);
1087
1110
  }
1088
1111
 
1089
- static grpc_error* parse_illegal_op(grpc_chttp2_hpack_parser* p,
1090
- const uint8_t* cur, const uint8_t* end) {
1112
+ static grpc_error_handle parse_illegal_op(grpc_chttp2_hpack_parser* p,
1113
+ const uint8_t* cur,
1114
+ const uint8_t* end) {
1091
1115
  GPR_ASSERT(cur != end);
1092
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1116
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1093
1117
  absl::StrCat("Illegal hpack op code ", *cur).c_str());
1094
1118
  return parse_error(p, cur, end, err);
1095
1119
  }
1096
1120
 
1097
1121
  /* parse the 1st byte of a varint into p->parsing.value
1098
1122
  no overflow is possible */
1099
- static grpc_error* parse_value0(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1100
- const uint8_t* end) {
1123
+ static grpc_error_handle parse_value0(grpc_chttp2_hpack_parser* p,
1124
+ const uint8_t* cur, const uint8_t* end) {
1101
1125
  if (cur == end) {
1102
1126
  p->state = parse_value0;
1103
1127
  return GRPC_ERROR_NONE;
@@ -1114,8 +1138,8 @@ static grpc_error* parse_value0(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1114
1138
 
1115
1139
  /* parse the 2nd byte of a varint into p->parsing.value
1116
1140
  no overflow is possible */
1117
- static grpc_error* parse_value1(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1118
- const uint8_t* end) {
1141
+ static grpc_error_handle parse_value1(grpc_chttp2_hpack_parser* p,
1142
+ const uint8_t* cur, const uint8_t* end) {
1119
1143
  if (cur == end) {
1120
1144
  p->state = parse_value1;
1121
1145
  return GRPC_ERROR_NONE;
@@ -1132,8 +1156,8 @@ static grpc_error* parse_value1(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1132
1156
 
1133
1157
  /* parse the 3rd byte of a varint into p->parsing.value
1134
1158
  no overflow is possible */
1135
- static grpc_error* parse_value2(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1136
- const uint8_t* end) {
1159
+ static grpc_error_handle parse_value2(grpc_chttp2_hpack_parser* p,
1160
+ const uint8_t* cur, const uint8_t* end) {
1137
1161
  if (cur == end) {
1138
1162
  p->state = parse_value2;
1139
1163
  return GRPC_ERROR_NONE;
@@ -1150,8 +1174,8 @@ static grpc_error* parse_value2(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1150
1174
 
1151
1175
  /* parse the 4th byte of a varint into p->parsing.value
1152
1176
  no overflow is possible */
1153
- static grpc_error* parse_value3(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1154
- const uint8_t* end) {
1177
+ static grpc_error_handle parse_value3(grpc_chttp2_hpack_parser* p,
1178
+ const uint8_t* cur, const uint8_t* end) {
1155
1179
  if (cur == end) {
1156
1180
  p->state = parse_value3;
1157
1181
  return GRPC_ERROR_NONE;
@@ -1168,8 +1192,8 @@ static grpc_error* parse_value3(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1168
1192
 
1169
1193
  /* parse the 5th byte of a varint into p->parsing.value
1170
1194
  depending on the byte, we may overflow, and care must be taken */
1171
- static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1172
- const uint8_t* end) {
1195
+ static grpc_error_handle parse_value4(grpc_chttp2_hpack_parser* p,
1196
+ const uint8_t* cur, const uint8_t* end) {
1173
1197
  uint8_t c;
1174
1198
  uint32_t cur_value;
1175
1199
  uint32_t add_value;
@@ -1199,7 +1223,7 @@ static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1199
1223
  }
1200
1224
 
1201
1225
  error:
1202
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1226
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1203
1227
  absl::StrFormat(
1204
1228
  "integer overflow in hpack integer decoding: have 0x%08x, "
1205
1229
  "got byte 0x%02x on byte 5",
@@ -1211,8 +1235,9 @@ error:
1211
1235
  /* parse any trailing bytes in a varint: it's possible to append an arbitrary
1212
1236
  number of 0x80's and not affect the value - a zero will terminate - and
1213
1237
  anything else will overflow */
1214
- static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
1215
- const uint8_t* cur, const uint8_t* end) {
1238
+ static grpc_error_handle parse_value5up(grpc_chttp2_hpack_parser* p,
1239
+ const uint8_t* cur,
1240
+ const uint8_t* end) {
1216
1241
  while (cur != end && *cur == 0x80) {
1217
1242
  ++cur;
1218
1243
  }
@@ -1226,7 +1251,7 @@ static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
1226
1251
  return parse_next(p, cur + 1, end);
1227
1252
  }
1228
1253
 
1229
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1254
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1230
1255
  absl::StrFormat(
1231
1256
  "integer overflow in hpack integer decoding: have 0x%08x, "
1232
1257
  "got byte 0x%02x sometime after byte 5",
@@ -1236,8 +1261,9 @@ static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
1236
1261
  }
1237
1262
 
1238
1263
  /* parse a string prefix */
1239
- static grpc_error* parse_string_prefix(grpc_chttp2_hpack_parser* p,
1240
- const uint8_t* cur, const uint8_t* end) {
1264
+ static grpc_error_handle parse_string_prefix(grpc_chttp2_hpack_parser* p,
1265
+ const uint8_t* cur,
1266
+ const uint8_t* end) {
1241
1267
  if (cur == end) {
1242
1268
  p->state = parse_string_prefix;
1243
1269
  return GRPC_ERROR_NONE;
@@ -1269,8 +1295,8 @@ static void append_bytes(grpc_chttp2_hpack_parser_string* str,
1269
1295
  str->data.copied.length += static_cast<uint32_t>(length);
1270
1296
  }
1271
1297
 
1272
- static grpc_error* append_string(grpc_chttp2_hpack_parser* p,
1273
- const uint8_t* cur, const uint8_t* end) {
1298
+ static grpc_error_handle append_string(grpc_chttp2_hpack_parser* p,
1299
+ const uint8_t* cur, const uint8_t* end) {
1274
1300
  grpc_chttp2_hpack_parser_string* str = p->parsing.str;
1275
1301
  uint32_t bits;
1276
1302
  uint8_t decoded[3];
@@ -1372,8 +1398,8 @@ static grpc_error* append_string(grpc_chttp2_hpack_parser* p,
1372
1398
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")));
1373
1399
  }
1374
1400
 
1375
- static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1376
- const uint8_t* end) {
1401
+ static grpc_error_handle finish_str(grpc_chttp2_hpack_parser* p,
1402
+ const uint8_t* cur, const uint8_t* end) {
1377
1403
  uint8_t decoded[2];
1378
1404
  uint32_t bits;
1379
1405
  grpc_chttp2_hpack_parser_string* str = p->parsing.str;
@@ -1391,7 +1417,7 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1391
1417
  case B64_BYTE2:
1392
1418
  bits = p->base64_buffer;
1393
1419
  if (bits & 0xffff) {
1394
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1420
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1395
1421
  absl::StrFormat("trailing bits in base64 encoding: 0x%04x",
1396
1422
  bits & 0xffff)
1397
1423
  .c_str());
@@ -1403,7 +1429,7 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1403
1429
  case B64_BYTE3:
1404
1430
  bits = p->base64_buffer;
1405
1431
  if (bits & 0xff) {
1406
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1432
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1407
1433
  absl::StrFormat("trailing bits in base64 encoding: 0x%02x",
1408
1434
  bits & 0xff)
1409
1435
  .c_str());
@@ -1418,13 +1444,14 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1418
1444
  }
1419
1445
 
1420
1446
  /* decode a nibble from a huffman encoded stream */
1421
- static grpc_error* huff_nibble(grpc_chttp2_hpack_parser* p, uint8_t nibble) {
1447
+ static grpc_error_handle huff_nibble(grpc_chttp2_hpack_parser* p,
1448
+ uint8_t nibble) {
1422
1449
  int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
1423
1450
  int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
1424
1451
  if (emit != -1) {
1425
1452
  if (emit >= 0 && emit < 256) {
1426
1453
  uint8_t c = static_cast<uint8_t>(emit);
1427
- grpc_error* err = append_string(p, &c, (&c) + 1);
1454
+ grpc_error_handle err = append_string(p, &c, (&c) + 1);
1428
1455
  if (err != GRPC_ERROR_NONE) return err;
1429
1456
  } else {
1430
1457
  assert(emit == 256);
@@ -1435,10 +1462,11 @@ static grpc_error* huff_nibble(grpc_chttp2_hpack_parser* p, uint8_t nibble) {
1435
1462
  }
1436
1463
 
1437
1464
  /* decode full bytes from a huffman encoded stream */
1438
- static grpc_error* add_huff_bytes(grpc_chttp2_hpack_parser* p,
1439
- const uint8_t* cur, const uint8_t* end) {
1465
+ static grpc_error_handle add_huff_bytes(grpc_chttp2_hpack_parser* p,
1466
+ const uint8_t* cur,
1467
+ const uint8_t* end) {
1440
1468
  for (; cur != end; ++cur) {
1441
- grpc_error* err = huff_nibble(p, *cur >> 4);
1469
+ grpc_error_handle err = huff_nibble(p, *cur >> 4);
1442
1470
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1443
1471
  err = huff_nibble(p, *cur & 0xf);
1444
1472
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
@@ -1448,8 +1476,8 @@ static grpc_error* add_huff_bytes(grpc_chttp2_hpack_parser* p,
1448
1476
 
1449
1477
  /* decode some string bytes based on the current decoding mode
1450
1478
  (huffman or not) */
1451
- static grpc_error* add_str_bytes(grpc_chttp2_hpack_parser* p,
1452
- const uint8_t* cur, const uint8_t* end) {
1479
+ static grpc_error_handle add_str_bytes(grpc_chttp2_hpack_parser* p,
1480
+ const uint8_t* cur, const uint8_t* end) {
1453
1481
  if (p->huff) {
1454
1482
  return add_huff_bytes(p, cur, end);
1455
1483
  } else {
@@ -1458,18 +1486,18 @@ static grpc_error* add_str_bytes(grpc_chttp2_hpack_parser* p,
1458
1486
  }
1459
1487
 
1460
1488
  /* parse a string - tries to do large chunks at a time */
1461
- static grpc_error* parse_string(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1462
- const uint8_t* end) {
1489
+ static grpc_error_handle parse_string(grpc_chttp2_hpack_parser* p,
1490
+ const uint8_t* cur, const uint8_t* end) {
1463
1491
  size_t remaining = p->strlen - p->strgot;
1464
1492
  size_t given = static_cast<size_t>(end - cur);
1465
1493
  if (remaining <= given) {
1466
- grpc_error* err = add_str_bytes(p, cur, cur + remaining);
1494
+ grpc_error_handle err = add_str_bytes(p, cur, cur + remaining);
1467
1495
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1468
1496
  err = finish_str(p, cur + remaining, end);
1469
1497
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1470
1498
  return parse_next(p, cur + remaining, end);
1471
1499
  } else {
1472
- grpc_error* err = add_str_bytes(p, cur, cur + given);
1500
+ grpc_error_handle err = add_str_bytes(p, cur, cur + given);
1473
1501
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1474
1502
  GPR_ASSERT(given <= UINT32_MAX - p->strgot);
1475
1503
  p->strgot += static_cast<uint32_t>(given);
@@ -1479,10 +1507,9 @@ static grpc_error* parse_string(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
1479
1507
  }
1480
1508
 
1481
1509
  /* begin parsing a string - performs setup, calls parse_string */
1482
- static grpc_error* begin_parse_string(grpc_chttp2_hpack_parser* p,
1483
- const uint8_t* cur, const uint8_t* end,
1484
- uint8_t binary,
1485
- grpc_chttp2_hpack_parser_string* str) {
1510
+ static grpc_error_handle begin_parse_string(
1511
+ grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end,
1512
+ uint8_t binary, grpc_chttp2_hpack_parser_string* str) {
1486
1513
  if (!p->huff && binary == NOT_BINARY &&
1487
1514
  static_cast<uint32_t>(end - cur) >= p->strlen &&
1488
1515
  p->current_slice_refcount != nullptr) {
@@ -1518,8 +1545,9 @@ static grpc_error* begin_parse_string(grpc_chttp2_hpack_parser* p,
1518
1545
  }
1519
1546
 
1520
1547
  /* parse the key string */
1521
- static grpc_error* parse_key_string(grpc_chttp2_hpack_parser* p,
1522
- const uint8_t* cur, const uint8_t* end) {
1548
+ static grpc_error_handle parse_key_string(grpc_chttp2_hpack_parser* p,
1549
+ const uint8_t* cur,
1550
+ const uint8_t* end) {
1523
1551
  return begin_parse_string(p, cur, end, NOT_BINARY, &p->key);
1524
1552
  }
1525
1553
 
@@ -1554,8 +1582,8 @@ static void set_precomputed_md_idx(grpc_chttp2_hpack_parser* p,
1554
1582
  is a binary indexed header during string parsing. We'll need to revisit this
1555
1583
  metadata when we're done parsing, so we cache the metadata for this index
1556
1584
  here using set_precomputed_md_idx(). */
1557
- static grpc_error* is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
1558
- bool* is) {
1585
+ static grpc_error_handle is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
1586
+ bool* is) {
1559
1587
  grpc_mdelem elem = grpc_chttp2_hptbl_lookup(&p->table, p->index);
1560
1588
  if (GPR_UNLIKELY(GRPC_MDISNULL(elem))) {
1561
1589
  return on_invalid_hpack_idx(p);
@@ -1574,29 +1602,30 @@ static grpc_error* is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
1574
1602
  }
1575
1603
 
1576
1604
  /* parse the value string */
1577
- static grpc_error* parse_value_string(grpc_chttp2_hpack_parser* p,
1578
- const uint8_t* cur, const uint8_t* end,
1579
- bool is_binary) {
1605
+ static grpc_error_handle parse_value_string(grpc_chttp2_hpack_parser* p,
1606
+ const uint8_t* cur,
1607
+ const uint8_t* end,
1608
+ bool is_binary) {
1580
1609
  return begin_parse_string(p, cur, end, is_binary ? BINARY_BEGIN : NOT_BINARY,
1581
1610
  &p->value);
1582
1611
  }
1583
1612
 
1584
- static grpc_error* parse_value_string_with_indexed_key(
1613
+ static grpc_error_handle parse_value_string_with_indexed_key(
1585
1614
  grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end) {
1586
1615
  bool is_binary = false;
1587
- grpc_error* err = is_binary_indexed_header(p, &is_binary);
1616
+ grpc_error_handle err = is_binary_indexed_header(p, &is_binary);
1588
1617
  if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
1589
1618
  return parse_value_string(p, cur, end, is_binary);
1590
1619
  }
1591
1620
 
1592
- static grpc_error* parse_value_string_with_literal_key(
1621
+ static grpc_error_handle parse_value_string_with_literal_key(
1593
1622
  grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end) {
1594
1623
  return parse_value_string(p, cur, end, is_binary_literal_header(p));
1595
1624
  }
1596
1625
 
1597
1626
  /* "Uninitialized" header parser to save us a branch in on_hdr(). */
1598
- static grpc_error* on_header_uninitialized(void* /*user_data*/,
1599
- grpc_mdelem md) {
1627
+ static grpc_error_handle on_header_uninitialized(void* /*user_data*/,
1628
+ grpc_mdelem md) {
1600
1629
  GRPC_MDELEM_UNREF(md);
1601
1630
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING("on_header callback not set");
1602
1631
  }
@@ -1645,15 +1674,15 @@ void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser* p) {
1645
1674
  gpr_free(p->value.data.copied.str);
1646
1675
  }
1647
1676
 
1648
- grpc_error* grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser* p,
1649
- const grpc_slice& slice) {
1677
+ grpc_error_handle grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser* p,
1678
+ const grpc_slice& slice) {
1650
1679
  /* max number of bytes to parse at a time... limits call stack depth on
1651
1680
  * compilers without TCO */
1652
1681
  #define MAX_PARSE_LENGTH 1024
1653
1682
  p->current_slice_refcount = slice.refcount;
1654
1683
  const uint8_t* start = GRPC_SLICE_START_PTR(slice);
1655
1684
  const uint8_t* end = GRPC_SLICE_END_PTR(slice);
1656
- grpc_error* error = GRPC_ERROR_NONE;
1685
+ grpc_error_handle error = GRPC_ERROR_NONE;
1657
1686
  while (start != end && error == GRPC_ERROR_NONE) {
1658
1687
  const uint8_t* target = start + GPR_MIN(MAX_PARSE_LENGTH, end - start);
1659
1688
  error = p->state(p, start, target);
@@ -1669,7 +1698,7 @@ static const maybe_complete_func_type maybe_complete_funcs[] = {
1669
1698
  grpc_chttp2_maybe_complete_recv_initial_metadata,
1670
1699
  grpc_chttp2_maybe_complete_recv_trailing_metadata};
1671
1700
 
1672
- static void force_client_rst_stream(void* sp, grpc_error* /*error*/) {
1701
+ static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
1673
1702
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
1674
1703
  grpc_chttp2_transport* t = s->t;
1675
1704
  if (!s->write_closed) {
@@ -1699,18 +1728,18 @@ static void parse_stream_compression_md(grpc_chttp2_transport* /*t*/,
1699
1728
  }
1700
1729
  }
1701
1730
 
1702
- grpc_error* grpc_chttp2_header_parser_parse(void* hpack_parser,
1703
- grpc_chttp2_transport* t,
1704
- grpc_chttp2_stream* s,
1705
- const grpc_slice& slice,
1706
- int is_last) {
1731
+ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1732
+ grpc_chttp2_transport* t,
1733
+ grpc_chttp2_stream* s,
1734
+ const grpc_slice& slice,
1735
+ int is_last) {
1707
1736
  GPR_TIMER_SCOPE("grpc_chttp2_header_parser_parse", 0);
1708
1737
  grpc_chttp2_hpack_parser* parser =
1709
1738
  static_cast<grpc_chttp2_hpack_parser*>(hpack_parser);
1710
1739
  if (s != nullptr) {
1711
1740
  s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
1712
1741
  }
1713
- grpc_error* error = grpc_chttp2_hpack_parser_parse(parser, slice);
1742
+ grpc_error_handle error = grpc_chttp2_hpack_parser_parse(parser, slice);
1714
1743
  if (error != GRPC_ERROR_NONE) {
1715
1744
  return error;
1716
1745
  }