grpc 0.11.0 → 0.12.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 +29456 -0
- data/Rakefile +13 -8
- data/etc/roots.pem +5114 -0
- data/include/grpc/byte_buffer.h +120 -0
- data/include/grpc/byte_buffer_reader.h +58 -0
- data/include/grpc/census.h +488 -0
- data/include/grpc/compression.h +106 -0
- data/include/grpc/grpc.h +732 -0
- data/include/grpc/grpc_security.h +374 -0
- data/include/grpc/grpc_zookeeper.h +59 -0
- data/include/grpc/status.h +163 -0
- data/include/grpc/support/alloc.h +72 -0
- data/include/grpc/support/atm.h +92 -0
- data/include/grpc/support/atm_gcc_atomic.h +72 -0
- data/include/grpc/support/atm_gcc_sync.h +87 -0
- data/include/grpc/support/atm_win32.h +125 -0
- data/include/grpc/support/avl.h +91 -0
- data/include/grpc/support/cmdline.h +101 -0
- data/include/grpc/support/cpu.h +57 -0
- data/include/grpc/support/histogram.h +76 -0
- data/include/grpc/support/host_port.h +64 -0
- data/include/grpc/support/log.h +108 -0
- data/include/grpc/support/log_win32.h +51 -0
- data/include/grpc/support/port_platform.h +356 -0
- data/include/grpc/support/slice.h +182 -0
- data/include/grpc/support/slice_buffer.h +102 -0
- data/include/grpc/support/string_util.h +61 -0
- data/include/grpc/support/subprocess.h +57 -0
- data/include/grpc/support/sync.h +315 -0
- data/include/grpc/support/sync_generic.h +55 -0
- data/include/grpc/support/sync_posix.h +47 -0
- data/include/grpc/support/sync_win32.h +49 -0
- data/include/grpc/support/thd.h +91 -0
- data/include/grpc/support/time.h +128 -0
- data/include/grpc/support/tls.h +77 -0
- data/include/grpc/support/tls_gcc.h +56 -0
- data/include/grpc/support/tls_msvc.h +56 -0
- data/include/grpc/support/tls_pthread.h +60 -0
- data/include/grpc/support/useful.h +75 -0
- data/src/core/census/aggregation.h +66 -0
- data/src/core/census/context.c +46 -0
- data/src/core/census/context.h +47 -0
- data/src/core/census/grpc_context.c +53 -0
- data/src/core/census/grpc_filter.c +184 -0
- data/src/core/census/grpc_filter.h +44 -0
- data/src/core/census/initialize.c +57 -0
- data/src/core/census/operation.c +63 -0
- data/src/core/census/rpc_metric_id.h +51 -0
- data/src/core/census/tracing.c +45 -0
- data/src/core/channel/channel_args.c +209 -0
- data/src/core/channel/channel_args.h +88 -0
- data/src/core/channel/channel_stack.c +262 -0
- data/src/core/channel/channel_stack.h +260 -0
- data/src/core/channel/client_channel.c +524 -0
- data/src/core/channel/client_channel.h +63 -0
- data/src/core/channel/client_uchannel.c +243 -0
- data/src/core/channel/client_uchannel.h +60 -0
- data/src/core/channel/compress_filter.c +297 -0
- data/src/core/channel/compress_filter.h +65 -0
- data/src/core/channel/connected_channel.c +167 -0
- data/src/core/channel/connected_channel.h +51 -0
- data/src/core/channel/context.h +49 -0
- data/src/core/channel/http_client_filter.c +248 -0
- data/src/core/channel/http_client_filter.h +44 -0
- data/src/core/channel/http_server_filter.c +233 -0
- data/src/core/channel/http_server_filter.h +42 -0
- data/src/core/channel/subchannel_call_holder.c +259 -0
- data/src/core/channel/subchannel_call_holder.h +98 -0
- data/src/core/client_config/client_config.c +72 -0
- data/src/core/client_config/client_config.h +53 -0
- data/src/core/client_config/connector.c +54 -0
- data/src/core/client_config/connector.h +95 -0
- data/src/core/client_config/default_initial_connect_string.c +39 -0
- data/src/core/client_config/initial_connect_string.c +53 -0
- data/src/core/client_config/initial_connect_string.h +50 -0
- data/src/core/client_config/lb_policies/pick_first.c +398 -0
- data/src/core/client_config/lb_policies/pick_first.h +43 -0
- data/src/core/client_config/lb_policies/round_robin.c +537 -0
- data/src/core/client_config/lb_policies/round_robin.h +46 -0
- data/src/core/client_config/lb_policy.c +134 -0
- data/src/core/client_config/lb_policy.h +143 -0
- data/src/core/client_config/lb_policy_factory.c +48 -0
- data/src/core/client_config/lb_policy_factory.h +73 -0
- data/src/core/client_config/lb_policy_registry.c +88 -0
- data/src/core/client_config/lb_policy_registry.h +54 -0
- data/src/core/client_config/resolver.c +82 -0
- data/src/core/client_config/resolver.h +94 -0
- data/src/core/client_config/resolver_factory.c +55 -0
- data/src/core/client_config/resolver_factory.h +82 -0
- data/src/core/client_config/resolver_registry.c +137 -0
- data/src/core/client_config/resolver_registry.h +65 -0
- data/src/core/client_config/resolvers/dns_resolver.c +257 -0
- data/src/core/client_config/resolvers/dns_resolver.h +42 -0
- data/src/core/client_config/resolvers/sockaddr_resolver.c +391 -0
- data/src/core/client_config/resolvers/sockaddr_resolver.h +50 -0
- data/src/core/client_config/subchannel.c +697 -0
- data/src/core/client_config/subchannel.h +165 -0
- data/src/core/client_config/subchannel_factory.c +49 -0
- data/src/core/client_config/subchannel_factory.h +66 -0
- data/src/core/client_config/uri_parser.c +242 -0
- data/src/core/client_config/uri_parser.h +51 -0
- data/src/core/compression/algorithm.c +166 -0
- data/src/core/compression/algorithm_metadata.h +53 -0
- data/src/core/compression/message_compress.c +198 -0
- data/src/core/compression/message_compress.h +52 -0
- data/src/core/debug/trace.c +136 -0
- data/src/core/debug/trace.h +43 -0
- data/src/core/httpcli/format_request.c +120 -0
- data/src/core/httpcli/format_request.h +45 -0
- data/src/core/httpcli/httpcli.c +286 -0
- data/src/core/httpcli/httpcli.h +162 -0
- data/src/core/httpcli/httpcli_security_connector.c +189 -0
- data/src/core/httpcli/parser.c +211 -0
- data/src/core/httpcli/parser.h +64 -0
- data/src/core/iomgr/closure.c +98 -0
- data/src/core/iomgr/closure.h +97 -0
- data/src/core/iomgr/endpoint.c +67 -0
- data/src/core/iomgr/endpoint.h +102 -0
- data/src/core/iomgr/endpoint_pair.h +47 -0
- data/src/core/iomgr/endpoint_pair_posix.c +82 -0
- data/src/core/iomgr/endpoint_pair_windows.c +97 -0
- data/src/core/iomgr/exec_ctx.c +72 -0
- data/src/core/iomgr/exec_ctx.h +78 -0
- data/src/core/iomgr/executor.c +143 -0
- data/src/core/iomgr/executor.h +53 -0
- data/src/core/iomgr/fd_posix.c +438 -0
- data/src/core/iomgr/fd_posix.h +189 -0
- data/src/core/iomgr/iocp_windows.c +206 -0
- data/src/core/iomgr/iocp_windows.h +56 -0
- data/src/core/iomgr/iomgr.c +156 -0
- data/src/core/iomgr/iomgr.h +43 -0
- data/src/core/iomgr/iomgr_internal.h +58 -0
- data/src/core/iomgr/iomgr_posix.c +52 -0
- data/src/core/iomgr/iomgr_posix.h +39 -0
- data/src/core/iomgr/iomgr_windows.c +73 -0
- data/src/core/iomgr/pollset.h +95 -0
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +258 -0
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +227 -0
- data/src/core/iomgr/pollset_posix.c +638 -0
- data/src/core/iomgr/pollset_posix.h +147 -0
- data/src/core/iomgr/pollset_set.h +67 -0
- data/src/core/iomgr/pollset_set_posix.c +182 -0
- data/src/core/iomgr/pollset_set_posix.h +61 -0
- data/src/core/iomgr/pollset_set_windows.c +60 -0
- data/src/core/iomgr/pollset_set_windows.h +39 -0
- data/src/core/iomgr/pollset_windows.c +248 -0
- data/src/core/iomgr/pollset_windows.h +79 -0
- data/src/core/iomgr/resolve_address.h +72 -0
- data/src/core/iomgr/resolve_address_posix.c +183 -0
- data/src/core/iomgr/resolve_address_windows.c +166 -0
- data/src/core/iomgr/sockaddr.h +47 -0
- data/src/core/iomgr/sockaddr_posix.h +44 -0
- data/src/core/iomgr/sockaddr_utils.c +234 -0
- data/src/core/iomgr/sockaddr_utils.h +89 -0
- data/src/core/iomgr/sockaddr_win32.h +46 -0
- data/src/core/iomgr/socket_utils_common_posix.c +208 -0
- data/src/core/iomgr/socket_utils_linux.c +51 -0
- data/src/core/iomgr/socket_utils_posix.c +70 -0
- data/src/core/iomgr/socket_utils_posix.h +113 -0
- data/src/core/iomgr/socket_windows.c +98 -0
- data/src/core/iomgr/socket_windows.h +111 -0
- data/src/core/iomgr/tcp_client.h +53 -0
- data/src/core/iomgr/tcp_client_posix.c +304 -0
- data/src/core/iomgr/tcp_client_windows.c +221 -0
- data/src/core/iomgr/tcp_posix.c +485 -0
- data/src/core/iomgr/tcp_posix.h +65 -0
- data/src/core/iomgr/tcp_server.h +83 -0
- data/src/core/iomgr/tcp_server_posix.c +562 -0
- data/src/core/iomgr/tcp_server_windows.c +509 -0
- data/src/core/iomgr/tcp_windows.c +406 -0
- data/src/core/iomgr/tcp_windows.h +57 -0
- data/src/core/iomgr/time_averaged_stats.c +77 -0
- data/src/core/iomgr/time_averaged_stats.h +88 -0
- data/src/core/iomgr/timer.c +345 -0
- data/src/core/iomgr/timer.h +89 -0
- data/src/core/iomgr/timer_heap.c +148 -0
- data/src/core/iomgr/timer_heap.h +57 -0
- data/src/core/iomgr/timer_internal.h +61 -0
- data/src/core/iomgr/udp_server.c +439 -0
- data/src/core/iomgr/udp_server.h +83 -0
- data/src/core/iomgr/wakeup_fd_eventfd.c +85 -0
- data/src/core/iomgr/wakeup_fd_nospecial.c +51 -0
- data/src/core/iomgr/wakeup_fd_pipe.c +97 -0
- data/src/core/iomgr/wakeup_fd_pipe.h +41 -0
- data/src/core/iomgr/wakeup_fd_posix.c +72 -0
- data/src/core/iomgr/wakeup_fd_posix.h +101 -0
- data/src/core/iomgr/workqueue.h +85 -0
- data/src/core/iomgr/workqueue_posix.c +143 -0
- data/src/core/iomgr/workqueue_posix.h +51 -0
- data/src/core/iomgr/workqueue_windows.c +40 -0
- data/src/core/iomgr/workqueue_windows.h +37 -0
- data/src/core/json/json.c +64 -0
- data/src/core/json/json.h +88 -0
- data/src/core/json/json_common.h +49 -0
- data/src/core/json/json_reader.c +660 -0
- data/src/core/json/json_reader.h +160 -0
- data/src/core/json/json_string.c +379 -0
- data/src/core/json/json_writer.c +260 -0
- data/src/core/json/json_writer.h +97 -0
- data/src/core/profiling/basic_timers.c +274 -0
- data/src/core/profiling/stap_timers.c +65 -0
- data/src/core/profiling/timers.h +119 -0
- data/src/core/security/auth_filters.h +42 -0
- data/src/core/security/base64.c +233 -0
- data/src/core/security/base64.h +52 -0
- data/src/core/security/client_auth_filter.c +337 -0
- data/src/core/security/credentials.c +1273 -0
- data/src/core/security/credentials.h +376 -0
- data/src/core/security/credentials_metadata.c +101 -0
- data/src/core/security/credentials_posix.c +61 -0
- data/src/core/security/credentials_win32.c +61 -0
- data/src/core/security/google_default_credentials.c +260 -0
- data/src/core/security/handshake.c +327 -0
- data/src/core/security/handshake.h +50 -0
- data/src/core/security/json_token.c +405 -0
- data/src/core/security/json_token.h +118 -0
- data/src/core/security/jwt_verifier.c +842 -0
- data/src/core/security/jwt_verifier.h +136 -0
- data/src/core/security/secure_endpoint.c +383 -0
- data/src/core/security/secure_endpoint.h +49 -0
- data/src/core/security/security_connector.c +756 -0
- data/src/core/security/security_connector.h +246 -0
- data/src/core/security/security_context.c +342 -0
- data/src/core/security/security_context.h +114 -0
- data/src/core/security/server_auth_filter.c +264 -0
- data/src/core/security/server_secure_chttp2.c +268 -0
- data/src/core/statistics/census_interface.h +76 -0
- data/src/core/statistics/census_rpc_stats.h +101 -0
- data/src/core/support/alloc.c +90 -0
- data/src/core/support/avl.c +288 -0
- data/src/core/support/block_annotate.h +48 -0
- data/src/core/support/cmdline.c +347 -0
- data/src/core/support/cpu_iphone.c +49 -0
- data/src/core/support/cpu_linux.c +78 -0
- data/src/core/support/cpu_posix.c +77 -0
- data/src/core/support/cpu_windows.c +47 -0
- data/src/core/support/env.h +60 -0
- data/src/core/support/env_linux.c +62 -0
- data/src/core/support/env_posix.c +57 -0
- data/src/core/support/env_win32.c +65 -0
- data/src/core/support/file.c +91 -0
- data/src/core/support/file.h +63 -0
- data/src/core/support/file_posix.c +85 -0
- data/src/core/support/file_win32.c +84 -0
- data/src/core/support/histogram.c +244 -0
- data/src/core/support/host_port.c +110 -0
- data/src/core/support/log.c +66 -0
- data/src/core/support/log_android.c +87 -0
- data/src/core/support/log_linux.c +105 -0
- data/src/core/support/log_posix.c +102 -0
- data/src/core/support/log_win32.c +125 -0
- data/src/core/support/murmur_hash.c +96 -0
- data/src/core/support/murmur_hash.h +44 -0
- data/src/core/support/slice.c +343 -0
- data/src/core/support/slice_buffer.c +282 -0
- data/src/core/support/stack_lockfree.c +175 -0
- data/src/core/support/stack_lockfree.h +53 -0
- data/src/core/support/string.c +296 -0
- data/src/core/support/string.h +121 -0
- data/src/core/support/string_posix.c +86 -0
- data/src/core/support/string_win32.c +109 -0
- data/src/core/support/string_win32.h +47 -0
- data/src/core/support/subprocess_posix.c +112 -0
- data/src/core/support/sync.c +122 -0
- data/src/core/support/sync_posix.c +104 -0
- data/src/core/support/sync_win32.c +128 -0
- data/src/core/support/thd.c +64 -0
- data/src/core/support/thd_internal.h +39 -0
- data/src/core/support/thd_posix.c +94 -0
- data/src/core/support/thd_win32.c +117 -0
- data/src/core/support/time.c +304 -0
- data/src/core/support/time_posix.c +161 -0
- data/src/core/support/time_precise.c +89 -0
- data/src/core/support/time_precise.h +42 -0
- data/src/core/support/time_win32.c +101 -0
- data/src/core/support/tls_pthread.c +45 -0
- data/src/core/surface/api_trace.c +36 -0
- data/src/core/surface/api_trace.h +65 -0
- data/src/core/surface/byte_buffer.c +97 -0
- data/src/core/surface/byte_buffer_reader.c +123 -0
- data/src/core/surface/call.c +1424 -0
- data/src/core/surface/call.h +109 -0
- data/src/core/surface/call_details.c +50 -0
- data/src/core/surface/call_log_batch.c +118 -0
- data/src/core/surface/call_test_only.h +64 -0
- data/src/core/surface/channel.c +327 -0
- data/src/core/surface/channel.h +74 -0
- data/src/core/surface/channel_connectivity.c +220 -0
- data/src/core/surface/channel_create.c +235 -0
- data/src/core/surface/channel_ping.c +79 -0
- data/src/core/surface/completion_queue.c +481 -0
- data/src/core/surface/completion_queue.h +91 -0
- data/src/core/surface/event_string.c +81 -0
- data/src/core/surface/event_string.h +42 -0
- data/src/core/surface/init.c +168 -0
- data/src/core/surface/init.h +40 -0
- data/src/core/surface/init_secure.c +42 -0
- data/src/core/surface/lame_client.c +149 -0
- data/src/core/surface/metadata_array.c +49 -0
- data/src/core/surface/secure_channel_create.c +336 -0
- data/src/core/surface/server.c +1343 -0
- data/src/core/surface/server.h +67 -0
- data/src/core/surface/server_chttp2.c +149 -0
- data/src/core/surface/server_create.c +51 -0
- data/src/core/surface/surface_trace.h +48 -0
- data/src/core/surface/validate_metadata.c +73 -0
- data/src/core/surface/version.c +39 -0
- data/src/core/transport/byte_stream.c +76 -0
- data/src/core/transport/byte_stream.h +88 -0
- data/src/core/transport/chttp2/alpn.c +56 -0
- data/src/core/transport/chttp2/alpn.h +49 -0
- data/src/core/transport/chttp2/bin_encoder.c +285 -0
- data/src/core/transport/chttp2/bin_encoder.h +54 -0
- data/src/core/transport/chttp2/frame.h +69 -0
- data/src/core/transport/chttp2/frame_data.c +245 -0
- data/src/core/transport/chttp2/frame_data.h +101 -0
- data/src/core/transport/chttp2/frame_goaway.c +193 -0
- data/src/core/transport/chttp2/frame_goaway.h +77 -0
- data/src/core/transport/chttp2/frame_ping.c +97 -0
- data/src/core/transport/chttp2/frame_ping.h +56 -0
- data/src/core/transport/chttp2/frame_rst_stream.c +100 -0
- data/src/core/transport/chttp2/frame_rst_stream.h +55 -0
- data/src/core/transport/chttp2/frame_settings.c +259 -0
- data/src/core/transport/chttp2/frame_settings.h +103 -0
- data/src/core/transport/chttp2/frame_window_update.c +114 -0
- data/src/core/transport/chttp2/frame_window_update.h +58 -0
- data/src/core/transport/chttp2/hpack_encoder.c +572 -0
- data/src/core/transport/chttp2/hpack_encoder.h +95 -0
- data/src/core/transport/chttp2/hpack_parser.c +1449 -0
- data/src/core/transport/chttp2/hpack_parser.h +116 -0
- data/src/core/transport/chttp2/hpack_table.c +361 -0
- data/src/core/transport/chttp2/hpack_table.h +108 -0
- data/src/core/transport/chttp2/http2_errors.h +56 -0
- data/src/core/transport/chttp2/huffsyms.c +297 -0
- data/src/core/transport/chttp2/huffsyms.h +48 -0
- data/src/core/transport/chttp2/incoming_metadata.c +96 -0
- data/src/core/transport/chttp2/incoming_metadata.h +60 -0
- data/src/core/transport/chttp2/internal.h +757 -0
- data/src/core/transport/chttp2/parsing.c +866 -0
- data/src/core/transport/chttp2/status_conversion.c +109 -0
- data/src/core/transport/chttp2/status_conversion.h +50 -0
- data/src/core/transport/chttp2/stream_lists.c +401 -0
- data/src/core/transport/chttp2/stream_map.c +198 -0
- data/src/core/transport/chttp2/stream_map.h +85 -0
- data/src/core/transport/chttp2/timeout_encoding.c +185 -0
- data/src/core/transport/chttp2/timeout_encoding.h +47 -0
- data/src/core/transport/chttp2/varint.c +66 -0
- data/src/core/transport/chttp2/varint.h +76 -0
- data/src/core/transport/chttp2/writing.c +356 -0
- data/src/core/transport/chttp2_transport.c +1692 -0
- data/src/core/transport/chttp2_transport.h +51 -0
- data/src/core/transport/connectivity_state.c +164 -0
- data/src/core/transport/connectivity_state.h +85 -0
- data/src/core/transport/metadata.c +690 -0
- data/src/core/transport/metadata.h +156 -0
- data/src/core/transport/metadata_batch.c +194 -0
- data/src/core/transport/metadata_batch.h +125 -0
- data/src/core/transport/static_metadata.c +90 -0
- data/src/core/transport/static_metadata.h +408 -0
- data/src/core/transport/transport.c +183 -0
- data/src/core/transport/transport.h +222 -0
- data/src/core/transport/transport_impl.h +78 -0
- data/src/core/transport/transport_op_string.c +140 -0
- data/src/core/tsi/fake_transport_security.c +525 -0
- data/src/core/tsi/fake_transport_security.h +61 -0
- data/src/core/tsi/ssl_transport_security.c +1467 -0
- data/src/core/tsi/ssl_transport_security.h +173 -0
- data/src/core/tsi/transport_security.c +284 -0
- data/src/core/tsi/transport_security.h +111 -0
- data/src/core/tsi/transport_security_interface.h +344 -0
- data/{bin → src/ruby/bin}/apis/google/protobuf/empty.rb +0 -0
- data/{bin → src/ruby/bin}/apis/pubsub_demo.rb +7 -15
- data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub.rb +0 -0
- data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub_services.rb +0 -0
- data/{bin → src/ruby/bin}/grpc_ruby_interop_client +0 -0
- data/{bin → src/ruby/bin}/grpc_ruby_interop_server +0 -0
- data/{bin → src/ruby/bin}/interop/interop_client.rb +0 -0
- data/{bin → src/ruby/bin}/interop/interop_server.rb +0 -0
- data/src/ruby/bin/math.rb +32 -0
- data/{bin → src/ruby/bin}/math_client.rb +1 -1
- data/{bin → src/ruby/bin}/math_server.rb +1 -1
- data/src/ruby/bin/math_services.rb +27 -0
- data/{bin → src/ruby/bin}/noproto_client.rb +1 -1
- data/{bin → src/ruby/bin}/noproto_server.rb +1 -1
- data/{ext → src/ruby/ext}/grpc/extconf.rb +24 -40
- data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.c +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_call.c +80 -18
- data/{ext → src/ruby/ext}/grpc/rb_call.h +6 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +315 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel.c +19 -7
- data/{ext → src/ruby/ext}/grpc/rb_channel.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel_args.c +2 -0
- data/{ext → src/ruby/ext}/grpc/rb_channel_args.h +0 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +266 -0
- data/{ext/grpc/rb_credentials.h → src/ruby/ext/grpc/rb_channel_credentials.h} +3 -3
- data/{ext → src/ruby/ext}/grpc/rb_completion_queue.c +3 -1
- data/{ext → src/ruby/ext}/grpc/rb_completion_queue.h +0 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +153 -0
- data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
- data/{ext → src/ruby/ext}/grpc/rb_grpc.c +25 -5
- data/{ext → src/ruby/ext}/grpc/rb_grpc.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_server.c +4 -1
- data/{ext → src/ruby/ext}/grpc/rb_server.h +0 -0
- data/{ext → src/ruby/ext}/grpc/rb_server_credentials.c +2 -0
- data/{ext → src/ruby/ext}/grpc/rb_server_credentials.h +0 -0
- data/{lib → src/ruby/lib}/grpc.rb +6 -1
- data/{lib → src/ruby/lib}/grpc/core/time_consts.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/errors.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/generic/active_call.rb +4 -6
- data/{lib → src/ruby/lib}/grpc/generic/bidi_call.rb +16 -4
- data/{lib → src/ruby/lib}/grpc/generic/client_stub.rb +42 -52
- data/{lib → src/ruby/lib}/grpc/generic/rpc_desc.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/generic/rpc_server.rb +15 -8
- data/{lib → src/ruby/lib}/grpc/generic/service.rb +4 -2
- data/src/ruby/lib/grpc/grpc.so +0 -0
- data/{lib → src/ruby/lib}/grpc/logconfig.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/notifier.rb +0 -0
- data/{lib → src/ruby/lib}/grpc/version.rb +2 -2
- data/src/ruby/pb/README.md +42 -0
- data/src/ruby/pb/generate_proto_ruby.sh +51 -0
- data/src/ruby/pb/grpc/health/checker.rb +75 -0
- data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
- data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
- data/src/ruby/pb/test/client.rb +469 -0
- data/src/ruby/pb/test/proto/empty.rb +15 -0
- data/src/ruby/pb/test/proto/messages.rb +80 -0
- data/src/ruby/pb/test/proto/test.rb +14 -0
- data/src/ruby/pb/test/proto/test_services.rb +64 -0
- data/src/ruby/pb/test/server.rb +253 -0
- data/{bin/math_services.rb → src/ruby/spec/call_credentials_spec.rb} +19 -18
- data/{spec → src/ruby/spec}/call_spec.rb +10 -1
- data/{spec/credentials_spec.rb → src/ruby/spec/channel_credentials_spec.rb} +38 -12
- data/{spec → src/ruby/spec}/channel_spec.rb +14 -9
- data/{spec → src/ruby/spec}/client_server_spec.rb +31 -2
- data/{spec → src/ruby/spec}/completion_queue_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/active_call_spec.rb +2 -1
- data/{spec → src/ruby/spec}/generic/client_stub_spec.rb +27 -67
- data/{spec → src/ruby/spec}/generic/rpc_desc_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/rpc_server_pool_spec.rb +0 -0
- data/{spec → src/ruby/spec}/generic/rpc_server_spec.rb +12 -46
- data/{spec → src/ruby/spec}/generic/service_spec.rb +6 -3
- data/{spec → src/ruby/spec}/pb/health/checker_spec.rb +8 -8
- data/{spec → src/ruby/spec}/server_credentials_spec.rb +0 -0
- data/{spec → src/ruby/spec}/server_spec.rb +0 -0
- data/{spec → src/ruby/spec}/spec_helper.rb +0 -0
- data/{spec → src/ruby/spec}/testdata/README +0 -0
- data/{spec → src/ruby/spec}/testdata/ca.pem +0 -0
- data/{spec → src/ruby/spec}/testdata/server1.key +0 -0
- data/src/ruby/spec/testdata/server1.pem +16 -0
- data/{spec → src/ruby/spec}/time_consts_spec.rb +0 -0
- metadata +496 -97
- data/bin/math.proto +0 -80
- data/bin/math.rb +0 -61
- data/ext/grpc/rb_credentials.c +0 -294
- data/lib/grpc/grpc.so +0 -0
- data/spec/testdata/server1.pem +0 -16
@@ -0,0 +1,88 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#ifndef GRPC_INTERNAL_CORE_TRANSPORT_BYTE_STREAM_H
|
35
|
+
#define GRPC_INTERNAL_CORE_TRANSPORT_BYTE_STREAM_H
|
36
|
+
|
37
|
+
#include "src/core/iomgr/exec_ctx.h"
|
38
|
+
#include <grpc/support/slice_buffer.h>
|
39
|
+
|
40
|
+
/** Internal bit flag for grpc_begin_message's \a flags signaling the use of
|
41
|
+
* compression for the message */
|
42
|
+
#define GRPC_WRITE_INTERNAL_COMPRESS (0x80000000u)
|
43
|
+
/** Mask of all valid internal flags. */
|
44
|
+
#define GRPC_WRITE_INTERNAL_USED_MASK (GRPC_WRITE_INTERNAL_COMPRESS)
|
45
|
+
|
46
|
+
struct grpc_byte_stream;
|
47
|
+
typedef struct grpc_byte_stream grpc_byte_stream;
|
48
|
+
|
49
|
+
struct grpc_byte_stream {
|
50
|
+
gpr_uint32 length;
|
51
|
+
gpr_uint32 flags;
|
52
|
+
int (*next)(grpc_exec_ctx *exec_ctx, grpc_byte_stream *byte_stream,
|
53
|
+
gpr_slice *slice, size_t max_size_hint,
|
54
|
+
grpc_closure *on_complete);
|
55
|
+
void (*destroy)(grpc_byte_stream *byte_stream);
|
56
|
+
};
|
57
|
+
|
58
|
+
/* returns 1 if the bytes are available immediately (in which case
|
59
|
+
* on_complete will not be called), 0 if the bytes will be available
|
60
|
+
* asynchronously.
|
61
|
+
*
|
62
|
+
* on entry, *remaining can be set as a hint as to the maximum number
|
63
|
+
* of bytes that would be acceptable to read.
|
64
|
+
*
|
65
|
+
* fills *buffer, *length, *remaining with the bytes, length of bytes
|
66
|
+
* and length of data remaining to be read before either returning 1
|
67
|
+
* or calling on_complete.
|
68
|
+
*
|
69
|
+
* once a slice is returned into *slice, it is owned by the caller.
|
70
|
+
*/
|
71
|
+
int grpc_byte_stream_next(grpc_exec_ctx *exec_ctx,
|
72
|
+
grpc_byte_stream *byte_stream, gpr_slice *slice,
|
73
|
+
size_t max_size_hint, grpc_closure *on_complete);
|
74
|
+
|
75
|
+
void grpc_byte_stream_destroy(grpc_byte_stream *byte_stream);
|
76
|
+
|
77
|
+
/* grpc_byte_stream that wraps a slice buffer */
|
78
|
+
typedef struct grpc_slice_buffer_stream {
|
79
|
+
grpc_byte_stream base;
|
80
|
+
gpr_slice_buffer *backing_buffer;
|
81
|
+
size_t cursor;
|
82
|
+
} grpc_slice_buffer_stream;
|
83
|
+
|
84
|
+
void grpc_slice_buffer_stream_init(grpc_slice_buffer_stream *stream,
|
85
|
+
gpr_slice_buffer *slice_buffer,
|
86
|
+
gpr_uint32 flags);
|
87
|
+
|
88
|
+
#endif /* GRPC_INTERNAL_CORE_TRANSPORT_BYTE_STREAM_H */
|
@@ -0,0 +1,56 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/transport/chttp2/alpn.h"
|
35
|
+
#include <grpc/support/log.h>
|
36
|
+
#include <grpc/support/useful.h>
|
37
|
+
|
38
|
+
/* in order of preference */
|
39
|
+
static const char *const supported_versions[] = {"h2"};
|
40
|
+
|
41
|
+
int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size) {
|
42
|
+
size_t i;
|
43
|
+
for (i = 0; i < GPR_ARRAY_SIZE(supported_versions); i++) {
|
44
|
+
if (!strncmp(version, supported_versions[i], size)) return 1;
|
45
|
+
}
|
46
|
+
return 0;
|
47
|
+
}
|
48
|
+
|
49
|
+
size_t grpc_chttp2_num_alpn_versions(void) {
|
50
|
+
return GPR_ARRAY_SIZE(supported_versions);
|
51
|
+
}
|
52
|
+
|
53
|
+
const char *grpc_chttp2_get_alpn_version_index(size_t i) {
|
54
|
+
GPR_ASSERT(i < GPR_ARRAY_SIZE(supported_versions));
|
55
|
+
return supported_versions[i];
|
56
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H
|
35
|
+
#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H
|
36
|
+
|
37
|
+
#include <string.h>
|
38
|
+
|
39
|
+
/* Retuns 1 if the version is supported, 0 otherwise. */
|
40
|
+
int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size);
|
41
|
+
|
42
|
+
/* Returns the number of protocol versions to advertise */
|
43
|
+
size_t grpc_chttp2_num_alpn_versions(void);
|
44
|
+
|
45
|
+
/* Returns the protocol version at index i (0 <= i <
|
46
|
+
* grpc_chttp2_num_alpn_versions()) */
|
47
|
+
const char *grpc_chttp2_get_alpn_version_index(size_t i);
|
48
|
+
|
49
|
+
#endif /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H */
|
@@ -0,0 +1,285 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015-2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/transport/chttp2/bin_encoder.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include "src/core/transport/chttp2/huffsyms.h"
|
39
|
+
#include <grpc/support/log.h>
|
40
|
+
|
41
|
+
static const char alphabet[] =
|
42
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
43
|
+
|
44
|
+
typedef struct {
|
45
|
+
gpr_uint16 bits;
|
46
|
+
gpr_uint8 length;
|
47
|
+
} b64_huff_sym;
|
48
|
+
|
49
|
+
static const b64_huff_sym huff_alphabet[64] = {{0x21, 6},
|
50
|
+
{0x5d, 7},
|
51
|
+
{0x5e, 7},
|
52
|
+
{0x5f, 7},
|
53
|
+
{0x60, 7},
|
54
|
+
{0x61, 7},
|
55
|
+
{0x62, 7},
|
56
|
+
{0x63, 7},
|
57
|
+
{0x64, 7},
|
58
|
+
{0x65, 7},
|
59
|
+
{0x66, 7},
|
60
|
+
{0x67, 7},
|
61
|
+
{0x68, 7},
|
62
|
+
{0x69, 7},
|
63
|
+
{0x6a, 7},
|
64
|
+
{0x6b, 7},
|
65
|
+
{0x6c, 7},
|
66
|
+
{0x6d, 7},
|
67
|
+
{0x6e, 7},
|
68
|
+
{0x6f, 7},
|
69
|
+
{0x70, 7},
|
70
|
+
{0x71, 7},
|
71
|
+
{0x72, 7},
|
72
|
+
{0xfc, 8},
|
73
|
+
{0x73, 7},
|
74
|
+
{0xfd, 8},
|
75
|
+
{0x3, 5},
|
76
|
+
{0x23, 6},
|
77
|
+
{0x4, 5},
|
78
|
+
{0x24, 6},
|
79
|
+
{0x5, 5},
|
80
|
+
{0x25, 6},
|
81
|
+
{0x26, 6},
|
82
|
+
{0x27, 6},
|
83
|
+
{0x6, 5},
|
84
|
+
{0x74, 7},
|
85
|
+
{0x75, 7},
|
86
|
+
{0x28, 6},
|
87
|
+
{0x29, 6},
|
88
|
+
{0x2a, 6},
|
89
|
+
{0x7, 5},
|
90
|
+
{0x2b, 6},
|
91
|
+
{0x76, 7},
|
92
|
+
{0x2c, 6},
|
93
|
+
{0x8, 5},
|
94
|
+
{0x9, 5},
|
95
|
+
{0x2d, 6},
|
96
|
+
{0x77, 7},
|
97
|
+
{0x78, 7},
|
98
|
+
{0x79, 7},
|
99
|
+
{0x7a, 7},
|
100
|
+
{0x7b, 7},
|
101
|
+
{0x0, 5},
|
102
|
+
{0x1, 5},
|
103
|
+
{0x2, 5},
|
104
|
+
{0x19, 6},
|
105
|
+
{0x1a, 6},
|
106
|
+
{0x1b, 6},
|
107
|
+
{0x1c, 6},
|
108
|
+
{0x1d, 6},
|
109
|
+
{0x1e, 6},
|
110
|
+
{0x1f, 6},
|
111
|
+
{0x7fb, 11},
|
112
|
+
{0x18, 6}};
|
113
|
+
|
114
|
+
static const gpr_uint8 tail_xtra[3] = {0, 2, 3};
|
115
|
+
|
116
|
+
gpr_slice grpc_chttp2_base64_encode(gpr_slice input) {
|
117
|
+
size_t input_length = GPR_SLICE_LENGTH(input);
|
118
|
+
size_t input_triplets = input_length / 3;
|
119
|
+
size_t tail_case = input_length % 3;
|
120
|
+
size_t output_length = input_triplets * 4 + tail_xtra[tail_case];
|
121
|
+
gpr_slice output = gpr_slice_malloc(output_length);
|
122
|
+
gpr_uint8 *in = GPR_SLICE_START_PTR(input);
|
123
|
+
char *out = (char *)GPR_SLICE_START_PTR(output);
|
124
|
+
size_t i;
|
125
|
+
|
126
|
+
/* encode full triplets */
|
127
|
+
for (i = 0; i < input_triplets; i++) {
|
128
|
+
out[0] = alphabet[in[0] >> 2];
|
129
|
+
out[1] = alphabet[((in[0] & 0x3) << 4) | (in[1] >> 4)];
|
130
|
+
out[2] = alphabet[((in[1] & 0xf) << 2) | (in[2] >> 6)];
|
131
|
+
out[3] = alphabet[in[2] & 0x3f];
|
132
|
+
out += 4;
|
133
|
+
in += 3;
|
134
|
+
}
|
135
|
+
|
136
|
+
/* encode the remaining bytes */
|
137
|
+
switch (tail_case) {
|
138
|
+
case 0:
|
139
|
+
break;
|
140
|
+
case 1:
|
141
|
+
out[0] = alphabet[in[0] >> 2];
|
142
|
+
out[1] = alphabet[(in[0] & 0x3) << 4];
|
143
|
+
out += 2;
|
144
|
+
in += 1;
|
145
|
+
break;
|
146
|
+
case 2:
|
147
|
+
out[0] = alphabet[in[0] >> 2];
|
148
|
+
out[1] = alphabet[((in[0] & 0x3) << 4) | (in[1] >> 4)];
|
149
|
+
out[2] = alphabet[(in[1] & 0xf) << 2];
|
150
|
+
out += 3;
|
151
|
+
in += 2;
|
152
|
+
break;
|
153
|
+
}
|
154
|
+
|
155
|
+
GPR_ASSERT(out == (char *)GPR_SLICE_END_PTR(output));
|
156
|
+
GPR_ASSERT(in == GPR_SLICE_END_PTR(input));
|
157
|
+
return output;
|
158
|
+
}
|
159
|
+
|
160
|
+
gpr_slice grpc_chttp2_huffman_compress(gpr_slice input) {
|
161
|
+
size_t nbits;
|
162
|
+
gpr_uint8 *in;
|
163
|
+
gpr_uint8 *out;
|
164
|
+
gpr_slice output;
|
165
|
+
gpr_uint32 temp = 0;
|
166
|
+
gpr_uint32 temp_length = 0;
|
167
|
+
|
168
|
+
nbits = 0;
|
169
|
+
for (in = GPR_SLICE_START_PTR(input); in != GPR_SLICE_END_PTR(input); ++in) {
|
170
|
+
nbits += grpc_chttp2_huffsyms[*in].length;
|
171
|
+
}
|
172
|
+
|
173
|
+
output = gpr_slice_malloc(nbits / 8 + (nbits % 8 != 0));
|
174
|
+
out = GPR_SLICE_START_PTR(output);
|
175
|
+
for (in = GPR_SLICE_START_PTR(input); in != GPR_SLICE_END_PTR(input); ++in) {
|
176
|
+
int sym = *in;
|
177
|
+
temp <<= grpc_chttp2_huffsyms[sym].length;
|
178
|
+
temp |= grpc_chttp2_huffsyms[sym].bits;
|
179
|
+
temp_length += grpc_chttp2_huffsyms[sym].length;
|
180
|
+
|
181
|
+
while (temp_length > 8) {
|
182
|
+
temp_length -= 8;
|
183
|
+
*out++ = (gpr_uint8)(temp >> temp_length);
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
if (temp_length) {
|
188
|
+
/* NB: the following integer arithmetic operation needs to be in its
|
189
|
+
* expanded form due to the "integral promotion" performed (see section
|
190
|
+
* 3.2.1.1 of the C89 draft standard). A cast to the smaller container type
|
191
|
+
* is then required to avoid the compiler warning */
|
192
|
+
*out++ = (gpr_uint8)((gpr_uint8)(temp << (8u - temp_length)) |
|
193
|
+
(gpr_uint8)(0xffu >> temp_length));
|
194
|
+
}
|
195
|
+
|
196
|
+
GPR_ASSERT(out == GPR_SLICE_END_PTR(output));
|
197
|
+
|
198
|
+
return output;
|
199
|
+
}
|
200
|
+
|
201
|
+
typedef struct {
|
202
|
+
gpr_uint32 temp;
|
203
|
+
gpr_uint32 temp_length;
|
204
|
+
gpr_uint8 *out;
|
205
|
+
} huff_out;
|
206
|
+
|
207
|
+
static void enc_flush_some(huff_out *out) {
|
208
|
+
while (out->temp_length > 8) {
|
209
|
+
out->temp_length -= 8;
|
210
|
+
*out->out++ = (gpr_uint8)(out->temp >> out->temp_length);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
|
214
|
+
static void enc_add2(huff_out *out, gpr_uint8 a, gpr_uint8 b) {
|
215
|
+
b64_huff_sym sa = huff_alphabet[a];
|
216
|
+
b64_huff_sym sb = huff_alphabet[b];
|
217
|
+
out->temp = (out->temp << (sa.length + sb.length)) |
|
218
|
+
((gpr_uint32)sa.bits << sb.length) | sb.bits;
|
219
|
+
out->temp_length += (gpr_uint32)sa.length + (gpr_uint32)sb.length;
|
220
|
+
enc_flush_some(out);
|
221
|
+
}
|
222
|
+
|
223
|
+
static void enc_add1(huff_out *out, gpr_uint8 a) {
|
224
|
+
b64_huff_sym sa = huff_alphabet[a];
|
225
|
+
out->temp = (out->temp << sa.length) | sa.bits;
|
226
|
+
out->temp_length += sa.length;
|
227
|
+
enc_flush_some(out);
|
228
|
+
}
|
229
|
+
|
230
|
+
gpr_slice grpc_chttp2_base64_encode_and_huffman_compress(gpr_slice input) {
|
231
|
+
size_t input_length = GPR_SLICE_LENGTH(input);
|
232
|
+
size_t input_triplets = input_length / 3;
|
233
|
+
size_t tail_case = input_length % 3;
|
234
|
+
size_t output_syms = input_triplets * 4 + tail_xtra[tail_case];
|
235
|
+
size_t max_output_bits = 11 * output_syms;
|
236
|
+
size_t max_output_length = max_output_bits / 8 + (max_output_bits % 8 != 0);
|
237
|
+
gpr_slice output = gpr_slice_malloc(max_output_length);
|
238
|
+
gpr_uint8 *in = GPR_SLICE_START_PTR(input);
|
239
|
+
gpr_uint8 *start_out = GPR_SLICE_START_PTR(output);
|
240
|
+
huff_out out;
|
241
|
+
size_t i;
|
242
|
+
|
243
|
+
out.temp = 0;
|
244
|
+
out.temp_length = 0;
|
245
|
+
out.out = start_out;
|
246
|
+
|
247
|
+
/* encode full triplets */
|
248
|
+
for (i = 0; i < input_triplets; i++) {
|
249
|
+
enc_add2(&out, in[0] >> 2, (gpr_uint8)((in[0] & 0x3) << 4) | (in[1] >> 4));
|
250
|
+
enc_add2(&out, (gpr_uint8)((in[1] & 0xf) << 2) | (in[2] >> 6),
|
251
|
+
(gpr_uint8)(in[2] & 0x3f));
|
252
|
+
in += 3;
|
253
|
+
}
|
254
|
+
|
255
|
+
/* encode the remaining bytes */
|
256
|
+
switch (tail_case) {
|
257
|
+
case 0:
|
258
|
+
break;
|
259
|
+
case 1:
|
260
|
+
enc_add2(&out, in[0] >> 2, (gpr_uint8)((in[0] & 0x3) << 4));
|
261
|
+
in += 1;
|
262
|
+
break;
|
263
|
+
case 2:
|
264
|
+
enc_add2(&out, in[0] >> 2,
|
265
|
+
(gpr_uint8)((in[0] & 0x3) << 4) | (gpr_uint8)(in[1] >> 4));
|
266
|
+
enc_add1(&out, (gpr_uint8)((in[1] & 0xf) << 2));
|
267
|
+
in += 2;
|
268
|
+
break;
|
269
|
+
}
|
270
|
+
|
271
|
+
if (out.temp_length) {
|
272
|
+
/* NB: the following integer arithmetic operation needs to be in its
|
273
|
+
* expanded form due to the "integral promotion" performed (see section
|
274
|
+
* 3.2.1.1 of the C89 draft standard). A cast to the smaller container type
|
275
|
+
* is then required to avoid the compiler warning */
|
276
|
+
*out.out++ = (gpr_uint8)((gpr_uint8)(out.temp << (8u - out.temp_length)) |
|
277
|
+
(gpr_uint8)(0xffu >> out.temp_length));
|
278
|
+
}
|
279
|
+
|
280
|
+
GPR_ASSERT(out.out <= GPR_SLICE_END_PTR(output));
|
281
|
+
GPR_SLICE_SET_LENGTH(output, out.out - start_out);
|
282
|
+
|
283
|
+
GPR_ASSERT(in == GPR_SLICE_END_PTR(input));
|
284
|
+
return output;
|
285
|
+
}
|