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.
- checksums.yaml +4 -4
- data/Makefile +2106 -2116
- data/include/grpc/census.h +1 -432
- data/include/grpc/compression.h +9 -9
- data/include/grpc/grpc.h +115 -98
- data/include/grpc/grpc_cronet.h +3 -3
- data/include/grpc/grpc_posix.h +4 -4
- data/include/grpc/grpc_security.h +160 -88
- data/include/grpc/grpc_security_constants.h +7 -0
- data/include/grpc/impl/codegen/atm.h +9 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
- data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
- data/include/grpc/impl/codegen/atm_windows.h +23 -22
- data/include/grpc/impl/codegen/byte_buffer.h +14 -14
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +32 -28
- data/include/grpc/impl/codegen/port_platform.h +48 -0
- data/include/grpc/impl/codegen/slice.h +10 -10
- data/include/grpc/impl/codegen/sync_generic.h +9 -3
- data/include/grpc/slice.h +16 -17
- data/include/grpc/slice_buffer.h +22 -22
- data/include/grpc/support/alloc.h +11 -11
- data/include/grpc/support/avl.h +28 -20
- data/include/grpc/support/cmdline.h +13 -13
- data/include/grpc/support/histogram.h +17 -17
- data/include/grpc/support/host_port.h +2 -2
- data/include/grpc/support/log.h +9 -9
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/string_util.h +2 -2
- data/include/grpc/support/subprocess.h +5 -5
- data/include/grpc/support/sync.h +43 -27
- data/include/grpc/support/thd.h +6 -6
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
- data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
- data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
- data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
- data/src/core/ext/filters/client_channel/client_channel.h +16 -8
- data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
- data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
- data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
- data/src/core/ext/filters/client_channel/connector.h +29 -21
- data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
- data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
- data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
- data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
- data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
- data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
- data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
- data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
- data/src/core/ext/filters/client_channel/parse_address.h +14 -6
- data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
- data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
- data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
- data/src/core/ext/filters/client_channel/resolver.h +33 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
- 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
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
- data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
- data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
- data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
- data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
- data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
- data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
- data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
- data/src/core/ext/filters/client_channel/subchannel.h +68 -60
- data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
- data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
- data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
- data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
- data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
- data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
- data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
- data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
- data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
- data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
- data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
- data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
- data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
- data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
- data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
- data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
- data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
- data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
- data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
- data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
- data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
- data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
- data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
- data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
- data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
- data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
- data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
- data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
- data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
- data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
- data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
- data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
- data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
- data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
- data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
- data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
- data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
- data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
- data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
- data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
- data/src/core/lib/backoff/backoff.cc +80 -0
- data/src/core/lib/backoff/backoff.h +83 -0
- data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
- data/src/core/lib/channel/channel_args.h +45 -37
- data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
- data/src/core/lib/channel/channel_stack.h +76 -75
- data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
- data/src/core/lib/channel/channel_stack_builder.h +45 -45
- data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
- data/src/core/lib/channel/connected_channel.h +12 -4
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
- data/src/core/lib/channel/handshaker.h +9 -1
- data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
- data/src/core/lib/channel/handshaker_factory.h +18 -10
- data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
- data/src/core/lib/channel/handshaker_registry.h +8 -0
- data/src/core/lib/compression/algorithm_metadata.h +8 -0
- data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
- data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
- data/src/core/lib/compression/message_compress.h +8 -0
- data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
- data/src/core/lib/compression/stream_compression.h +27 -19
- data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
- data/src/core/lib/compression/stream_compression_gzip.h +8 -0
- data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
- data/src/core/lib/compression/stream_compression_identity.h +8 -0
- data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
- data/src/core/lib/debug/stats.h +17 -9
- data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
- data/src/core/lib/debug/stats_data.h +58 -19
- data/src/core/lib/debug/trace.cc +142 -0
- data/src/core/lib/debug/trace.h +74 -14
- data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
- data/src/core/lib/http/format_request.h +12 -4
- data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
- data/src/core/lib/http/httpcli.h +41 -33
- data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
- data/src/core/lib/http/{parser.c → parser.cc} +42 -42
- data/src/core/lib/http/parser.h +28 -20
- data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
- data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
- data/src/core/lib/iomgr/call_combiner.h +9 -1
- data/src/core/lib/iomgr/closure.h +220 -62
- data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
- data/src/core/lib/iomgr/combiner.h +16 -8
- data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
- data/src/core/lib/iomgr/endpoint.h +47 -32
- data/src/core/lib/iomgr/endpoint_pair.h +12 -4
- data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
- data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
- data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
- data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
- data/src/core/lib/iomgr/error.h +32 -27
- data/src/core/lib/iomgr/error_internal.h +11 -2
- data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
- data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
- data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
- data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
- data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
- data/src/core/lib/iomgr/ev_posix.cc +288 -0
- data/src/core/lib/iomgr/ev_posix.h +75 -67
- data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +177 -0
- data/src/core/lib/iomgr/exec_ctx.h +35 -13
- data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
- data/src/core/lib/iomgr/executor.h +12 -4
- data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
- data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
- data/src/core/lib/iomgr/gethostname.h +9 -1
- data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
- data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
- data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
- data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
- data/src/core/lib/iomgr/iocp_windows.h +17 -3
- data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
- data/src/core/lib/iomgr/iomgr.h +11 -3
- data/src/core/lib/iomgr/iomgr_internal.h +13 -5
- data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
- data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
- data/src/core/lib/iomgr/iomgr_uv.h +8 -0
- data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
- data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
- data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
- data/src/core/lib/iomgr/lockfree_event.h +30 -11
- data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
- data/src/core/lib/iomgr/network_status_tracker.h +2 -2
- data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
- data/src/core/lib/iomgr/polling_entity.h +21 -13
- data/src/core/lib/iomgr/pollset.h +17 -11
- data/src/core/lib/iomgr/pollset_set.h +23 -15
- data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
- data/src/core/lib/iomgr/pollset_uv.h +8 -0
- data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
- data/src/core/lib/iomgr/pollset_windows.h +17 -4
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.h +18 -10
- data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
- data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
- data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
- data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
- data/src/core/lib/iomgr/resource_quota.h +45 -37
- data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
- data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
- data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
- data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
- data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
- data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
- data/src/core/lib/iomgr/socket_mutator.h +11 -11
- data/src/core/lib/iomgr/socket_utils.h +9 -1
- data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
- data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
- data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
- data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
- data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
- data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
- data/src/core/lib/iomgr/socket_windows.h +26 -13
- data/src/core/lib/iomgr/tcp_client.h +14 -6
- data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
- data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
- data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
- data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
- data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
- data/src/core/lib/iomgr/tcp_posix.h +15 -7
- data/src/core/lib/iomgr/tcp_server.h +31 -23
- data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
- data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
- data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
- data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
- data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
- data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
- data/src/core/lib/iomgr/tcp_uv.cc +420 -0
- data/src/core/lib/iomgr/tcp_uv.h +18 -4
- data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
- data/src/core/lib/iomgr/tcp_windows.h +17 -4
- data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
- data/src/core/lib/iomgr/timer.h +16 -9
- data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
- data/src/core/lib/iomgr/timer_generic.h +4 -4
- data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
- data/src/core/lib/iomgr/timer_heap.h +16 -8
- data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
- data/src/core/lib/iomgr/timer_manager.h +8 -0
- data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
- data/src/core/lib/iomgr/timer_uv.h +2 -2
- data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
- data/src/core/lib/iomgr/udp_server.h +25 -17
- data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
- data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
- data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
- data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
- data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
- data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
- data/src/core/lib/json/{json.c → json.cc} +0 -0
- data/src/core/lib/json/json.h +8 -0
- data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
- data/src/core/lib/json/json_reader.h +26 -18
- data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
- data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
- data/src/core/lib/json/json_writer.h +23 -15
- data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
- data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
- data/src/core/lib/profiling/timers.h +6 -6
- data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
- data/src/core/lib/security/context/security_context.h +27 -29
- data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
- data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
- data/src/core/lib/security/credentials/credentials.h +83 -75
- data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
- data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
- data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
- data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
- data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
- data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
- data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
- data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
- data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
- data/src/core/lib/security/transport/auth_filters.h +16 -0
- data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
- data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
- data/src/core/lib/security/transport/lb_targets_info.h +11 -3
- data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
- data/src/core/lib/security/transport/secure_endpoint.h +13 -5
- data/src/core/lib/security/transport/security_connector.cc +1121 -0
- data/src/core/lib/security/transport/security_connector.h +97 -79
- data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
- data/src/core/lib/security/transport/security_handshaker.h +11 -3
- data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
- data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
- data/src/core/lib/security/transport/tsi_error.h +9 -1
- data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
- data/src/core/lib/security/util/json_util.h +12 -4
- data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
- data/src/core/lib/slice/b64.h +12 -4
- data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
- data/src/core/lib/slice/percent_encoding.h +11 -3
- data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
- data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
- data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
- data/src/core/lib/slice/slice_hash_table.h +19 -11
- data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
- data/src/core/lib/slice/slice_internal.h +17 -6
- data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/support/abstract.h +29 -0
- data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
- data/src/core/lib/support/{arena.c → arena.cc} +12 -12
- data/src/core/lib/support/arena.h +11 -3
- data/src/core/lib/support/{atm.c → atm.cc} +1 -1
- data/src/core/lib/support/{avl.c → avl.cc} +71 -70
- data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
- data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
- data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
- data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
- data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
- data/src/core/lib/support/env.h +3 -3
- data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
- data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
- data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
- data/src/core/lib/support/{fork.c → fork.cc} +2 -2
- data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
- data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
- data/src/core/lib/support/{log.c → log.cc} +8 -8
- data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
- data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
- data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
- data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
- data/src/core/lib/support/manual_constructor.h +211 -0
- data/src/core/lib/support/memory.h +41 -0
- data/src/core/lib/support/mpscq.cc +114 -0
- data/src/core/lib/support/mpscq.h +45 -7
- data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
- data/src/core/lib/support/murmur_hash.h +9 -1
- data/src/core/lib/support/spinlock.h +8 -1
- data/src/core/lib/support/{string.c → string.cc} +56 -55
- data/src/core/lib/support/string.h +21 -21
- data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
- data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
- data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
- data/src/core/lib/support/string_windows.h +8 -0
- data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
- data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
- data/src/core/lib/support/{sync.c → sync.cc} +22 -22
- data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
- data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
- data/src/core/lib/support/{thd.c → thd.cc} +0 -0
- data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
- data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
- data/src/core/lib/support/{time.c → time.cc} +0 -0
- data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
- data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
- data/src/core/lib/support/time_precise.h +9 -1
- data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
- data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
- data/src/core/lib/support/tmpfile.h +1 -1
- data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
- data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
- data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
- data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
- data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
- data/src/core/lib/surface/alarm_internal.h +10 -2
- data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
- data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
- data/src/core/lib/surface/{call.c → call.cc} +379 -372
- data/src/core/lib/surface/call.h +37 -38
- data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
- data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
- data/src/core/lib/surface/call_test_only.h +5 -5
- data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
- data/src/core/lib/surface/channel.h +29 -21
- data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
- data/src/core/lib/surface/channel_init.h +6 -6
- data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
- data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
- data/src/core/lib/surface/channel_stack_type.h +9 -1
- data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
- data/src/core/lib/surface/completion_queue.h +29 -29
- data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
- data/src/core/lib/surface/completion_queue_factory.h +8 -0
- data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
- data/src/core/lib/surface/event_string.h +9 -1
- data/src/core/lib/surface/{init.c → init.cc} +16 -39
- data/src/core/lib/surface/init.h +8 -0
- data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
- data/src/core/lib/surface/lame_client.cc +38 -40
- data/src/core/lib/surface/lame_client.h +8 -0
- data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
- data/src/core/lib/surface/{server.c → server.cc} +340 -404
- data/src/core/lib/surface/server.h +22 -14
- data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
- data/src/core/lib/surface/validate_metadata.h +10 -2
- data/src/core/lib/surface/{version.c → version.cc} +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +84 -0
- data/src/core/lib/transport/bdp_estimator.h +67 -42
- data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
- data/src/core/lib/transport/byte_stream.h +41 -33
- data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
- data/src/core/lib/transport/connectivity_state.h +29 -21
- data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
- data/src/core/lib/transport/error_utils.h +18 -6
- data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
- data/src/core/lib/transport/metadata.h +22 -20
- data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
- data/src/core/lib/transport/metadata_batch.h +46 -45
- data/src/core/lib/transport/pid_controller.cc +48 -0
- data/src/core/lib/transport/pid_controller.h +84 -32
- data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
- data/src/core/lib/transport/service_config.h +11 -2
- data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
- data/src/core/lib/transport/static_metadata.h +30 -23
- data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
- data/src/core/lib/transport/status_conversion.h +12 -2
- data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
- data/src/core/lib/transport/timeout_encoding.h +11 -2
- data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
- data/src/core/lib/transport/transport.h +78 -80
- data/src/core/lib/transport/transport_impl.h +27 -19
- data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
- data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
- data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
- data/src/core/tsi/fake_transport_security.h +5 -5
- data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
- data/src/core/tsi/gts_transport_security.h +11 -3
- data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
- data/src/core/tsi/ssl_transport_security.h +25 -25
- data/src/core/tsi/ssl_types.h +8 -0
- data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
- data/src/core/tsi/transport_security.h +55 -55
- data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
- data/src/core/tsi/transport_security_adapter.h +2 -2
- data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
- data/src/core/tsi/transport_security_grpc.h +19 -19
- data/src/core/tsi/transport_security_interface.h +41 -41
- data/src/ruby/ext/grpc/extconf.rb +4 -2
- data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
- data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
- data/src/ruby/ext/grpc/rb_call.c +41 -42
- data/src/ruby/ext/grpc/rb_call.h +6 -6
- data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
- data/src/ruby/ext/grpc/rb_channel.c +87 -87
- data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
- data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
- data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
- data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +8 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
- data/src/ruby/ext/grpc/rb_server.c +23 -23
- data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +14 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- metadata +302 -328
- data/src/core/ext/census/aggregation.h +0 -51
- data/src/core/ext/census/base_resources.c +0 -56
- data/src/core/ext/census/base_resources.h +0 -24
- data/src/core/ext/census/census_interface.h +0 -61
- data/src/core/ext/census/census_rpc_stats.h +0 -86
- data/src/core/ext/census/context.c +0 -496
- data/src/core/ext/census/gen/census.pb.c +0 -161
- data/src/core/ext/census/gen/census.pb.h +0 -280
- data/src/core/ext/census/gen/trace_context.pb.c +0 -39
- data/src/core/ext/census/gen/trace_context.pb.h +0 -78
- data/src/core/ext/census/grpc_filter.c +0 -196
- data/src/core/ext/census/grpc_plugin.c +0 -70
- data/src/core/ext/census/initialize.c +0 -51
- data/src/core/ext/census/intrusive_hash_map.c +0 -305
- data/src/core/ext/census/intrusive_hash_map.h +0 -152
- data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
- data/src/core/ext/census/mlog.c +0 -586
- data/src/core/ext/census/mlog.h +0 -80
- data/src/core/ext/census/operation.c +0 -48
- data/src/core/ext/census/placeholders.c +0 -49
- data/src/core/ext/census/resource.c +0 -303
- data/src/core/ext/census/resource.h +0 -48
- data/src/core/ext/census/rpc_metric_id.h +0 -36
- data/src/core/ext/census/trace_context.c +0 -71
- data/src/core/ext/census/trace_context.h +0 -56
- data/src/core/ext/census/trace_label.h +0 -46
- data/src/core/ext/census/trace_propagation.h +0 -48
- data/src/core/ext/census/trace_status.h +0 -30
- data/src/core/ext/census/trace_string.h +0 -35
- data/src/core/ext/census/tracing.c +0 -55
- data/src/core/ext/census/tracing.h +0 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
- data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
- data/src/core/lib/debug/trace.c +0 -146
- data/src/core/lib/iomgr/closure.c +0 -219
- data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
- data/src/core/lib/iomgr/ev_posix.c +0 -266
- data/src/core/lib/iomgr/exec_ctx.c +0 -113
- data/src/core/lib/iomgr/tcp_uv.c +0 -381
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
- data/src/core/lib/security/transport/security_connector.c +0 -914
- data/src/core/lib/support/backoff.c +0 -72
- data/src/core/lib/support/backoff.h +0 -56
- data/src/core/lib/support/mpscq.c +0 -79
- data/src/core/lib/support/stack_lockfree.c +0 -137
- data/src/core/lib/support/stack_lockfree.h +0 -38
- data/src/core/lib/transport/bdp_estimator.c +0 -110
- 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
|
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
|
37
|
-
grpc_chttp2_transport
|
38
|
-
grpc_chttp2_stream
|
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
|
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
|
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
|
59
|
-
grpc_chttp2_rst_stream_parser
|
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
|
61
|
+
char* msg;
|
62
62
|
gpr_asprintf(&msg, "invalid rst_stream: length=%d, flags=%02x", length,
|
63
63
|
flags);
|
64
|
-
grpc_error
|
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
|
73
|
-
void
|
74
|
-
grpc_chttp2_transport
|
75
|
-
grpc_chttp2_stream
|
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
|
78
|
-
uint8_t
|
79
|
-
uint8_t
|
80
|
-
grpc_chttp2_rst_stream_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
|
95
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
96
96
|
if (reason != GRPC_HTTP2_NO_ERROR || s->metadata_buffer[1].size == 0) {
|
97
|
-
char
|
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
|
34
|
-
|
35
|
-
grpc_error
|
36
|
-
grpc_chttp2_rst_stream_parser
|
37
|
-
grpc_error
|
38
|
-
void
|
39
|
-
grpc_chttp2_transport
|
40
|
-
grpc_chttp2_stream
|
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
|
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
|
48
|
-
const uint32_t
|
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
|
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
|
86
|
-
grpc_chttp2_settings_parser
|
87
|
-
uint32_t
|
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
|
112
|
-
grpc_chttp2_transport
|
113
|
-
grpc_chttp2_stream
|
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
|
116
|
-
const uint8_t
|
117
|
-
const uint8_t
|
118
|
-
char
|
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 !=
|
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 =
|
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
|
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
|
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->
|
210
|
+
t->initial_window_update +=
|
211
211
|
(int64_t)parser->value - parser->incoming_settings[id];
|
212
|
-
if (
|
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->
|
215
|
+
(int)t->initial_window_update);
|
217
216
|
}
|
218
217
|
}
|
219
218
|
parser->incoming_settings[id] = parser->value;
|
220
|
-
if (
|
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 (
|
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
|
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
|
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
|
53
|
-
grpc_chttp2_settings_parser
|
54
|
-
uint32_t
|
55
|
-
grpc_error
|
56
|
-
void
|
57
|
-
grpc_chttp2_transport
|
58
|
-
grpc_chttp2_stream
|
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 */
|
data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc}
RENAMED
@@ -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
|
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
|
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
|
53
|
-
grpc_chttp2_window_update_parser
|
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
|
55
|
+
char* msg;
|
56
56
|
gpr_asprintf(&msg, "invalid window update: length=%d, flags=%02x", length,
|
57
57
|
flags);
|
58
|
-
grpc_error
|
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
|
68
|
-
grpc_exec_ctx
|
69
|
-
grpc_chttp2_stream
|
70
|
-
uint8_t
|
71
|
-
uint8_t
|
72
|
-
uint8_t
|
73
|
-
grpc_chttp2_window_update_parser
|
74
|
-
(grpc_chttp2_window_update_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 !=
|
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
|
89
|
+
char* msg;
|
90
90
|
gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount);
|
91
|
-
grpc_error
|
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 !=
|
99
|
-
|
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
|
110
|
-
|
111
|
-
|
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
|
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
|
-
|
37
|
-
|
38
|
-
|
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 = {
|
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
|
-
{{
|
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
|
74
|
-
grpc_transport_one_way_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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
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
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
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
|
-
|
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
|
-
|
276
|
-
|
277
|
-
|
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
|
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
|
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
|
327
|
-
grpc_chttp2_hpack_compressor
|
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
|
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
|
346
|
-
grpc_chttp2_hpack_compressor
|
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
|
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
|
365
|
-
grpc_chttp2_hpack_compressor
|
366
|
-
grpc_mdelem elem,
|
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
|
387
|
-
grpc_chttp2_hpack_compressor
|
388
|
-
grpc_mdelem elem,
|
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
|
409
|
-
framer_state
|
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
|
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
|
423
|
-
grpc_mdelem elem, framer_state
|
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 (
|
434
|
-
char
|
435
|
-
char
|
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
|
-
|
446
|
-
|
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
|
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
|
-
|
458
|
-
|
459
|
-
|
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
|
-
|
510
|
+
inc_filter(HASH_FRAGMENT_1(elem_hash), &c->filter_elems_sum,
|
511
|
+
c->filter_elems);
|
462
512
|
|
463
|
-
|
513
|
+
/* is this elem currently in the decoders table? */
|
464
514
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
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
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
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 =
|
483
|
-
|
484
|
-
|
485
|
-
|
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
|
-
|
495
|
-
|
496
|
-
|
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
|
-
|
511
|
-
|
512
|
-
|
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
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
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
|
538
|
-
grpc_chttp2_hpack_compressor
|
539
|
-
framer_state
|
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
|
-
|
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
|
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
|
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
|
568
|
-
grpc_chttp2_hpack_compressor
|
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
|
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
|
587
|
-
uint16_t
|
588
|
-
(uint16_t
|
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
|
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 (
|
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
|
631
|
-
grpc_chttp2_hpack_compressor
|
632
|
-
grpc_mdelem
|
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
|
635
|
-
const grpc_encode_header_options
|
636
|
-
grpc_slice_buffer
|
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
|
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
|
-
|
664
|
-
if (
|
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
|
|