grpc 1.7.3 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2106 -2116
  3. data/include/grpc/census.h +1 -432
  4. data/include/grpc/compression.h +9 -9
  5. data/include/grpc/grpc.h +115 -98
  6. data/include/grpc/grpc_cronet.h +3 -3
  7. data/include/grpc/grpc_posix.h +4 -4
  8. data/include/grpc/grpc_security.h +160 -88
  9. data/include/grpc/grpc_security_constants.h +7 -0
  10. data/include/grpc/impl/codegen/atm.h +9 -1
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
  13. data/include/grpc/impl/codegen/atm_windows.h +23 -22
  14. data/include/grpc/impl/codegen/byte_buffer.h +14 -14
  15. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
  16. data/include/grpc/impl/codegen/connectivity_state.h +0 -2
  17. data/include/grpc/impl/codegen/grpc_types.h +32 -28
  18. data/include/grpc/impl/codegen/port_platform.h +48 -0
  19. data/include/grpc/impl/codegen/slice.h +10 -10
  20. data/include/grpc/impl/codegen/sync_generic.h +9 -3
  21. data/include/grpc/slice.h +16 -17
  22. data/include/grpc/slice_buffer.h +22 -22
  23. data/include/grpc/support/alloc.h +11 -11
  24. data/include/grpc/support/avl.h +28 -20
  25. data/include/grpc/support/cmdline.h +13 -13
  26. data/include/grpc/support/histogram.h +17 -17
  27. data/include/grpc/support/host_port.h +2 -2
  28. data/include/grpc/support/log.h +9 -9
  29. data/include/grpc/support/log_windows.h +1 -1
  30. data/include/grpc/support/string_util.h +2 -2
  31. data/include/grpc/support/subprocess.h +5 -5
  32. data/include/grpc/support/sync.h +43 -27
  33. data/include/grpc/support/thd.h +6 -6
  34. data/include/grpc/support/tls_gcc.h +1 -1
  35. data/include/grpc/support/tls_pthread.h +1 -1
  36. data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
  38. data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
  39. data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
  40. data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
  41. data/src/core/ext/filters/client_channel/client_channel.h +16 -8
  42. data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
  44. data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
  45. data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
  46. data/src/core/ext/filters/client_channel/connector.h +29 -21
  47. data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
  48. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
  49. data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
  50. data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
  51. data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
  52. data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
  67. data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
  68. data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
  69. data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
  70. data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
  71. data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
  72. data/src/core/ext/filters/client_channel/parse_address.h +14 -6
  73. data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
  75. data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
  76. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
  77. data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
  78. data/src/core/ext/filters/client_channel/resolver.h +33 -27
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
  85. data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
  86. data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
  87. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
  88. data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
  89. data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
  90. data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
  91. data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
  92. data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
  93. data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
  94. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
  95. data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
  96. data/src/core/ext/filters/client_channel/subchannel.h +68 -60
  97. data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
  98. data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
  99. data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
  100. data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
  101. data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
  102. data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
  103. data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
  104. data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
  105. data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
  106. data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
  107. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
  108. data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
  109. data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
  110. data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
  112. data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
  113. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
  114. data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
  115. data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
  116. data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
  117. data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
  118. data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
  119. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
  120. data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
  121. data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
  122. data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
  123. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
  124. data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
  127. data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
  128. data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
  129. data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
  131. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
  132. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
  133. data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
  134. data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
  136. data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
  138. data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
  139. data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
  144. data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
  146. data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
  148. data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
  150. data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
  152. data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
  154. data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
  156. data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
  158. data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
  160. data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
  162. data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
  164. data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
  165. data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
  166. data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
  167. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
  168. data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
  169. data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
  170. data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
  171. data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
  172. data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
  173. data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
  174. data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
  175. data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
  176. data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
  177. data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
  178. data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
  179. data/src/core/lib/backoff/backoff.cc +80 -0
  180. data/src/core/lib/backoff/backoff.h +83 -0
  181. data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
  182. data/src/core/lib/channel/channel_args.h +45 -37
  183. data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
  184. data/src/core/lib/channel/channel_stack.h +76 -75
  185. data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
  186. data/src/core/lib/channel/channel_stack_builder.h +45 -45
  187. data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
  188. data/src/core/lib/channel/connected_channel.h +12 -4
  189. data/src/core/lib/channel/context.h +2 -2
  190. data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
  191. data/src/core/lib/channel/handshaker.h +9 -1
  192. data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
  193. data/src/core/lib/channel/handshaker_factory.h +18 -10
  194. data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
  195. data/src/core/lib/channel/handshaker_registry.h +8 -0
  196. data/src/core/lib/compression/algorithm_metadata.h +8 -0
  197. data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
  198. data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
  199. data/src/core/lib/compression/message_compress.h +8 -0
  200. data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
  201. data/src/core/lib/compression/stream_compression.h +27 -19
  202. data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
  203. data/src/core/lib/compression/stream_compression_gzip.h +8 -0
  204. data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
  205. data/src/core/lib/compression/stream_compression_identity.h +8 -0
  206. data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
  207. data/src/core/lib/debug/stats.h +17 -9
  208. data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
  209. data/src/core/lib/debug/stats_data.h +58 -19
  210. data/src/core/lib/debug/trace.cc +142 -0
  211. data/src/core/lib/debug/trace.h +74 -14
  212. data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
  213. data/src/core/lib/http/format_request.h +12 -4
  214. data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
  215. data/src/core/lib/http/httpcli.h +41 -33
  216. data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
  217. data/src/core/lib/http/{parser.c → parser.cc} +42 -42
  218. data/src/core/lib/http/parser.h +28 -20
  219. data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
  220. data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
  221. data/src/core/lib/iomgr/call_combiner.h +9 -1
  222. data/src/core/lib/iomgr/closure.h +220 -62
  223. data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
  224. data/src/core/lib/iomgr/combiner.h +16 -8
  225. data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
  226. data/src/core/lib/iomgr/endpoint.h +47 -32
  227. data/src/core/lib/iomgr/endpoint_pair.h +12 -4
  228. data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
  229. data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
  230. data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
  231. data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
  232. data/src/core/lib/iomgr/error.h +32 -27
  233. data/src/core/lib/iomgr/error_internal.h +11 -2
  234. data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
  235. data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
  236. data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
  237. data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
  238. data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
  239. data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
  240. data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
  241. data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
  242. data/src/core/lib/iomgr/ev_posix.cc +288 -0
  243. data/src/core/lib/iomgr/ev_posix.h +75 -67
  244. data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
  245. data/src/core/lib/iomgr/exec_ctx.cc +177 -0
  246. data/src/core/lib/iomgr/exec_ctx.h +35 -13
  247. data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
  248. data/src/core/lib/iomgr/executor.h +12 -4
  249. data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
  250. data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
  251. data/src/core/lib/iomgr/gethostname.h +9 -1
  252. data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
  253. data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
  254. data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
  255. data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
  256. data/src/core/lib/iomgr/iocp_windows.h +17 -3
  257. data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
  258. data/src/core/lib/iomgr/iomgr.h +11 -3
  259. data/src/core/lib/iomgr/iomgr_internal.h +13 -5
  260. data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
  261. data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
  262. data/src/core/lib/iomgr/iomgr_uv.h +8 -0
  263. data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
  264. data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
  265. data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
  266. data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
  267. data/src/core/lib/iomgr/load_file.h +2 -2
  268. data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
  269. data/src/core/lib/iomgr/lockfree_event.h +30 -11
  270. data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
  271. data/src/core/lib/iomgr/network_status_tracker.h +2 -2
  272. data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
  273. data/src/core/lib/iomgr/polling_entity.h +21 -13
  274. data/src/core/lib/iomgr/pollset.h +17 -11
  275. data/src/core/lib/iomgr/pollset_set.h +23 -15
  276. data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
  277. data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
  278. data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
  279. data/src/core/lib/iomgr/pollset_uv.h +8 -0
  280. data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
  281. data/src/core/lib/iomgr/pollset_windows.h +17 -4
  282. data/src/core/lib/iomgr/port.h +10 -0
  283. data/src/core/lib/iomgr/resolve_address.h +18 -10
  284. data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
  285. data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
  286. data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
  287. data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
  288. data/src/core/lib/iomgr/resource_quota.h +45 -37
  289. data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
  290. data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
  291. data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
  292. data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
  293. data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
  294. data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
  295. data/src/core/lib/iomgr/socket_mutator.h +11 -11
  296. data/src/core/lib/iomgr/socket_utils.h +9 -1
  297. data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
  298. data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
  299. data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
  300. data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
  301. data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
  302. data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
  303. data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
  304. data/src/core/lib/iomgr/socket_windows.h +26 -13
  305. data/src/core/lib/iomgr/tcp_client.h +14 -6
  306. data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
  307. data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
  308. data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
  309. data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
  310. data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
  311. data/src/core/lib/iomgr/tcp_posix.h +15 -7
  312. data/src/core/lib/iomgr/tcp_server.h +31 -23
  313. data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
  314. data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
  315. data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
  316. data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
  317. data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
  318. data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
  319. data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
  320. data/src/core/lib/iomgr/tcp_uv.cc +420 -0
  321. data/src/core/lib/iomgr/tcp_uv.h +18 -4
  322. data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
  323. data/src/core/lib/iomgr/tcp_windows.h +17 -4
  324. data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
  325. data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
  326. data/src/core/lib/iomgr/timer.h +16 -9
  327. data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
  328. data/src/core/lib/iomgr/timer_generic.h +4 -4
  329. data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
  330. data/src/core/lib/iomgr/timer_heap.h +16 -8
  331. data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
  332. data/src/core/lib/iomgr/timer_manager.h +8 -0
  333. data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
  334. data/src/core/lib/iomgr/timer_uv.h +2 -2
  335. data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
  336. data/src/core/lib/iomgr/udp_server.h +25 -17
  337. data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
  338. data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
  339. data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
  340. data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
  341. data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
  342. data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
  343. data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
  344. data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
  345. data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
  346. data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
  347. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
  348. data/src/core/lib/json/{json.c → json.cc} +0 -0
  349. data/src/core/lib/json/json.h +8 -0
  350. data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
  351. data/src/core/lib/json/json_reader.h +26 -18
  352. data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
  353. data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
  354. data/src/core/lib/json/json_writer.h +23 -15
  355. data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
  356. data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
  357. data/src/core/lib/profiling/timers.h +6 -6
  358. data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
  359. data/src/core/lib/security/context/security_context.h +27 -29
  360. data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
  361. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
  362. data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
  363. data/src/core/lib/security/credentials/credentials.h +83 -75
  364. data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
  365. data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
  366. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  367. data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
  368. data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
  369. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
  370. data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
  371. data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
  372. data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
  373. data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
  374. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
  375. data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
  376. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
  377. data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
  378. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
  379. data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
  380. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
  381. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
  382. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
  383. data/src/core/lib/security/transport/auth_filters.h +16 -0
  384. data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
  385. data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
  386. data/src/core/lib/security/transport/lb_targets_info.h +11 -3
  387. data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
  388. data/src/core/lib/security/transport/secure_endpoint.h +13 -5
  389. data/src/core/lib/security/transport/security_connector.cc +1121 -0
  390. data/src/core/lib/security/transport/security_connector.h +97 -79
  391. data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
  392. data/src/core/lib/security/transport/security_handshaker.h +11 -3
  393. data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
  394. data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
  395. data/src/core/lib/security/transport/tsi_error.h +9 -1
  396. data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
  397. data/src/core/lib/security/util/json_util.h +12 -4
  398. data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
  399. data/src/core/lib/slice/b64.h +12 -4
  400. data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
  401. data/src/core/lib/slice/percent_encoding.h +11 -3
  402. data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
  403. data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
  404. data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
  405. data/src/core/lib/slice/slice_hash_table.h +19 -11
  406. data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
  407. data/src/core/lib/slice/slice_internal.h +17 -6
  408. data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
  409. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  410. data/src/core/lib/support/abstract.h +29 -0
  411. data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
  412. data/src/core/lib/support/{arena.c → arena.cc} +12 -12
  413. data/src/core/lib/support/arena.h +11 -3
  414. data/src/core/lib/support/{atm.c → atm.cc} +1 -1
  415. data/src/core/lib/support/{avl.c → avl.cc} +71 -70
  416. data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
  417. data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
  418. data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
  419. data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
  420. data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
  421. data/src/core/lib/support/env.h +3 -3
  422. data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
  423. data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
  424. data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
  425. data/src/core/lib/support/{fork.c → fork.cc} +2 -2
  426. data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
  427. data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
  428. data/src/core/lib/support/{log.c → log.cc} +8 -8
  429. data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
  430. data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
  431. data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
  432. data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
  433. data/src/core/lib/support/manual_constructor.h +211 -0
  434. data/src/core/lib/support/memory.h +41 -0
  435. data/src/core/lib/support/mpscq.cc +114 -0
  436. data/src/core/lib/support/mpscq.h +45 -7
  437. data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
  438. data/src/core/lib/support/murmur_hash.h +9 -1
  439. data/src/core/lib/support/spinlock.h +8 -1
  440. data/src/core/lib/support/{string.c → string.cc} +56 -55
  441. data/src/core/lib/support/string.h +21 -21
  442. data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
  443. data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
  444. data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
  445. data/src/core/lib/support/string_windows.h +8 -0
  446. data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
  447. data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
  448. data/src/core/lib/support/{sync.c → sync.cc} +22 -22
  449. data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
  450. data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
  451. data/src/core/lib/support/{thd.c → thd.cc} +0 -0
  452. data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
  453. data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
  454. data/src/core/lib/support/{time.c → time.cc} +0 -0
  455. data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
  456. data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
  457. data/src/core/lib/support/time_precise.h +9 -1
  458. data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
  459. data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
  460. data/src/core/lib/support/tmpfile.h +1 -1
  461. data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
  462. data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
  463. data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
  464. data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
  465. data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
  466. data/src/core/lib/surface/alarm_internal.h +10 -2
  467. data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
  468. data/src/core/lib/surface/api_trace.h +2 -2
  469. data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
  470. data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
  471. data/src/core/lib/surface/{call.c → call.cc} +379 -372
  472. data/src/core/lib/surface/call.h +37 -38
  473. data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
  474. data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
  475. data/src/core/lib/surface/call_test_only.h +5 -5
  476. data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
  477. data/src/core/lib/surface/channel.h +29 -21
  478. data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
  479. data/src/core/lib/surface/channel_init.h +6 -6
  480. data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
  481. data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
  482. data/src/core/lib/surface/channel_stack_type.h +9 -1
  483. data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
  484. data/src/core/lib/surface/completion_queue.h +29 -29
  485. data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
  486. data/src/core/lib/surface/completion_queue_factory.h +8 -0
  487. data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
  488. data/src/core/lib/surface/event_string.h +9 -1
  489. data/src/core/lib/surface/{init.c → init.cc} +16 -39
  490. data/src/core/lib/surface/init.h +8 -0
  491. data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
  492. data/src/core/lib/surface/lame_client.cc +38 -40
  493. data/src/core/lib/surface/lame_client.h +8 -0
  494. data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
  495. data/src/core/lib/surface/{server.c → server.cc} +340 -404
  496. data/src/core/lib/surface/server.h +22 -14
  497. data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
  498. data/src/core/lib/surface/validate_metadata.h +10 -2
  499. data/src/core/lib/surface/{version.c → version.cc} +2 -2
  500. data/src/core/lib/transport/bdp_estimator.cc +84 -0
  501. data/src/core/lib/transport/bdp_estimator.h +67 -42
  502. data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
  503. data/src/core/lib/transport/byte_stream.h +41 -33
  504. data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
  505. data/src/core/lib/transport/connectivity_state.h +29 -21
  506. data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
  507. data/src/core/lib/transport/error_utils.h +18 -6
  508. data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
  509. data/src/core/lib/transport/metadata.h +22 -20
  510. data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
  511. data/src/core/lib/transport/metadata_batch.h +46 -45
  512. data/src/core/lib/transport/pid_controller.cc +48 -0
  513. data/src/core/lib/transport/pid_controller.h +84 -32
  514. data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
  515. data/src/core/lib/transport/service_config.h +11 -2
  516. data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
  517. data/src/core/lib/transport/static_metadata.h +30 -23
  518. data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
  519. data/src/core/lib/transport/status_conversion.h +12 -2
  520. data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
  521. data/src/core/lib/transport/timeout_encoding.h +11 -2
  522. data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
  523. data/src/core/lib/transport/transport.h +78 -80
  524. data/src/core/lib/transport/transport_impl.h +27 -19
  525. data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
  526. data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
  527. data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
  528. data/src/core/tsi/fake_transport_security.h +5 -5
  529. data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
  530. data/src/core/tsi/gts_transport_security.h +11 -3
  531. data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
  532. data/src/core/tsi/ssl_transport_security.h +25 -25
  533. data/src/core/tsi/ssl_types.h +8 -0
  534. data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
  535. data/src/core/tsi/transport_security.h +55 -55
  536. data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
  537. data/src/core/tsi/transport_security_adapter.h +2 -2
  538. data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
  539. data/src/core/tsi/transport_security_grpc.h +19 -19
  540. data/src/core/tsi/transport_security_interface.h +41 -41
  541. data/src/ruby/ext/grpc/extconf.rb +4 -2
  542. data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
  543. data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
  544. data/src/ruby/ext/grpc/rb_call.c +41 -42
  545. data/src/ruby/ext/grpc/rb_call.h +6 -6
  546. data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
  547. data/src/ruby/ext/grpc/rb_channel.c +87 -87
  548. data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
  549. data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
  550. data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
  551. data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
  552. data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
  553. data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
  554. data/src/ruby/ext/grpc/rb_grpc.c +8 -8
  555. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
  556. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
  557. data/src/ruby/ext/grpc/rb_server.c +23 -23
  558. data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
  559. data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
  560. data/src/ruby/lib/grpc/version.rb +1 -1
  561. data/src/ruby/pb/grpc/health/checker.rb +14 -0
  562. data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
  563. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  564. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  565. metadata +302 -328
  566. data/src/core/ext/census/aggregation.h +0 -51
  567. data/src/core/ext/census/base_resources.c +0 -56
  568. data/src/core/ext/census/base_resources.h +0 -24
  569. data/src/core/ext/census/census_interface.h +0 -61
  570. data/src/core/ext/census/census_rpc_stats.h +0 -86
  571. data/src/core/ext/census/context.c +0 -496
  572. data/src/core/ext/census/gen/census.pb.c +0 -161
  573. data/src/core/ext/census/gen/census.pb.h +0 -280
  574. data/src/core/ext/census/gen/trace_context.pb.c +0 -39
  575. data/src/core/ext/census/gen/trace_context.pb.h +0 -78
  576. data/src/core/ext/census/grpc_filter.c +0 -196
  577. data/src/core/ext/census/grpc_plugin.c +0 -70
  578. data/src/core/ext/census/initialize.c +0 -51
  579. data/src/core/ext/census/intrusive_hash_map.c +0 -305
  580. data/src/core/ext/census/intrusive_hash_map.h +0 -152
  581. data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
  582. data/src/core/ext/census/mlog.c +0 -586
  583. data/src/core/ext/census/mlog.h +0 -80
  584. data/src/core/ext/census/operation.c +0 -48
  585. data/src/core/ext/census/placeholders.c +0 -49
  586. data/src/core/ext/census/resource.c +0 -303
  587. data/src/core/ext/census/resource.h +0 -48
  588. data/src/core/ext/census/rpc_metric_id.h +0 -36
  589. data/src/core/ext/census/trace_context.c +0 -71
  590. data/src/core/ext/census/trace_context.h +0 -56
  591. data/src/core/ext/census/trace_label.h +0 -46
  592. data/src/core/ext/census/trace_propagation.h +0 -48
  593. data/src/core/ext/census/trace_status.h +0 -30
  594. data/src/core/ext/census/trace_string.h +0 -35
  595. data/src/core/ext/census/tracing.c +0 -55
  596. data/src/core/ext/census/tracing.h +0 -109
  597. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
  598. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
  599. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
  600. data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
  601. data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
  602. data/src/core/lib/debug/trace.c +0 -146
  603. data/src/core/lib/iomgr/closure.c +0 -219
  604. data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
  605. data/src/core/lib/iomgr/ev_posix.c +0 -266
  606. data/src/core/lib/iomgr/exec_ctx.c +0 -113
  607. data/src/core/lib/iomgr/tcp_uv.c +0 -381
  608. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
  609. data/src/core/lib/security/transport/security_connector.c +0 -914
  610. data/src/core/lib/support/backoff.c +0 -72
  611. data/src/core/lib/support/backoff.h +0 -56
  612. data/src/core/lib/support/mpscq.c +0 -79
  613. data/src/core/lib/support/stack_lockfree.c +0 -137
  614. data/src/core/lib/support/stack_lockfree.h +0 -38
  615. data/src/core/lib/transport/bdp_estimator.c +0 -110
  616. data/src/core/lib/transport/pid_controller.c +0 -63
@@ -23,6 +23,10 @@
23
23
  #include "src/core/ext/transport/chttp2/transport/frame.h"
24
24
  #include "src/core/lib/iomgr/exec_ctx.h"
25
25
 
26
+ #ifdef __cplusplus
27
+ extern "C" {
28
+ #endif
29
+
26
30
  typedef struct {
27
31
  uint8_t byte;
28
32
  uint8_t is_ack;
@@ -31,14 +35,18 @@ typedef struct {
31
35
 
32
36
  grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes);
33
37
 
34
- grpc_error *grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser *parser,
38
+ grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
35
39
  uint32_t length, uint8_t flags);
36
- grpc_error *grpc_chttp2_ping_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
37
- grpc_chttp2_transport *t,
38
- grpc_chttp2_stream *s,
40
+ grpc_error* grpc_chttp2_ping_parser_parse(grpc_exec_ctx* exec_ctx, void* parser,
41
+ grpc_chttp2_transport* t,
42
+ grpc_chttp2_stream* s,
39
43
  grpc_slice slice, int is_last);
40
44
 
41
45
  /* Test-only function for disabling ping ack */
42
46
  void grpc_set_disable_ping_ack(bool disable_ping_ack);
43
47
 
48
+ #ifdef __cplusplus
49
+ }
50
+ #endif
51
+
44
52
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_PING_H */
@@ -27,11 +27,11 @@
27
27
  #include "src/core/lib/transport/http2_errors.h"
28
28
 
29
29
  grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
30
- grpc_transport_one_way_stats *stats) {
30
+ grpc_transport_one_way_stats* stats) {
31
31
  static const size_t frame_size = 13;
32
32
  grpc_slice slice = GRPC_SLICE_MALLOC(frame_size);
33
33
  stats->framing_bytes += frame_size;
34
- uint8_t *p = GRPC_SLICE_START_PTR(slice);
34
+ uint8_t* p = GRPC_SLICE_START_PTR(slice);
35
35
 
36
36
  // Frame size.
37
37
  *p++ = 0;
@@ -55,13 +55,13 @@ grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
55
55
  return slice;
56
56
  }
57
57
 
58
- grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
59
- grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags) {
58
+ grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
59
+ grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags) {
60
60
  if (length != 4) {
61
- char *msg;
61
+ char* msg;
62
62
  gpr_asprintf(&msg, "invalid rst_stream: length=%d, flags=%02x", length,
63
63
  flags);
64
- grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
64
+ grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
65
65
  gpr_free(msg);
66
66
  return err;
67
67
  }
@@ -69,15 +69,15 @@ grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
69
69
  return GRPC_ERROR_NONE;
70
70
  }
71
71
 
72
- grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
73
- void *parser,
74
- grpc_chttp2_transport *t,
75
- grpc_chttp2_stream *s,
72
+ grpc_error* grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx* exec_ctx,
73
+ void* parser,
74
+ grpc_chttp2_transport* t,
75
+ grpc_chttp2_stream* s,
76
76
  grpc_slice slice, int is_last) {
77
- uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
78
- uint8_t *const end = GRPC_SLICE_END_PTR(slice);
79
- uint8_t *cur = beg;
80
- grpc_chttp2_rst_stream_parser *p = (grpc_chttp2_rst_stream_parser *)parser;
77
+ uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
78
+ uint8_t* const end = GRPC_SLICE_END_PTR(slice);
79
+ uint8_t* cur = beg;
80
+ grpc_chttp2_rst_stream_parser* p = (grpc_chttp2_rst_stream_parser*)parser;
81
81
 
82
82
  while (p->byte != 4 && cur != end) {
83
83
  p->reason_bytes[p->byte] = *cur;
@@ -92,9 +92,9 @@ grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
92
92
  (((uint32_t)p->reason_bytes[1]) << 16) |
93
93
  (((uint32_t)p->reason_bytes[2]) << 8) |
94
94
  (((uint32_t)p->reason_bytes[3]));
95
- grpc_error *error = GRPC_ERROR_NONE;
95
+ grpc_error* error = GRPC_ERROR_NONE;
96
96
  if (reason != GRPC_HTTP2_NO_ERROR || s->metadata_buffer[1].size == 0) {
97
- char *message;
97
+ char* message;
98
98
  gpr_asprintf(&message, "Received RST_STREAM with error code %d", reason);
99
99
  error = grpc_error_set_int(
100
100
  grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("RST_STREAM"),
@@ -24,20 +24,28 @@
24
24
  #include "src/core/lib/iomgr/exec_ctx.h"
25
25
  #include "src/core/lib/transport/transport.h"
26
26
 
27
+ #ifdef __cplusplus
28
+ extern "C" {
29
+ #endif
30
+
27
31
  typedef struct {
28
32
  uint8_t byte;
29
33
  uint8_t reason_bytes[4];
30
34
  } grpc_chttp2_rst_stream_parser;
31
35
 
32
36
  grpc_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code,
33
- grpc_transport_one_way_stats *stats);
34
-
35
- grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
36
- grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags);
37
- grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
38
- void *parser,
39
- grpc_chttp2_transport *t,
40
- grpc_chttp2_stream *s,
37
+ grpc_transport_one_way_stats* stats);
38
+
39
+ grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
40
+ grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags);
41
+ grpc_error* grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx* exec_ctx,
42
+ void* parser,
43
+ grpc_chttp2_transport* t,
44
+ grpc_chttp2_stream* s,
41
45
  grpc_slice slice, int is_last);
42
46
 
47
+ #ifdef __cplusplus
48
+ }
49
+ #endif
50
+
43
51
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
@@ -31,7 +31,7 @@
31
31
  #include "src/core/lib/debug/trace.h"
32
32
  #include "src/core/lib/transport/http2_errors.h"
33
33
 
34
- static uint8_t *fill_header(uint8_t *out, uint32_t length, uint8_t flags) {
34
+ static uint8_t* fill_header(uint8_t* out, uint32_t length, uint8_t flags) {
35
35
  *out++ = (uint8_t)(length >> 16);
36
36
  *out++ = (uint8_t)(length >> 8);
37
37
  *out++ = (uint8_t)(length);
@@ -44,13 +44,13 @@ static uint8_t *fill_header(uint8_t *out, uint32_t length, uint8_t flags) {
44
44
  return out;
45
45
  }
46
46
 
47
- grpc_slice grpc_chttp2_settings_create(uint32_t *old_settings,
48
- const uint32_t *new_settings,
47
+ grpc_slice grpc_chttp2_settings_create(uint32_t* old_settings,
48
+ const uint32_t* new_settings,
49
49
  uint32_t force_mask, size_t count) {
50
50
  size_t i;
51
51
  uint32_t n = 0;
52
52
  grpc_slice output;
53
- uint8_t *p;
53
+ uint8_t* p;
54
54
 
55
55
  for (i = 0; i < count; i++) {
56
56
  n += (new_settings[i] != old_settings[i] || (force_mask & (1u << i)) != 0);
@@ -82,9 +82,9 @@ grpc_slice grpc_chttp2_settings_ack_create(void) {
82
82
  return output;
83
83
  }
84
84
 
85
- grpc_error *grpc_chttp2_settings_parser_begin_frame(
86
- grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags,
87
- uint32_t *settings) {
85
+ grpc_error* grpc_chttp2_settings_parser_begin_frame(
86
+ grpc_chttp2_settings_parser* parser, uint32_t length, uint8_t flags,
87
+ uint32_t* settings) {
88
88
  parser->target_settings = settings;
89
89
  memcpy(parser->incoming_settings, settings,
90
90
  GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
@@ -108,14 +108,14 @@ grpc_error *grpc_chttp2_settings_parser_begin_frame(
108
108
  }
109
109
  }
110
110
 
111
- grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
112
- grpc_chttp2_transport *t,
113
- grpc_chttp2_stream *s,
111
+ grpc_error* grpc_chttp2_settings_parser_parse(grpc_exec_ctx* exec_ctx, void* p,
112
+ grpc_chttp2_transport* t,
113
+ grpc_chttp2_stream* s,
114
114
  grpc_slice slice, int is_last) {
115
- grpc_chttp2_settings_parser *parser = (grpc_chttp2_settings_parser *)p;
116
- const uint8_t *cur = GRPC_SLICE_START_PTR(slice);
117
- const uint8_t *end = GRPC_SLICE_END_PTR(slice);
118
- char *msg;
115
+ grpc_chttp2_settings_parser* parser = (grpc_chttp2_settings_parser*)p;
116
+ const uint8_t* cur = GRPC_SLICE_START_PTR(slice);
117
+ const uint8_t* end = GRPC_SLICE_END_PTR(slice);
118
+ char* msg;
119
119
  grpc_chttp2_setting_id id;
120
120
 
121
121
  if (parser->is_ack) {
@@ -131,10 +131,10 @@ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
131
131
  memcpy(parser->target_settings, parser->incoming_settings,
132
132
  GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
133
133
  grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
134
- if (t->notify_on_receive_settings != NULL) {
134
+ if (t->notify_on_receive_settings != nullptr) {
135
135
  GRPC_CLOSURE_SCHED(exec_ctx, t->notify_on_receive_settings,
136
136
  GRPC_ERROR_NONE);
137
- t->notify_on_receive_settings = NULL;
137
+ t->notify_on_receive_settings = nullptr;
138
138
  }
139
139
  }
140
140
  return GRPC_ERROR_NONE;
@@ -185,7 +185,7 @@ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
185
185
  cur++;
186
186
 
187
187
  if (grpc_wire_id_to_setting_id(parser->id, &id)) {
188
- const grpc_chttp2_setting_parameters *sp =
188
+ const grpc_chttp2_setting_parameters* sp =
189
189
  &grpc_chttp2_settings_parameters[id];
190
190
  if (parser->value < sp->min_value || parser->value > sp->max_value) {
191
191
  switch (sp->invalid_value_behavior) {
@@ -200,29 +200,28 @@ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
200
200
  &t->qbuf);
201
201
  gpr_asprintf(&msg, "invalid value %u passed for %s",
202
202
  parser->value, sp->name);
203
- grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
203
+ grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
204
204
  gpr_free(msg);
205
205
  return err;
206
206
  }
207
207
  }
208
208
  if (id == GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE &&
209
209
  parser->incoming_settings[id] != parser->value) {
210
- t->flow_control.initial_window_update +=
210
+ t->initial_window_update +=
211
211
  (int64_t)parser->value - parser->incoming_settings[id];
212
- if (GRPC_TRACER_ON(grpc_http_trace) ||
213
- GRPC_TRACER_ON(grpc_flowctl_trace)) {
212
+ if (grpc_http_trace.enabled() || grpc_flowctl_trace.enabled()) {
214
213
  gpr_log(GPR_DEBUG, "%p[%s] adding %d for initial_window change",
215
214
  t, t->is_client ? "cli" : "svr",
216
- (int)t->flow_control.initial_window_update);
215
+ (int)t->initial_window_update);
217
216
  }
218
217
  }
219
218
  parser->incoming_settings[id] = parser->value;
220
- if (GRPC_TRACER_ON(grpc_http_trace)) {
219
+ if (grpc_http_trace.enabled()) {
221
220
  gpr_log(GPR_DEBUG, "CHTTP2:%s:%s: got setting %s = %d",
222
221
  t->is_client ? "CLI" : "SVR", t->peer_string, sp->name,
223
222
  parser->value);
224
223
  }
225
- } else if (GRPC_TRACER_ON(grpc_http_trace)) {
224
+ } else if (grpc_http_trace.enabled()) {
226
225
  gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
227
226
  parser->id, parser->value);
228
227
  }
@@ -25,6 +25,10 @@
25
25
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
26
26
  #include "src/core/lib/iomgr/exec_ctx.h"
27
27
 
28
+ #ifdef __cplusplus
29
+ extern "C" {
30
+ #endif
31
+
28
32
  typedef enum {
29
33
  GRPC_CHTTP2_SPS_ID0,
30
34
  GRPC_CHTTP2_SPS_ID1,
@@ -36,7 +40,7 @@ typedef enum {
36
40
 
37
41
  typedef struct {
38
42
  grpc_chttp2_settings_parse_state state;
39
- uint32_t *target_settings;
43
+ uint32_t* target_settings;
40
44
  uint8_t is_ack;
41
45
  uint16_t id;
42
46
  uint32_t value;
@@ -44,18 +48,22 @@ typedef struct {
44
48
  } grpc_chttp2_settings_parser;
45
49
 
46
50
  /* Create a settings frame by diffing old & new, and updating old to be new */
47
- grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *newval,
51
+ grpc_slice grpc_chttp2_settings_create(uint32_t* old, const uint32_t* newval,
48
52
  uint32_t force_mask, size_t count);
49
53
  /* Create an ack settings frame */
50
54
  grpc_slice grpc_chttp2_settings_ack_create(void);
51
55
 
52
- grpc_error *grpc_chttp2_settings_parser_begin_frame(
53
- grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags,
54
- uint32_t *settings);
55
- grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx,
56
- void *parser,
57
- grpc_chttp2_transport *t,
58
- grpc_chttp2_stream *s,
56
+ grpc_error* grpc_chttp2_settings_parser_begin_frame(
57
+ grpc_chttp2_settings_parser* parser, uint32_t length, uint8_t flags,
58
+ uint32_t* settings);
59
+ grpc_error* grpc_chttp2_settings_parser_parse(grpc_exec_ctx* exec_ctx,
60
+ void* parser,
61
+ grpc_chttp2_transport* t,
62
+ grpc_chttp2_stream* s,
59
63
  grpc_slice slice, int is_last);
60
64
 
65
+ #ifdef __cplusplus
66
+ }
67
+ #endif
68
+
61
69
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
@@ -24,11 +24,11 @@
24
24
  #include <grpc/support/string_util.h>
25
25
 
26
26
  grpc_slice grpc_chttp2_window_update_create(
27
- uint32_t id, uint32_t window_update, grpc_transport_one_way_stats *stats) {
27
+ uint32_t id, uint32_t window_update, grpc_transport_one_way_stats* stats) {
28
28
  static const size_t frame_size = 13;
29
29
  grpc_slice slice = GRPC_SLICE_MALLOC(frame_size);
30
30
  stats->header_bytes += frame_size;
31
- uint8_t *p = GRPC_SLICE_START_PTR(slice);
31
+ uint8_t* p = GRPC_SLICE_START_PTR(slice);
32
32
 
33
33
  GPR_ASSERT(window_update);
34
34
 
@@ -49,13 +49,13 @@ grpc_slice grpc_chttp2_window_update_create(
49
49
  return slice;
50
50
  }
51
51
 
52
- grpc_error *grpc_chttp2_window_update_parser_begin_frame(
53
- grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags) {
52
+ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
53
+ grpc_chttp2_window_update_parser* parser, uint32_t length, uint8_t flags) {
54
54
  if (flags || length != 4) {
55
- char *msg;
55
+ char* msg;
56
56
  gpr_asprintf(&msg, "invalid window update: length=%d, flags=%02x", length,
57
57
  flags);
58
- grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
58
+ grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
59
59
  gpr_free(msg);
60
60
  return err;
61
61
  }
@@ -64,14 +64,14 @@ grpc_error *grpc_chttp2_window_update_parser_begin_frame(
64
64
  return GRPC_ERROR_NONE;
65
65
  }
66
66
 
67
- grpc_error *grpc_chttp2_window_update_parser_parse(
68
- grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
69
- grpc_chttp2_stream *s, grpc_slice slice, int is_last) {
70
- uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
71
- uint8_t *const end = GRPC_SLICE_END_PTR(slice);
72
- uint8_t *cur = beg;
73
- grpc_chttp2_window_update_parser *p =
74
- (grpc_chttp2_window_update_parser *)parser;
67
+ grpc_error* grpc_chttp2_window_update_parser_parse(
68
+ grpc_exec_ctx* exec_ctx, void* parser, grpc_chttp2_transport* t,
69
+ grpc_chttp2_stream* s, grpc_slice slice, int is_last) {
70
+ uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
71
+ uint8_t* const end = GRPC_SLICE_END_PTR(slice);
72
+ uint8_t* cur = beg;
73
+ grpc_chttp2_window_update_parser* p =
74
+ (grpc_chttp2_window_update_parser*)parser;
75
75
 
76
76
  while (p->byte != 4 && cur != end) {
77
77
  p->amount |= ((uint32_t)*cur) << (8 * (3 - p->byte));
@@ -79,25 +79,24 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
79
79
  p->byte++;
80
80
  }
81
81
 
82
- if (s != NULL) {
82
+ if (s != nullptr) {
83
83
  s->stats.incoming.framing_bytes += (uint32_t)(end - cur);
84
84
  }
85
85
 
86
86
  if (p->byte == 4) {
87
87
  uint32_t received_update = p->amount;
88
88
  if (received_update == 0 || (received_update & 0x80000000u)) {
89
- char *msg;
89
+ char* msg;
90
90
  gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount);
91
- grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
91
+ grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
92
92
  gpr_free(msg);
93
93
  return err;
94
94
  }
95
95
  GPR_ASSERT(is_last);
96
96
 
97
97
  if (t->incoming_stream_id != 0) {
98
- if (s != NULL) {
99
- grpc_chttp2_flowctl_recv_stream_update(
100
- &t->flow_control, &s->flow_control, received_update);
98
+ if (s != nullptr) {
99
+ s->flow_control->RecvUpdate(received_update);
101
100
  if (grpc_chttp2_list_remove_stalled_by_stream(t, s)) {
102
101
  grpc_chttp2_mark_stream_writable(exec_ctx, t, s);
103
102
  grpc_chttp2_initiate_write(
@@ -106,10 +105,9 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
106
105
  }
107
106
  }
108
107
  } else {
109
- bool was_zero = t->flow_control.remote_window <= 0;
110
- grpc_chttp2_flowctl_recv_transport_update(&t->flow_control,
111
- received_update);
112
- bool is_zero = t->flow_control.remote_window <= 0;
108
+ bool was_zero = t->flow_control->remote_window() <= 0;
109
+ t->flow_control->RecvUpdate(received_update);
110
+ bool is_zero = t->flow_control->remote_window() <= 0;
113
111
  if (was_zero && !is_zero) {
114
112
  grpc_chttp2_initiate_write(
115
113
  exec_ctx, t,
@@ -24,6 +24,10 @@
24
24
  #include "src/core/lib/iomgr/exec_ctx.h"
25
25
  #include "src/core/lib/transport/transport.h"
26
26
 
27
+ #ifdef __cplusplus
28
+ extern "C" {
29
+ #endif
30
+
27
31
  typedef struct {
28
32
  uint8_t byte;
29
33
  uint8_t is_connection_update;
@@ -31,12 +35,16 @@ typedef struct {
31
35
  } grpc_chttp2_window_update_parser;
32
36
 
33
37
  grpc_slice grpc_chttp2_window_update_create(
34
- uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats *stats);
38
+ uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats* stats);
39
+
40
+ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
41
+ grpc_chttp2_window_update_parser* parser, uint32_t length, uint8_t flags);
42
+ grpc_error* grpc_chttp2_window_update_parser_parse(
43
+ grpc_exec_ctx* exec_ctx, void* parser, grpc_chttp2_transport* t,
44
+ grpc_chttp2_stream* s, grpc_slice slice, int is_last);
35
45
 
36
- grpc_error *grpc_chttp2_window_update_parser_begin_frame(
37
- grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags);
38
- grpc_error *grpc_chttp2_window_update_parser_parse(
39
- grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
40
- grpc_chttp2_stream *s, grpc_slice slice, int is_last);
46
+ #ifdef __cplusplus
47
+ }
48
+ #endif
41
49
 
42
50
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */
@@ -51,14 +51,12 @@
51
51
  /* don't consider adding anything bigger than this to the hpack table */
52
52
  #define MAX_DECODER_SPACE_USAGE 512
53
53
 
54
- static grpc_slice_refcount terminal_slice_refcount = {NULL, NULL};
54
+ static grpc_slice_refcount terminal_slice_refcount = {nullptr, nullptr};
55
55
  static const grpc_slice terminal_slice = {
56
56
  &terminal_slice_refcount, /* refcount */
57
- {{0, 0}} /* data.refcounted */
57
+ {{nullptr, 0}} /* data.refcounted */
58
58
  };
59
59
 
60
- extern grpc_tracer_flag grpc_http_trace;
61
-
62
60
  typedef struct {
63
61
  int is_first_frame;
64
62
  /* number of bytes in 'output' when we started the frame - used to calculate
@@ -70,15 +68,15 @@ typedef struct {
70
68
  uint8_t seen_regular_header;
71
69
  /* output stream id */
72
70
  uint32_t stream_id;
73
- grpc_slice_buffer *output;
74
- grpc_transport_one_way_stats *stats;
71
+ grpc_slice_buffer* output;
72
+ grpc_transport_one_way_stats* stats;
75
73
  /* maximum size of a frame */
76
74
  size_t max_frame_size;
77
75
  bool use_true_binary_metadata;
78
76
  } framer_state;
79
77
 
80
78
  /* fills p (which is expected to be 9 bytes long) with a data frame header */
81
- static void fill_header(uint8_t *p, uint8_t type, uint32_t id, size_t len,
79
+ static void fill_header(uint8_t* p, uint8_t type, uint32_t id, size_t len,
82
80
  uint8_t flags) {
83
81
  GPR_ASSERT(len < 16777316);
84
82
  *p++ = (uint8_t)(len >> 16);
@@ -93,7 +91,7 @@ static void fill_header(uint8_t *p, uint8_t type, uint32_t id, size_t len,
93
91
  }
94
92
 
95
93
  /* finish a frame - fill in the previously reserved header */
96
- static void finish_frame(framer_state *st, int is_header_boundary,
94
+ static void finish_frame(framer_state* st, int is_header_boundary,
97
95
  int is_last_in_stream) {
98
96
  uint8_t type = 0xff;
99
97
  type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
@@ -109,7 +107,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
109
107
 
110
108
  /* begin a new frame: reserve off header space, remember how many bytes we'd
111
109
  output before beginning */
112
- static void begin_frame(framer_state *st) {
110
+ static void begin_frame(framer_state* st) {
113
111
  st->header_idx =
114
112
  grpc_slice_buffer_add_indexed(st->output, GRPC_SLICE_MALLOC(9));
115
113
  st->output_length_at_start_of_frame = st->output->length;
@@ -118,7 +116,7 @@ static void begin_frame(framer_state *st) {
118
116
  /* make sure that the current frame is of the type desired, and has sufficient
119
117
  space to add at least about_to_add bytes -- finishes the current frame if
120
118
  needed */
121
- static void ensure_space(framer_state *st, size_t need_bytes) {
119
+ static void ensure_space(framer_state* st, size_t need_bytes) {
122
120
  if (st->output->length - st->output_length_at_start_of_frame + need_bytes <=
123
121
  st->max_frame_size) {
124
122
  return;
@@ -128,7 +126,7 @@ static void ensure_space(framer_state *st, size_t need_bytes) {
128
126
  }
129
127
 
130
128
  /* increment a filter count, halve all counts if one element reaches max */
131
- static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
129
+ static void inc_filter(uint8_t idx, uint32_t* sum, uint8_t* elems) {
132
130
  elems[idx]++;
133
131
  if (elems[idx] < 255) {
134
132
  (*sum)++;
@@ -142,7 +140,7 @@ static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
142
140
  }
143
141
  }
144
142
 
145
- static void add_header_data(framer_state *st, grpc_slice slice) {
143
+ static void add_header_data(framer_state* st, grpc_slice slice) {
146
144
  size_t len = GRPC_SLICE_LENGTH(slice);
147
145
  size_t remaining;
148
146
  if (len == 0) return;
@@ -160,13 +158,13 @@ static void add_header_data(framer_state *st, grpc_slice slice) {
160
158
  }
161
159
  }
162
160
 
163
- static uint8_t *add_tiny_header_data(framer_state *st, size_t len) {
161
+ static uint8_t* add_tiny_header_data(framer_state* st, size_t len) {
164
162
  ensure_space(st, len);
165
163
  st->stats->header_bytes += len;
166
164
  return grpc_slice_buffer_tiny_add(st->output, len);
167
165
  }
168
166
 
169
- static void evict_entry(grpc_chttp2_hpack_compressor *c) {
167
+ static void evict_entry(grpc_chttp2_hpack_compressor* c) {
170
168
  c->tail_remote_index++;
171
169
  GPR_ASSERT(c->tail_remote_index > 0);
172
170
  GPR_ASSERT(c->table_size >=
@@ -178,24 +176,19 @@ static void evict_entry(grpc_chttp2_hpack_compressor *c) {
178
176
  c->table_elems--;
179
177
  }
180
178
 
181
- /* add an element to the decoder table */
182
- static void add_elem(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
183
- grpc_mdelem elem) {
184
- GPR_ASSERT(GRPC_MDELEM_IS_INTERNED(elem));
185
-
186
- uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
187
- uint32_t value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
188
- uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
179
+ // Reserve space in table for the new element, evict entries if needed.
180
+ // Return the new index of the element. Return 0 to indicate not adding to
181
+ // table.
182
+ static uint32_t prepare_space_for_new_elem(grpc_chttp2_hpack_compressor* c,
183
+ size_t elem_size) {
189
184
  uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
190
- size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem);
191
-
192
185
  GPR_ASSERT(elem_size < 65536);
193
186
 
194
187
  if (elem_size > c->max_table_size) {
195
188
  while (c->table_size > 0) {
196
189
  evict_entry(c);
197
190
  }
198
- return;
191
+ return 0;
199
192
  }
200
193
 
201
194
  /* Reserve space for this element in the remote table: if this overflows
@@ -209,37 +202,26 @@ static void add_elem(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
209
202
  c->table_size = (uint16_t)(c->table_size + elem_size);
210
203
  c->table_elems++;
211
204
 
212
- /* Store this element into {entries,indices}_elem */
213
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem)) {
214
- /* already there: update with new index */
215
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
216
- } else if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)],
217
- elem)) {
218
- /* already there (cuckoo): update with new index */
219
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
220
- } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_2(elem_hash)])) {
221
- /* not there, but a free element: add */
222
- c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
223
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
224
- } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_3(elem_hash)])) {
225
- /* not there (cuckoo), but a free element: add */
226
- c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
227
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
228
- } else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
229
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
230
- /* not there: replace oldest */
231
- GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
232
- c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
233
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
234
- } else {
235
- /* not there: replace oldest */
236
- GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
237
- c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
238
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
205
+ return new_index;
206
+ }
207
+
208
+ /* dummy function */
209
+ static void add_nothing(grpc_exec_ctx* exec_ctx,
210
+ grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
211
+ size_t elem_size) {}
212
+
213
+ // Add a key to the dynamic table. Both key and value will be added to table at
214
+ // the decoder.
215
+ static void add_key_with_index(grpc_exec_ctx* exec_ctx,
216
+ grpc_chttp2_hpack_compressor* c,
217
+ grpc_mdelem elem, uint32_t new_index) {
218
+ if (new_index == 0) {
219
+ return;
239
220
  }
240
221
 
241
- /* do exactly the same for the key (so we can find by that again too) */
222
+ uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
242
223
 
224
+ /* Store the key into {entries,indices}_keys */
243
225
  if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_2(key_hash)],
244
226
  GRPC_MDKEY(elem))) {
245
227
  c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
@@ -272,9 +254,66 @@ static void add_elem(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
272
254
  }
273
255
  }
274
256
 
275
- static void emit_indexed(grpc_exec_ctx *exec_ctx,
276
- grpc_chttp2_hpack_compressor *c, uint32_t elem_index,
277
- framer_state *st) {
257
+ /* add an element to the decoder table */
258
+ static void add_elem_with_index(grpc_exec_ctx* exec_ctx,
259
+ grpc_chttp2_hpack_compressor* c,
260
+ grpc_mdelem elem, uint32_t new_index) {
261
+ if (new_index == 0) {
262
+ return;
263
+ }
264
+ GPR_ASSERT(GRPC_MDELEM_IS_INTERNED(elem));
265
+
266
+ uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
267
+ uint32_t value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
268
+ uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
269
+
270
+ /* Store this element into {entries,indices}_elem */
271
+ if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem)) {
272
+ /* already there: update with new index */
273
+ c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
274
+ } else if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)],
275
+ elem)) {
276
+ /* already there (cuckoo): update with new index */
277
+ c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
278
+ } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_2(elem_hash)])) {
279
+ /* not there, but a free element: add */
280
+ c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
281
+ c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
282
+ } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_3(elem_hash)])) {
283
+ /* not there (cuckoo), but a free element: add */
284
+ c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
285
+ c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
286
+ } else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
287
+ c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
288
+ /* not there: replace oldest */
289
+ GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
290
+ c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
291
+ c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
292
+ } else {
293
+ /* not there: replace oldest */
294
+ GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
295
+ c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
296
+ c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
297
+ }
298
+
299
+ add_key_with_index(exec_ctx, c, elem, new_index);
300
+ }
301
+
302
+ static void add_elem(grpc_exec_ctx* exec_ctx, grpc_chttp2_hpack_compressor* c,
303
+ grpc_mdelem elem, size_t elem_size) {
304
+ uint32_t new_index = prepare_space_for_new_elem(c, elem_size);
305
+ add_elem_with_index(exec_ctx, c, elem, new_index);
306
+ }
307
+
308
+ static void add_key(grpc_exec_ctx* exec_ctx, grpc_chttp2_hpack_compressor* c,
309
+ grpc_mdelem elem, size_t elem_size) {
310
+ uint32_t new_index = prepare_space_for_new_elem(c, elem_size);
311
+ add_key_with_index(exec_ctx, c, elem, new_index);
312
+ }
313
+
314
+ static void emit_indexed(grpc_exec_ctx* exec_ctx,
315
+ grpc_chttp2_hpack_compressor* c, uint32_t elem_index,
316
+ framer_state* st) {
278
317
  GRPC_STATS_INC_HPACK_SEND_INDEXED(exec_ctx);
279
318
  uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(elem_index, 1);
280
319
  GRPC_CHTTP2_WRITE_VARINT(elem_index, 1, 0x80, add_tiny_header_data(st, len),
@@ -287,7 +326,7 @@ typedef struct {
287
326
  bool insert_null_before_wire_value;
288
327
  } wire_value;
289
328
 
290
- static wire_value get_wire_value(grpc_exec_ctx *exec_ctx, grpc_mdelem elem,
329
+ static wire_value get_wire_value(grpc_exec_ctx* exec_ctx, grpc_mdelem elem,
291
330
  bool true_binary_enabled) {
292
331
  wire_value wire_val;
293
332
  if (grpc_is_binary_header(GRPC_MDKEY(elem))) {
@@ -318,15 +357,15 @@ static size_t wire_value_length(wire_value v) {
318
357
  return GPR_SLICE_LENGTH(v.data) + v.insert_null_before_wire_value;
319
358
  }
320
359
 
321
- static void add_wire_value(framer_state *st, wire_value v) {
360
+ static void add_wire_value(framer_state* st, wire_value v) {
322
361
  if (v.insert_null_before_wire_value) *add_tiny_header_data(st, 1) = 0;
323
362
  add_header_data(st, v.data);
324
363
  }
325
364
 
326
- static void emit_lithdr_incidx(grpc_exec_ctx *exec_ctx,
327
- grpc_chttp2_hpack_compressor *c,
365
+ static void emit_lithdr_incidx(grpc_exec_ctx* exec_ctx,
366
+ grpc_chttp2_hpack_compressor* c,
328
367
  uint32_t key_index, grpc_mdelem elem,
329
- framer_state *st) {
368
+ framer_state* st) {
330
369
  GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX(exec_ctx);
331
370
  uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
332
371
  wire_value value =
@@ -342,10 +381,10 @@ static void emit_lithdr_incidx(grpc_exec_ctx *exec_ctx,
342
381
  add_wire_value(st, value);
343
382
  }
344
383
 
345
- static void emit_lithdr_noidx(grpc_exec_ctx *exec_ctx,
346
- grpc_chttp2_hpack_compressor *c,
384
+ static void emit_lithdr_noidx(grpc_exec_ctx* exec_ctx,
385
+ grpc_chttp2_hpack_compressor* c,
347
386
  uint32_t key_index, grpc_mdelem elem,
348
- framer_state *st) {
387
+ framer_state* st) {
349
388
  GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX(exec_ctx);
350
389
  uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
351
390
  wire_value value =
@@ -361,9 +400,11 @@ static void emit_lithdr_noidx(grpc_exec_ctx *exec_ctx,
361
400
  add_wire_value(st, value);
362
401
  }
363
402
 
364
- static void emit_lithdr_incidx_v(grpc_exec_ctx *exec_ctx,
365
- grpc_chttp2_hpack_compressor *c,
366
- grpc_mdelem elem, framer_state *st) {
403
+ static void emit_lithdr_incidx_v(grpc_exec_ctx* exec_ctx,
404
+ grpc_chttp2_hpack_compressor* c,
405
+ uint32_t unused_index, grpc_mdelem elem,
406
+ framer_state* st) {
407
+ GPR_ASSERT(unused_index == 0);
367
408
  GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX_V(exec_ctx);
368
409
  GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED(exec_ctx);
369
410
  uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(GRPC_MDKEY(elem));
@@ -383,9 +424,11 @@ static void emit_lithdr_incidx_v(grpc_exec_ctx *exec_ctx,
383
424
  add_wire_value(st, value);
384
425
  }
385
426
 
386
- static void emit_lithdr_noidx_v(grpc_exec_ctx *exec_ctx,
387
- grpc_chttp2_hpack_compressor *c,
388
- grpc_mdelem elem, framer_state *st) {
427
+ static void emit_lithdr_noidx_v(grpc_exec_ctx* exec_ctx,
428
+ grpc_chttp2_hpack_compressor* c,
429
+ uint32_t unused_index, grpc_mdelem elem,
430
+ framer_state* st) {
431
+ GPR_ASSERT(unused_index == 0);
389
432
  GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX_V(exec_ctx);
390
433
  GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED(exec_ctx);
391
434
  uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(GRPC_MDKEY(elem));
@@ -405,22 +448,22 @@ static void emit_lithdr_noidx_v(grpc_exec_ctx *exec_ctx,
405
448
  add_wire_value(st, value);
406
449
  }
407
450
 
408
- static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor *c,
409
- framer_state *st) {
451
+ static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor* c,
452
+ framer_state* st) {
410
453
  uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(c->max_table_size, 3);
411
454
  GRPC_CHTTP2_WRITE_VARINT(c->max_table_size, 3, 0x20,
412
455
  add_tiny_header_data(st, len), len);
413
456
  c->advertise_table_size_change = 0;
414
457
  }
415
458
 
416
- static uint32_t dynidx(grpc_chttp2_hpack_compressor *c, uint32_t elem_index) {
459
+ static uint32_t dynidx(grpc_chttp2_hpack_compressor* c, uint32_t elem_index) {
417
460
  return 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY + c->tail_remote_index +
418
461
  c->table_elems - elem_index;
419
462
  }
420
463
 
421
464
  /* encode an mdelem */
422
- static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
423
- grpc_mdelem elem, framer_state *st) {
465
+ static void hpack_enc(grpc_exec_ctx* exec_ctx, grpc_chttp2_hpack_compressor* c,
466
+ grpc_mdelem elem, framer_state* st) {
424
467
  GPR_ASSERT(GRPC_SLICE_LENGTH(GRPC_MDKEY(elem)) > 0);
425
468
  if (GRPC_SLICE_START_PTR(GRPC_MDKEY(elem))[0] != ':') { /* regular header */
426
469
  st->seen_regular_header = 1;
@@ -430,9 +473,14 @@ static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
430
473
  "Reserved header (colon-prefixed) happening after regular ones.");
431
474
  }
432
475
 
433
- if (GRPC_TRACER_ON(grpc_http_trace) && !GRPC_MDELEM_IS_INTERNED(elem)) {
434
- char *k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
435
- char *v = grpc_slice_to_c_string(GRPC_MDVALUE(elem));
476
+ if (grpc_http_trace.enabled()) {
477
+ char* k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
478
+ char* v = nullptr;
479
+ if (grpc_is_binary_header(GRPC_MDKEY(elem))) {
480
+ v = grpc_dump_slice(GRPC_MDVALUE(elem), GPR_DUMP_HEX);
481
+ } else {
482
+ v = grpc_slice_to_c_string(GRPC_MDVALUE(elem));
483
+ }
436
484
  gpr_log(
437
485
  GPR_DEBUG,
438
486
  "Encode: '%s: %s', elem_interned=%d [%d], k_interned=%d, v_interned=%d",
@@ -442,64 +490,69 @@ static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
442
490
  gpr_free(k);
443
491
  gpr_free(v);
444
492
  }
445
- if (!GRPC_MDELEM_IS_INTERNED(elem)) {
446
- emit_lithdr_noidx_v(exec_ctx, c, elem, st);
493
+
494
+ bool elem_interned = GRPC_MDELEM_IS_INTERNED(elem);
495
+ bool key_interned = elem_interned || grpc_slice_is_interned(GRPC_MDKEY(elem));
496
+
497
+ // Key is not interned, emit literals.
498
+ if (!key_interned) {
499
+ emit_lithdr_noidx_v(exec_ctx, c, 0, elem, st);
447
500
  return;
448
501
  }
449
502
 
450
- uint32_t key_hash;
451
- uint32_t value_hash;
452
- uint32_t elem_hash;
453
- size_t decoder_space_usage;
454
- uint32_t indices_key;
455
- int should_add_elem;
503
+ uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
504
+ uint32_t elem_hash = 0;
456
505
 
457
- key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
458
- value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
459
- elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
506
+ if (elem_interned) {
507
+ uint32_t value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
508
+ elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
460
509
 
461
- inc_filter(HASH_FRAGMENT_1(elem_hash), &c->filter_elems_sum, c->filter_elems);
510
+ inc_filter(HASH_FRAGMENT_1(elem_hash), &c->filter_elems_sum,
511
+ c->filter_elems);
462
512
 
463
- /* is this elem currently in the decoders table? */
513
+ /* is this elem currently in the decoders table? */
464
514
 
465
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem) &&
466
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] > c->tail_remote_index) {
467
- /* HIT: complete element (first cuckoo hash) */
468
- emit_indexed(exec_ctx, c,
469
- dynidx(c, c->indices_elems[HASH_FRAGMENT_2(elem_hash)]), st);
470
- return;
471
- }
515
+ if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem) &&
516
+ c->indices_elems[HASH_FRAGMENT_2(elem_hash)] > c->tail_remote_index) {
517
+ /* HIT: complete element (first cuckoo hash) */
518
+ emit_indexed(exec_ctx, c,
519
+ dynidx(c, c->indices_elems[HASH_FRAGMENT_2(elem_hash)]), st);
520
+ return;
521
+ }
472
522
 
473
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)], elem) &&
474
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] > c->tail_remote_index) {
475
- /* HIT: complete element (second cuckoo hash) */
476
- emit_indexed(exec_ctx, c,
477
- dynidx(c, c->indices_elems[HASH_FRAGMENT_3(elem_hash)]), st);
478
- return;
523
+ if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)], elem) &&
524
+ c->indices_elems[HASH_FRAGMENT_3(elem_hash)] > c->tail_remote_index) {
525
+ /* HIT: complete element (second cuckoo hash) */
526
+ emit_indexed(exec_ctx, c,
527
+ dynidx(c, c->indices_elems[HASH_FRAGMENT_3(elem_hash)]), st);
528
+ return;
529
+ }
479
530
  }
480
531
 
532
+ uint32_t indices_key;
533
+
481
534
  /* should this elem be in the table? */
482
- decoder_space_usage = grpc_mdelem_get_size_in_hpack_table(elem);
483
- should_add_elem = decoder_space_usage < MAX_DECODER_SPACE_USAGE &&
484
- c->filter_elems[HASH_FRAGMENT_1(elem_hash)] >=
485
- c->filter_elems_sum / ONE_ON_ADD_PROBABILITY;
535
+ size_t decoder_space_usage =
536
+ grpc_mdelem_get_size_in_hpack_table(elem, st->use_true_binary_metadata);
537
+ bool should_add_elem = elem_interned &&
538
+ decoder_space_usage < MAX_DECODER_SPACE_USAGE &&
539
+ c->filter_elems[HASH_FRAGMENT_1(elem_hash)] >=
540
+ c->filter_elems_sum / ONE_ON_ADD_PROBABILITY;
541
+ void (*maybe_add)(grpc_exec_ctx*, grpc_chttp2_hpack_compressor*, grpc_mdelem,
542
+ size_t) = should_add_elem ? add_elem : add_nothing;
543
+ void (*emit)(grpc_exec_ctx*, grpc_chttp2_hpack_compressor*, uint32_t,
544
+ grpc_mdelem, framer_state*) =
545
+ should_add_elem ? emit_lithdr_incidx : emit_lithdr_noidx;
486
546
 
487
547
  /* no hits for the elem... maybe there's a key? */
488
-
489
548
  indices_key = c->indices_keys[HASH_FRAGMENT_2(key_hash)];
490
549
  if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_2(key_hash)],
491
550
  GRPC_MDKEY(elem)) &&
492
551
  indices_key > c->tail_remote_index) {
493
552
  /* HIT: key (first cuckoo hash) */
494
- if (should_add_elem) {
495
- emit_lithdr_incidx(exec_ctx, c, dynidx(c, indices_key), elem, st);
496
- add_elem(exec_ctx, c, elem);
497
- return;
498
- } else {
499
- emit_lithdr_noidx(exec_ctx, c, dynidx(c, indices_key), elem, st);
500
- return;
501
- }
502
- GPR_UNREACHABLE_CODE(return );
553
+ emit(exec_ctx, c, dynidx(c, indices_key), elem, st);
554
+ maybe_add(exec_ctx, c, elem, decoder_space_usage);
555
+ return;
503
556
  }
504
557
 
505
558
  indices_key = c->indices_keys[HASH_FRAGMENT_3(key_hash)];
@@ -507,40 +560,32 @@ static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
507
560
  GRPC_MDKEY(elem)) &&
508
561
  indices_key > c->tail_remote_index) {
509
562
  /* HIT: key (first cuckoo hash) */
510
- if (should_add_elem) {
511
- emit_lithdr_incidx(exec_ctx, c, dynidx(c, indices_key), elem, st);
512
- add_elem(exec_ctx, c, elem);
513
- return;
514
- } else {
515
- emit_lithdr_noidx(exec_ctx, c, dynidx(c, indices_key), elem, st);
516
- return;
517
- }
518
- GPR_UNREACHABLE_CODE(return );
563
+ emit(exec_ctx, c, dynidx(c, indices_key), elem, st);
564
+ maybe_add(exec_ctx, c, elem, decoder_space_usage);
565
+ return;
519
566
  }
520
567
 
521
568
  /* no elem, key in the table... fall back to literal emission */
522
-
523
- if (should_add_elem) {
524
- emit_lithdr_incidx_v(exec_ctx, c, elem, st);
525
- add_elem(exec_ctx, c, elem);
526
- return;
527
- } else {
528
- emit_lithdr_noidx_v(exec_ctx, c, elem, st);
529
- return;
530
- }
531
- GPR_UNREACHABLE_CODE(return );
569
+ bool should_add_key =
570
+ !elem_interned && decoder_space_usage < MAX_DECODER_SPACE_USAGE;
571
+ emit = (should_add_elem || should_add_key) ? emit_lithdr_incidx_v
572
+ : emit_lithdr_noidx_v;
573
+ maybe_add =
574
+ should_add_elem ? add_elem : (should_add_key ? add_key : add_nothing);
575
+ emit(exec_ctx, c, 0, elem, st);
576
+ maybe_add(exec_ctx, c, elem, decoder_space_usage);
532
577
  }
533
578
 
534
579
  #define STRLEN_LIT(x) (sizeof(x) - 1)
535
580
  #define TIMEOUT_KEY "grpc-timeout"
536
581
 
537
- static void deadline_enc(grpc_exec_ctx *exec_ctx,
538
- grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
539
- framer_state *st) {
582
+ static void deadline_enc(grpc_exec_ctx* exec_ctx,
583
+ grpc_chttp2_hpack_compressor* c, grpc_millis deadline,
584
+ framer_state* st) {
540
585
  char timeout_str[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
541
586
  grpc_mdelem mdelem;
542
- grpc_http2_encode_timeout(
543
- gpr_time_sub(deadline, gpr_now(deadline.clock_type)), timeout_str);
587
+ grpc_http2_encode_timeout(deadline - grpc_exec_ctx_now(exec_ctx),
588
+ timeout_str);
544
589
  mdelem = grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_GRPC_TIMEOUT,
545
590
  grpc_slice_from_copied_string(timeout_str));
546
591
  hpack_enc(exec_ctx, c, mdelem, st);
@@ -549,14 +594,14 @@ static void deadline_enc(grpc_exec_ctx *exec_ctx,
549
594
 
550
595
  static uint32_t elems_for_bytes(uint32_t bytes) { return (bytes + 31) / 32; }
551
596
 
552
- void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
597
+ void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor* c) {
553
598
  memset(c, 0, sizeof(*c));
554
599
  c->max_table_size = GRPC_CHTTP2_HPACKC_INITIAL_TABLE_SIZE;
555
600
  c->cap_table_elems = elems_for_bytes(c->max_table_size);
556
601
  c->max_table_elems = c->cap_table_elems;
557
602
  c->max_usable_size = GRPC_CHTTP2_HPACKC_INITIAL_TABLE_SIZE;
558
603
  c->table_elem_size =
559
- (uint16_t *)gpr_malloc(sizeof(*c->table_elem_size) * c->cap_table_elems);
604
+ (uint16_t*)gpr_malloc(sizeof(*c->table_elem_size) * c->cap_table_elems);
560
605
  memset(c->table_elem_size, 0,
561
606
  sizeof(*c->table_elem_size) * c->cap_table_elems);
562
607
  for (size_t i = 0; i < GPR_ARRAY_SIZE(c->entries_keys); i++) {
@@ -564,8 +609,8 @@ void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
564
609
  }
565
610
  }
566
611
 
567
- void grpc_chttp2_hpack_compressor_destroy(grpc_exec_ctx *exec_ctx,
568
- grpc_chttp2_hpack_compressor *c) {
612
+ void grpc_chttp2_hpack_compressor_destroy(grpc_exec_ctx* exec_ctx,
613
+ grpc_chttp2_hpack_compressor* c) {
569
614
  int i;
570
615
  for (i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
571
616
  if (c->entries_keys[i].refcount != &terminal_slice_refcount) {
@@ -577,15 +622,15 @@ void grpc_chttp2_hpack_compressor_destroy(grpc_exec_ctx *exec_ctx,
577
622
  }
578
623
 
579
624
  void grpc_chttp2_hpack_compressor_set_max_usable_size(
580
- grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
625
+ grpc_chttp2_hpack_compressor* c, uint32_t max_table_size) {
581
626
  c->max_usable_size = max_table_size;
582
627
  grpc_chttp2_hpack_compressor_set_max_table_size(
583
628
  c, GPR_MIN(c->max_table_size, max_table_size));
584
629
  }
585
630
 
586
- static void rebuild_elems(grpc_chttp2_hpack_compressor *c, uint32_t new_cap) {
587
- uint16_t *table_elem_size =
588
- (uint16_t *)gpr_malloc(sizeof(*table_elem_size) * new_cap);
631
+ static void rebuild_elems(grpc_chttp2_hpack_compressor* c, uint32_t new_cap) {
632
+ uint16_t* table_elem_size =
633
+ (uint16_t*)gpr_malloc(sizeof(*table_elem_size) * new_cap);
589
634
  uint32_t i;
590
635
 
591
636
  memset(table_elem_size, 0, sizeof(*table_elem_size) * new_cap);
@@ -603,7 +648,7 @@ static void rebuild_elems(grpc_chttp2_hpack_compressor *c, uint32_t new_cap) {
603
648
  }
604
649
 
605
650
  void grpc_chttp2_hpack_compressor_set_max_table_size(
606
- grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
651
+ grpc_chttp2_hpack_compressor* c, uint32_t max_table_size) {
607
652
  max_table_size = GPR_MIN(max_table_size, c->max_usable_size);
608
653
  if (max_table_size == c->max_table_size) {
609
654
  return;
@@ -622,18 +667,18 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
622
667
  }
623
668
  }
624
669
  c->advertise_table_size_change = 1;
625
- if (GRPC_TRACER_ON(grpc_http_trace)) {
670
+ if (grpc_http_trace.enabled()) {
626
671
  gpr_log(GPR_DEBUG, "set max table size from encoder to %d", max_table_size);
627
672
  }
628
673
  }
629
674
 
630
- void grpc_chttp2_encode_header(grpc_exec_ctx *exec_ctx,
631
- grpc_chttp2_hpack_compressor *c,
632
- grpc_mdelem **extra_headers,
675
+ void grpc_chttp2_encode_header(grpc_exec_ctx* exec_ctx,
676
+ grpc_chttp2_hpack_compressor* c,
677
+ grpc_mdelem** extra_headers,
633
678
  size_t extra_headers_size,
634
- grpc_metadata_batch *metadata,
635
- const grpc_encode_header_options *options,
636
- grpc_slice_buffer *outbuf) {
679
+ grpc_metadata_batch* metadata,
680
+ const grpc_encode_header_options* options,
681
+ grpc_slice_buffer* outbuf) {
637
682
  GPR_ASSERT(options->stream_id != 0);
638
683
 
639
684
  framer_state st;
@@ -657,11 +702,11 @@ void grpc_chttp2_encode_header(grpc_exec_ctx *exec_ctx,
657
702
  hpack_enc(exec_ctx, c, *extra_headers[i], &st);
658
703
  }
659
704
  grpc_metadata_batch_assert_ok(metadata);
660
- for (grpc_linked_mdelem *l = metadata->list.head; l; l = l->next) {
705
+ for (grpc_linked_mdelem* l = metadata->list.head; l; l = l->next) {
661
706
  hpack_enc(exec_ctx, c, l->md, &st);
662
707
  }
663
- gpr_timespec deadline = metadata->deadline;
664
- if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) != 0) {
708
+ grpc_millis deadline = metadata->deadline;
709
+ if (deadline != GRPC_MILLIS_INF_FUTURE) {
665
710
  deadline_enc(exec_ctx, c, deadline, &st);
666
711
  }
667
712