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,125 @@
|
|
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 <grpc/support/port_platform.h>
|
35
|
+
|
36
|
+
#ifdef GPR_WIN32
|
37
|
+
|
38
|
+
#include <stdio.h>
|
39
|
+
#include <stdarg.h>
|
40
|
+
|
41
|
+
#include <grpc/support/alloc.h>
|
42
|
+
#include <grpc/support/log_win32.h>
|
43
|
+
#include <grpc/support/log.h>
|
44
|
+
#include <grpc/support/time.h>
|
45
|
+
#include <grpc/support/string_util.h>
|
46
|
+
|
47
|
+
#include "src/core/support/string.h"
|
48
|
+
#include "src/core/support/string_win32.h"
|
49
|
+
|
50
|
+
void gpr_log(const char *file, int line, gpr_log_severity severity,
|
51
|
+
const char *format, ...) {
|
52
|
+
char *message = NULL;
|
53
|
+
va_list args;
|
54
|
+
int ret;
|
55
|
+
|
56
|
+
/* Determine the length. */
|
57
|
+
va_start(args, format);
|
58
|
+
ret = _vscprintf(format, args);
|
59
|
+
va_end(args);
|
60
|
+
if (ret < 0) {
|
61
|
+
message = NULL;
|
62
|
+
} else {
|
63
|
+
/* Allocate a new buffer, with space for the NUL terminator. */
|
64
|
+
size_t strp_buflen = (size_t)ret + 1;
|
65
|
+
message = gpr_malloc(strp_buflen);
|
66
|
+
|
67
|
+
/* Print to the buffer. */
|
68
|
+
va_start(args, format);
|
69
|
+
ret = vsnprintf_s(message, strp_buflen, _TRUNCATE, format, args);
|
70
|
+
va_end(args);
|
71
|
+
if ((size_t)ret != strp_buflen - 1) {
|
72
|
+
/* This should never happen. */
|
73
|
+
gpr_free(message);
|
74
|
+
message = NULL;
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
gpr_log_message(file, line, severity, message);
|
79
|
+
gpr_free(message);
|
80
|
+
}
|
81
|
+
|
82
|
+
/* Simple starter implementation */
|
83
|
+
void gpr_default_log(gpr_log_func_args *args) {
|
84
|
+
char *final_slash;
|
85
|
+
const char *display_file;
|
86
|
+
char time_buffer[64];
|
87
|
+
time_t timer;
|
88
|
+
gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
|
89
|
+
struct tm tm;
|
90
|
+
|
91
|
+
timer = (time_t)now.tv_sec;
|
92
|
+
final_slash = strrchr(args->file, '\\');
|
93
|
+
if (final_slash == NULL)
|
94
|
+
display_file = args->file;
|
95
|
+
else
|
96
|
+
display_file = final_slash + 1;
|
97
|
+
|
98
|
+
if (localtime_s(&tm, &timer)) {
|
99
|
+
strcpy(time_buffer, "error:localtime");
|
100
|
+
} else if (0 ==
|
101
|
+
strftime(time_buffer, sizeof(time_buffer), "%m%d %H:%M:%S", &tm)) {
|
102
|
+
strcpy(time_buffer, "error:strftime");
|
103
|
+
}
|
104
|
+
|
105
|
+
fprintf(stderr, "%s%s.%09u %5lu %s:%d] %s\n",
|
106
|
+
gpr_log_severity_string(args->severity), time_buffer,
|
107
|
+
(int)(now.tv_nsec), GetCurrentThreadId(), display_file, args->line,
|
108
|
+
args->message);
|
109
|
+
}
|
110
|
+
|
111
|
+
char *gpr_format_message(DWORD messageid) {
|
112
|
+
LPTSTR tmessage;
|
113
|
+
char *message;
|
114
|
+
DWORD status = FormatMessage(
|
115
|
+
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
|
116
|
+
FORMAT_MESSAGE_IGNORE_INSERTS,
|
117
|
+
NULL, messageid, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
118
|
+
(LPTSTR)(&tmessage), 0, NULL);
|
119
|
+
if (status == 0) return gpr_strdup("Unable to retrieve error string");
|
120
|
+
message = gpr_tchar_to_char(tmessage);
|
121
|
+
LocalFree(tmessage);
|
122
|
+
return message;
|
123
|
+
}
|
124
|
+
|
125
|
+
#endif /* GPR_WIN32 */
|
@@ -0,0 +1,96 @@
|
|
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/support/murmur_hash.h"
|
35
|
+
|
36
|
+
#define ROTL32(x, r) ((x) << (r)) | ((x) >> (32 - (r)))
|
37
|
+
|
38
|
+
#define FMIX32(h) \
|
39
|
+
(h) ^= (h) >> 16; \
|
40
|
+
(h) *= 0x85ebca6b; \
|
41
|
+
(h) ^= (h) >> 13; \
|
42
|
+
(h) *= 0xc2b2ae35; \
|
43
|
+
(h) ^= (h) >> 16;
|
44
|
+
|
45
|
+
/* Block read - if your platform needs to do endian-swapping or can only
|
46
|
+
handle aligned reads, do the conversion here */
|
47
|
+
#define GETBLOCK32(p, i) (p)[(i)]
|
48
|
+
|
49
|
+
gpr_uint32 gpr_murmur_hash3(const void *key, size_t len, gpr_uint32 seed) {
|
50
|
+
const gpr_uint8 *data = (const gpr_uint8 *)key;
|
51
|
+
const size_t nblocks = len / 4;
|
52
|
+
int i;
|
53
|
+
|
54
|
+
gpr_uint32 h1 = seed;
|
55
|
+
gpr_uint32 k1;
|
56
|
+
|
57
|
+
const gpr_uint32 c1 = 0xcc9e2d51;
|
58
|
+
const gpr_uint32 c2 = 0x1b873593;
|
59
|
+
|
60
|
+
const gpr_uint32 *blocks = ((const gpr_uint32 *)key) + nblocks;
|
61
|
+
const gpr_uint8 *tail = (const gpr_uint8 *)(data + nblocks * 4);
|
62
|
+
|
63
|
+
/* body */
|
64
|
+
for (i = -(int)nblocks; i; i++) {
|
65
|
+
k1 = GETBLOCK32(blocks, i);
|
66
|
+
|
67
|
+
k1 *= c1;
|
68
|
+
k1 = ROTL32(k1, 15);
|
69
|
+
k1 *= c2;
|
70
|
+
|
71
|
+
h1 ^= k1;
|
72
|
+
h1 = ROTL32(h1, 13);
|
73
|
+
h1 = h1 * 5 + 0xe6546b64;
|
74
|
+
}
|
75
|
+
|
76
|
+
k1 = 0;
|
77
|
+
|
78
|
+
/* tail */
|
79
|
+
switch (len & 3) {
|
80
|
+
case 3:
|
81
|
+
k1 ^= ((gpr_uint32)tail[2]) << 16;
|
82
|
+
case 2:
|
83
|
+
k1 ^= ((gpr_uint32)tail[1]) << 8;
|
84
|
+
case 1:
|
85
|
+
k1 ^= tail[0];
|
86
|
+
k1 *= c1;
|
87
|
+
k1 = ROTL32(k1, 15);
|
88
|
+
k1 *= c2;
|
89
|
+
h1 ^= k1;
|
90
|
+
};
|
91
|
+
|
92
|
+
/* finalization */
|
93
|
+
h1 ^= (gpr_uint32)len;
|
94
|
+
FMIX32(h1);
|
95
|
+
return h1;
|
96
|
+
}
|
@@ -0,0 +1,44 @@
|
|
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_SUPPORT_MURMUR_HASH_H
|
35
|
+
#define GRPC_INTERNAL_CORE_SUPPORT_MURMUR_HASH_H
|
36
|
+
|
37
|
+
#include <grpc/support/port_platform.h>
|
38
|
+
|
39
|
+
#include <stddef.h>
|
40
|
+
|
41
|
+
/* compute the hash of key (length len) */
|
42
|
+
gpr_uint32 gpr_murmur_hash3(const void *key, size_t len, gpr_uint32 seed);
|
43
|
+
|
44
|
+
#endif /* GRPC_INTERNAL_CORE_SUPPORT_MURMUR_HASH_H */
|
@@ -0,0 +1,343 @@
|
|
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 <grpc/support/alloc.h>
|
35
|
+
#include <grpc/support/log.h>
|
36
|
+
#include <grpc/support/slice.h>
|
37
|
+
|
38
|
+
#include <string.h>
|
39
|
+
|
40
|
+
gpr_slice gpr_empty_slice(void) {
|
41
|
+
gpr_slice out;
|
42
|
+
out.refcount = 0;
|
43
|
+
out.data.inlined.length = 0;
|
44
|
+
return out;
|
45
|
+
}
|
46
|
+
|
47
|
+
gpr_slice gpr_slice_ref(gpr_slice slice) {
|
48
|
+
if (slice.refcount) {
|
49
|
+
slice.refcount->ref(slice.refcount);
|
50
|
+
}
|
51
|
+
return slice;
|
52
|
+
}
|
53
|
+
|
54
|
+
void gpr_slice_unref(gpr_slice slice) {
|
55
|
+
if (slice.refcount) {
|
56
|
+
slice.refcount->unref(slice.refcount);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
/* gpr_slice_from_static_string support structure - a refcount that does
|
61
|
+
nothing */
|
62
|
+
static void noop_ref_or_unref(void *unused) {}
|
63
|
+
|
64
|
+
static gpr_slice_refcount noop_refcount = {noop_ref_or_unref,
|
65
|
+
noop_ref_or_unref};
|
66
|
+
|
67
|
+
gpr_slice gpr_slice_from_static_string(const char *s) {
|
68
|
+
gpr_slice slice;
|
69
|
+
slice.refcount = &noop_refcount;
|
70
|
+
slice.data.refcounted.bytes = (gpr_uint8 *)s;
|
71
|
+
slice.data.refcounted.length = strlen(s);
|
72
|
+
return slice;
|
73
|
+
}
|
74
|
+
|
75
|
+
/* gpr_slice_new support structures - we create a refcount object extended
|
76
|
+
with the user provided data pointer & destroy function */
|
77
|
+
typedef struct new_slice_refcount {
|
78
|
+
gpr_slice_refcount rc;
|
79
|
+
gpr_refcount refs;
|
80
|
+
void (*user_destroy)(void *);
|
81
|
+
void *user_data;
|
82
|
+
} new_slice_refcount;
|
83
|
+
|
84
|
+
static void new_slice_ref(void *p) {
|
85
|
+
new_slice_refcount *r = p;
|
86
|
+
gpr_ref(&r->refs);
|
87
|
+
}
|
88
|
+
|
89
|
+
static void new_slice_unref(void *p) {
|
90
|
+
new_slice_refcount *r = p;
|
91
|
+
if (gpr_unref(&r->refs)) {
|
92
|
+
r->user_destroy(r->user_data);
|
93
|
+
gpr_free(r);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
gpr_slice gpr_slice_new(void *p, size_t len, void (*destroy)(void *)) {
|
98
|
+
gpr_slice slice;
|
99
|
+
new_slice_refcount *rc = gpr_malloc(sizeof(new_slice_refcount));
|
100
|
+
gpr_ref_init(&rc->refs, 1);
|
101
|
+
rc->rc.ref = new_slice_ref;
|
102
|
+
rc->rc.unref = new_slice_unref;
|
103
|
+
rc->user_destroy = destroy;
|
104
|
+
rc->user_data = p;
|
105
|
+
|
106
|
+
slice.refcount = &rc->rc;
|
107
|
+
slice.data.refcounted.bytes = p;
|
108
|
+
slice.data.refcounted.length = len;
|
109
|
+
return slice;
|
110
|
+
}
|
111
|
+
|
112
|
+
/* gpr_slice_new_with_len support structures - we create a refcount object
|
113
|
+
extended with the user provided data pointer & destroy function */
|
114
|
+
typedef struct new_with_len_slice_refcount {
|
115
|
+
gpr_slice_refcount rc;
|
116
|
+
gpr_refcount refs;
|
117
|
+
void *user_data;
|
118
|
+
size_t user_length;
|
119
|
+
void (*user_destroy)(void *, size_t);
|
120
|
+
} new_with_len_slice_refcount;
|
121
|
+
|
122
|
+
static void new_with_len_ref(void *p) {
|
123
|
+
new_with_len_slice_refcount *r = p;
|
124
|
+
gpr_ref(&r->refs);
|
125
|
+
}
|
126
|
+
|
127
|
+
static void new_with_len_unref(void *p) {
|
128
|
+
new_with_len_slice_refcount *r = p;
|
129
|
+
if (gpr_unref(&r->refs)) {
|
130
|
+
r->user_destroy(r->user_data, r->user_length);
|
131
|
+
gpr_free(r);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
gpr_slice gpr_slice_new_with_len(void *p, size_t len,
|
136
|
+
void (*destroy)(void *, size_t)) {
|
137
|
+
gpr_slice slice;
|
138
|
+
new_with_len_slice_refcount *rc =
|
139
|
+
gpr_malloc(sizeof(new_with_len_slice_refcount));
|
140
|
+
gpr_ref_init(&rc->refs, 1);
|
141
|
+
rc->rc.ref = new_with_len_ref;
|
142
|
+
rc->rc.unref = new_with_len_unref;
|
143
|
+
rc->user_destroy = destroy;
|
144
|
+
rc->user_data = p;
|
145
|
+
rc->user_length = len;
|
146
|
+
|
147
|
+
slice.refcount = &rc->rc;
|
148
|
+
slice.data.refcounted.bytes = p;
|
149
|
+
slice.data.refcounted.length = len;
|
150
|
+
return slice;
|
151
|
+
}
|
152
|
+
|
153
|
+
gpr_slice gpr_slice_from_copied_buffer(const char *source, size_t length) {
|
154
|
+
gpr_slice slice = gpr_slice_malloc(length);
|
155
|
+
memcpy(GPR_SLICE_START_PTR(slice), source, length);
|
156
|
+
return slice;
|
157
|
+
}
|
158
|
+
|
159
|
+
gpr_slice gpr_slice_from_copied_string(const char *source) {
|
160
|
+
return gpr_slice_from_copied_buffer(source, strlen(source));
|
161
|
+
}
|
162
|
+
|
163
|
+
typedef struct {
|
164
|
+
gpr_slice_refcount base;
|
165
|
+
gpr_refcount refs;
|
166
|
+
} malloc_refcount;
|
167
|
+
|
168
|
+
static void malloc_ref(void *p) {
|
169
|
+
malloc_refcount *r = p;
|
170
|
+
gpr_ref(&r->refs);
|
171
|
+
}
|
172
|
+
|
173
|
+
static void malloc_unref(void *p) {
|
174
|
+
malloc_refcount *r = p;
|
175
|
+
if (gpr_unref(&r->refs)) {
|
176
|
+
gpr_free(r);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
gpr_slice gpr_slice_malloc(size_t length) {
|
181
|
+
gpr_slice slice;
|
182
|
+
|
183
|
+
if (length > sizeof(slice.data.inlined.bytes)) {
|
184
|
+
/* Memory layout used by the slice created here:
|
185
|
+
|
186
|
+
+-----------+----------------------------------------------------------+
|
187
|
+
| refcount | bytes |
|
188
|
+
+-----------+----------------------------------------------------------+
|
189
|
+
|
190
|
+
refcount is a malloc_refcount
|
191
|
+
bytes is an array of bytes of the requested length
|
192
|
+
Both parts are placed in the same allocation returned from gpr_malloc */
|
193
|
+
malloc_refcount *rc = gpr_malloc(sizeof(malloc_refcount) + length);
|
194
|
+
|
195
|
+
/* Initial refcount on rc is 1 - and it's up to the caller to release
|
196
|
+
this reference. */
|
197
|
+
gpr_ref_init(&rc->refs, 1);
|
198
|
+
|
199
|
+
rc->base.ref = malloc_ref;
|
200
|
+
rc->base.unref = malloc_unref;
|
201
|
+
|
202
|
+
/* Build up the slice to be returned. */
|
203
|
+
/* The slices refcount points back to the allocated block. */
|
204
|
+
slice.refcount = &rc->base;
|
205
|
+
/* The data bytes are placed immediately after the refcount struct */
|
206
|
+
slice.data.refcounted.bytes = (gpr_uint8 *)(rc + 1);
|
207
|
+
/* And the length of the block is set to the requested length */
|
208
|
+
slice.data.refcounted.length = length;
|
209
|
+
} else {
|
210
|
+
/* small slice: just inline the data */
|
211
|
+
slice.refcount = NULL;
|
212
|
+
slice.data.inlined.length = (gpr_uint8)length;
|
213
|
+
}
|
214
|
+
return slice;
|
215
|
+
}
|
216
|
+
|
217
|
+
gpr_slice gpr_slice_sub_no_ref(gpr_slice source, size_t begin, size_t end) {
|
218
|
+
gpr_slice subset;
|
219
|
+
|
220
|
+
GPR_ASSERT(end >= begin);
|
221
|
+
|
222
|
+
if (source.refcount) {
|
223
|
+
/* Enforce preconditions */
|
224
|
+
GPR_ASSERT(source.data.refcounted.length >= end);
|
225
|
+
|
226
|
+
/* Build the result */
|
227
|
+
subset.refcount = source.refcount;
|
228
|
+
/* Point into the source array */
|
229
|
+
subset.data.refcounted.bytes = source.data.refcounted.bytes + begin;
|
230
|
+
subset.data.refcounted.length = end - begin;
|
231
|
+
} else {
|
232
|
+
/* Enforce preconditions */
|
233
|
+
GPR_ASSERT(source.data.inlined.length >= end);
|
234
|
+
subset.refcount = NULL;
|
235
|
+
subset.data.inlined.length = (gpr_uint8)(end - begin);
|
236
|
+
memcpy(subset.data.inlined.bytes, source.data.inlined.bytes + begin,
|
237
|
+
end - begin);
|
238
|
+
}
|
239
|
+
return subset;
|
240
|
+
}
|
241
|
+
|
242
|
+
gpr_slice gpr_slice_sub(gpr_slice source, size_t begin, size_t end) {
|
243
|
+
gpr_slice subset;
|
244
|
+
|
245
|
+
if (end - begin <= sizeof(subset.data.inlined.bytes)) {
|
246
|
+
subset.refcount = NULL;
|
247
|
+
subset.data.inlined.length = (gpr_uint8)(end - begin);
|
248
|
+
memcpy(subset.data.inlined.bytes, GPR_SLICE_START_PTR(source) + begin,
|
249
|
+
end - begin);
|
250
|
+
} else {
|
251
|
+
subset = gpr_slice_sub_no_ref(source, begin, end);
|
252
|
+
/* Bump the refcount */
|
253
|
+
subset.refcount->ref(subset.refcount);
|
254
|
+
}
|
255
|
+
return subset;
|
256
|
+
}
|
257
|
+
|
258
|
+
gpr_slice gpr_slice_split_tail(gpr_slice *source, size_t split) {
|
259
|
+
gpr_slice tail;
|
260
|
+
|
261
|
+
if (source->refcount == NULL) {
|
262
|
+
/* inlined data, copy it out */
|
263
|
+
GPR_ASSERT(source->data.inlined.length >= split);
|
264
|
+
tail.refcount = NULL;
|
265
|
+
tail.data.inlined.length = (gpr_uint8)(source->data.inlined.length - split);
|
266
|
+
memcpy(tail.data.inlined.bytes, source->data.inlined.bytes + split,
|
267
|
+
tail.data.inlined.length);
|
268
|
+
source->data.inlined.length = (gpr_uint8)split;
|
269
|
+
} else {
|
270
|
+
size_t tail_length = source->data.refcounted.length - split;
|
271
|
+
GPR_ASSERT(source->data.refcounted.length >= split);
|
272
|
+
if (tail_length < sizeof(tail.data.inlined.bytes)) {
|
273
|
+
/* Copy out the bytes - it'll be cheaper than refcounting */
|
274
|
+
tail.refcount = NULL;
|
275
|
+
tail.data.inlined.length = (gpr_uint8)tail_length;
|
276
|
+
memcpy(tail.data.inlined.bytes, source->data.refcounted.bytes + split,
|
277
|
+
tail_length);
|
278
|
+
} else {
|
279
|
+
/* Build the result */
|
280
|
+
tail.refcount = source->refcount;
|
281
|
+
/* Bump the refcount */
|
282
|
+
tail.refcount->ref(tail.refcount);
|
283
|
+
/* Point into the source array */
|
284
|
+
tail.data.refcounted.bytes = source->data.refcounted.bytes + split;
|
285
|
+
tail.data.refcounted.length = tail_length;
|
286
|
+
}
|
287
|
+
source->data.refcounted.length = split;
|
288
|
+
}
|
289
|
+
|
290
|
+
return tail;
|
291
|
+
}
|
292
|
+
|
293
|
+
gpr_slice gpr_slice_split_head(gpr_slice *source, size_t split) {
|
294
|
+
gpr_slice head;
|
295
|
+
|
296
|
+
if (source->refcount == NULL) {
|
297
|
+
GPR_ASSERT(source->data.inlined.length >= split);
|
298
|
+
|
299
|
+
head.refcount = NULL;
|
300
|
+
head.data.inlined.length = (gpr_uint8)split;
|
301
|
+
memcpy(head.data.inlined.bytes, source->data.inlined.bytes, split);
|
302
|
+
source->data.inlined.length =
|
303
|
+
(gpr_uint8)(source->data.inlined.length - split);
|
304
|
+
memmove(source->data.inlined.bytes, source->data.inlined.bytes + split,
|
305
|
+
source->data.inlined.length);
|
306
|
+
} else if (split < sizeof(head.data.inlined.bytes)) {
|
307
|
+
GPR_ASSERT(source->data.refcounted.length >= split);
|
308
|
+
|
309
|
+
head.refcount = NULL;
|
310
|
+
head.data.inlined.length = (gpr_uint8)split;
|
311
|
+
memcpy(head.data.inlined.bytes, source->data.refcounted.bytes, split);
|
312
|
+
source->data.refcounted.bytes += split;
|
313
|
+
source->data.refcounted.length -= split;
|
314
|
+
} else {
|
315
|
+
GPR_ASSERT(source->data.refcounted.length >= split);
|
316
|
+
|
317
|
+
/* Build the result */
|
318
|
+
head.refcount = source->refcount;
|
319
|
+
/* Bump the refcount */
|
320
|
+
head.refcount->ref(head.refcount);
|
321
|
+
/* Point into the source array */
|
322
|
+
head.data.refcounted.bytes = source->data.refcounted.bytes;
|
323
|
+
head.data.refcounted.length = split;
|
324
|
+
source->data.refcounted.bytes += split;
|
325
|
+
source->data.refcounted.length -= split;
|
326
|
+
}
|
327
|
+
|
328
|
+
return head;
|
329
|
+
}
|
330
|
+
|
331
|
+
int gpr_slice_cmp(gpr_slice a, gpr_slice b) {
|
332
|
+
int d = (int)(GPR_SLICE_LENGTH(a) - GPR_SLICE_LENGTH(b));
|
333
|
+
if (d != 0) return d;
|
334
|
+
return memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
|
335
|
+
GPR_SLICE_LENGTH(a));
|
336
|
+
}
|
337
|
+
|
338
|
+
int gpr_slice_str_cmp(gpr_slice a, const char *b) {
|
339
|
+
size_t b_length = strlen(b);
|
340
|
+
int d = (int)(GPR_SLICE_LENGTH(a) - b_length);
|
341
|
+
if (d != 0) return d;
|
342
|
+
return memcmp(GPR_SLICE_START_PTR(a), b, b_length);
|
343
|
+
}
|