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,189 @@
|
|
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_IOMGR_FD_POSIX_H
|
35
|
+
#define GRPC_INTERNAL_CORE_IOMGR_FD_POSIX_H
|
36
|
+
|
37
|
+
#include "src/core/iomgr/iomgr_internal.h"
|
38
|
+
#include "src/core/iomgr/pollset.h"
|
39
|
+
#include <grpc/support/atm.h>
|
40
|
+
#include <grpc/support/sync.h>
|
41
|
+
#include <grpc/support/time.h>
|
42
|
+
|
43
|
+
typedef struct grpc_fd grpc_fd;
|
44
|
+
|
45
|
+
typedef struct grpc_fd_watcher {
|
46
|
+
struct grpc_fd_watcher *next;
|
47
|
+
struct grpc_fd_watcher *prev;
|
48
|
+
grpc_pollset *pollset;
|
49
|
+
grpc_pollset_worker *worker;
|
50
|
+
grpc_fd *fd;
|
51
|
+
} grpc_fd_watcher;
|
52
|
+
|
53
|
+
struct grpc_fd {
|
54
|
+
int fd;
|
55
|
+
/* refst format:
|
56
|
+
bit0: 1=active/0=orphaned
|
57
|
+
bit1-n: refcount
|
58
|
+
meaning that mostly we ref by two to avoid altering the orphaned bit,
|
59
|
+
and just unref by 1 when we're ready to flag the object as orphaned */
|
60
|
+
gpr_atm refst;
|
61
|
+
|
62
|
+
gpr_mu mu;
|
63
|
+
int shutdown;
|
64
|
+
int closed;
|
65
|
+
int released;
|
66
|
+
|
67
|
+
/* The watcher list.
|
68
|
+
|
69
|
+
The following watcher related fields are protected by watcher_mu.
|
70
|
+
|
71
|
+
An fd_watcher is an ephemeral object created when an fd wants to
|
72
|
+
begin polling, and destroyed after the poll.
|
73
|
+
|
74
|
+
It denotes the fd's interest in whether to read poll or write poll
|
75
|
+
or both or neither on this fd.
|
76
|
+
|
77
|
+
If a watcher is asked to poll for reads or writes, the read_watcher
|
78
|
+
or write_watcher fields are set respectively. A watcher may be asked
|
79
|
+
to poll for both, in which case both fields will be set.
|
80
|
+
|
81
|
+
read_watcher and write_watcher may be NULL if no watcher has been
|
82
|
+
asked to poll for reads or writes.
|
83
|
+
|
84
|
+
If an fd_watcher is not asked to poll for reads or writes, it's added
|
85
|
+
to a linked list of inactive watchers, rooted at inactive_watcher_root.
|
86
|
+
If at a later time there becomes need of a poller to poll, one of
|
87
|
+
the inactive pollers may be kicked out of their poll loops to take
|
88
|
+
that responsibility. */
|
89
|
+
grpc_fd_watcher inactive_watcher_root;
|
90
|
+
grpc_fd_watcher *read_watcher;
|
91
|
+
grpc_fd_watcher *write_watcher;
|
92
|
+
|
93
|
+
grpc_closure *read_closure;
|
94
|
+
grpc_closure *write_closure;
|
95
|
+
|
96
|
+
struct grpc_fd *freelist_next;
|
97
|
+
|
98
|
+
grpc_closure *on_done_closure;
|
99
|
+
|
100
|
+
grpc_iomgr_object iomgr_object;
|
101
|
+
};
|
102
|
+
|
103
|
+
/* Create a wrapped file descriptor.
|
104
|
+
Requires fd is a non-blocking file descriptor.
|
105
|
+
This takes ownership of closing fd. */
|
106
|
+
grpc_fd *grpc_fd_create(int fd, const char *name);
|
107
|
+
|
108
|
+
/* Releases fd to be asynchronously destroyed.
|
109
|
+
on_done is called when the underlying file descriptor is definitely close()d.
|
110
|
+
If on_done is NULL, no callback will be made.
|
111
|
+
If release_fd is not NULL, it's set to fd and fd will not be closed.
|
112
|
+
Requires: *fd initialized; no outstanding notify_on_read or
|
113
|
+
notify_on_write.
|
114
|
+
MUST NOT be called with a pollset lock taken */
|
115
|
+
void grpc_fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure *on_done,
|
116
|
+
int *release_fd, const char *reason);
|
117
|
+
|
118
|
+
/* Begin polling on an fd.
|
119
|
+
Registers that the given pollset is interested in this fd - so that if read
|
120
|
+
or writability interest changes, the pollset can be kicked to pick up that
|
121
|
+
new interest.
|
122
|
+
Return value is:
|
123
|
+
(fd_needs_read? read_mask : 0) | (fd_needs_write? write_mask : 0)
|
124
|
+
i.e. a combination of read_mask and write_mask determined by the fd's current
|
125
|
+
interest in said events.
|
126
|
+
Polling strategies that do not need to alter their behavior depending on the
|
127
|
+
fd's current interest (such as epoll) do not need to call this function.
|
128
|
+
MUST NOT be called with a pollset lock taken */
|
129
|
+
gpr_uint32 grpc_fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset,
|
130
|
+
grpc_pollset_worker *worker, gpr_uint32 read_mask,
|
131
|
+
gpr_uint32 write_mask, grpc_fd_watcher *rec);
|
132
|
+
/* Complete polling previously started with grpc_fd_begin_poll
|
133
|
+
MUST NOT be called with a pollset lock taken
|
134
|
+
if got_read or got_write are 1, also does the become_{readable,writable} as
|
135
|
+
appropriate. */
|
136
|
+
void grpc_fd_end_poll(grpc_exec_ctx *exec_ctx, grpc_fd_watcher *rec,
|
137
|
+
int got_read, int got_write);
|
138
|
+
|
139
|
+
/* Return 1 if this fd is orphaned, 0 otherwise */
|
140
|
+
int grpc_fd_is_orphaned(grpc_fd *fd);
|
141
|
+
|
142
|
+
/* Cause any current callbacks to error out with GRPC_CALLBACK_CANCELLED. */
|
143
|
+
void grpc_fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd);
|
144
|
+
|
145
|
+
/* Register read interest, causing read_cb to be called once when fd becomes
|
146
|
+
readable, on deadline specified by deadline, or on shutdown triggered by
|
147
|
+
grpc_fd_shutdown.
|
148
|
+
read_cb will be called with read_cb_arg when *fd becomes readable.
|
149
|
+
read_cb is Called with status of GRPC_CALLBACK_SUCCESS if readable,
|
150
|
+
GRPC_CALLBACK_TIMED_OUT if the call timed out,
|
151
|
+
and CANCELLED if the call was cancelled.
|
152
|
+
|
153
|
+
Requires:This method must not be called before the read_cb for any previous
|
154
|
+
call runs. Edge triggered events are used whenever they are supported by the
|
155
|
+
underlying platform. This means that users must drain fd in read_cb before
|
156
|
+
calling notify_on_read again. Users are also expected to handle spurious
|
157
|
+
events, i.e read_cb is called while nothing can be readable from fd */
|
158
|
+
void grpc_fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
|
159
|
+
grpc_closure *closure);
|
160
|
+
|
161
|
+
/* Exactly the same semantics as above, except based on writable events. */
|
162
|
+
void grpc_fd_notify_on_write(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
|
163
|
+
grpc_closure *closure);
|
164
|
+
|
165
|
+
/* Notification from the poller to an fd that it has become readable or
|
166
|
+
writable.
|
167
|
+
If allow_synchronous_callback is 1, allow running the fd callback inline
|
168
|
+
in this callstack, otherwise register an asynchronous callback and return */
|
169
|
+
void grpc_fd_become_readable(grpc_exec_ctx *exec_ctx, grpc_fd *fd);
|
170
|
+
void grpc_fd_become_writable(grpc_exec_ctx *exec_ctx, grpc_fd *fd);
|
171
|
+
|
172
|
+
/* Reference counting for fds */
|
173
|
+
/*#define GRPC_FD_REF_COUNT_DEBUG*/
|
174
|
+
#ifdef GRPC_FD_REF_COUNT_DEBUG
|
175
|
+
void grpc_fd_ref(grpc_fd *fd, const char *reason, const char *file, int line);
|
176
|
+
void grpc_fd_unref(grpc_fd *fd, const char *reason, const char *file, int line);
|
177
|
+
#define GRPC_FD_REF(fd, reason) grpc_fd_ref(fd, reason, __FILE__, __LINE__)
|
178
|
+
#define GRPC_FD_UNREF(fd, reason) grpc_fd_unref(fd, reason, __FILE__, __LINE__)
|
179
|
+
#else
|
180
|
+
void grpc_fd_ref(grpc_fd *fd);
|
181
|
+
void grpc_fd_unref(grpc_fd *fd);
|
182
|
+
#define GRPC_FD_REF(fd, reason) grpc_fd_ref(fd)
|
183
|
+
#define GRPC_FD_UNREF(fd, reason) grpc_fd_unref(fd)
|
184
|
+
#endif
|
185
|
+
|
186
|
+
void grpc_fd_global_init(void);
|
187
|
+
void grpc_fd_global_shutdown(void);
|
188
|
+
|
189
|
+
#endif /* GRPC_INTERNAL_CORE_IOMGR_FD_POSIX_H */
|
@@ -0,0 +1,206 @@
|
|
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_WINSOCK_SOCKET
|
37
|
+
|
38
|
+
#include <winsock2.h>
|
39
|
+
|
40
|
+
#include <grpc/support/log.h>
|
41
|
+
#include <grpc/support/log_win32.h>
|
42
|
+
#include <grpc/support/alloc.h>
|
43
|
+
#include <grpc/support/thd.h>
|
44
|
+
|
45
|
+
#include "src/core/iomgr/timer_internal.h"
|
46
|
+
#include "src/core/iomgr/iocp_windows.h"
|
47
|
+
#include "src/core/iomgr/iomgr_internal.h"
|
48
|
+
#include "src/core/iomgr/socket_windows.h"
|
49
|
+
|
50
|
+
static ULONG g_iocp_kick_token;
|
51
|
+
static OVERLAPPED g_iocp_custom_overlap;
|
52
|
+
|
53
|
+
static gpr_atm g_custom_events = 0;
|
54
|
+
|
55
|
+
static HANDLE g_iocp;
|
56
|
+
|
57
|
+
static DWORD deadline_to_millis_timeout(gpr_timespec deadline,
|
58
|
+
gpr_timespec now) {
|
59
|
+
gpr_timespec timeout;
|
60
|
+
static const int max_spin_polling_us = 10;
|
61
|
+
if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) == 0) {
|
62
|
+
return INFINITE;
|
63
|
+
}
|
64
|
+
if (gpr_time_cmp(deadline, gpr_time_add(now, gpr_time_from_micros(
|
65
|
+
max_spin_polling_us,
|
66
|
+
GPR_TIMESPAN))) <= 0) {
|
67
|
+
return 0;
|
68
|
+
}
|
69
|
+
timeout = gpr_time_sub(deadline, now);
|
70
|
+
return gpr_time_to_millis(gpr_time_add(
|
71
|
+
timeout, gpr_time_from_nanos(GPR_NS_PER_MS - 1, GPR_TIMESPAN)));
|
72
|
+
}
|
73
|
+
|
74
|
+
void grpc_iocp_work(grpc_exec_ctx *exec_ctx, gpr_timespec deadline) {
|
75
|
+
BOOL success;
|
76
|
+
DWORD bytes = 0;
|
77
|
+
DWORD flags = 0;
|
78
|
+
ULONG_PTR completion_key;
|
79
|
+
LPOVERLAPPED overlapped;
|
80
|
+
grpc_winsocket *socket;
|
81
|
+
grpc_winsocket_callback_info *info;
|
82
|
+
grpc_closure *closure = NULL;
|
83
|
+
success = GetQueuedCompletionStatus(
|
84
|
+
g_iocp, &bytes, &completion_key, &overlapped,
|
85
|
+
deadline_to_millis_timeout(deadline, gpr_now(deadline.clock_type)));
|
86
|
+
if (success == 0 && overlapped == NULL) {
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
GPR_ASSERT(completion_key && overlapped);
|
90
|
+
if (overlapped == &g_iocp_custom_overlap) {
|
91
|
+
gpr_atm_full_fetch_add(&g_custom_events, -1);
|
92
|
+
if (completion_key == (ULONG_PTR)&g_iocp_kick_token) {
|
93
|
+
/* We were awoken from a kick. */
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
gpr_log(GPR_ERROR, "Unknown custom completion key.");
|
97
|
+
abort();
|
98
|
+
}
|
99
|
+
|
100
|
+
socket = (grpc_winsocket *)completion_key;
|
101
|
+
if (overlapped == &socket->write_info.overlapped) {
|
102
|
+
info = &socket->write_info;
|
103
|
+
} else if (overlapped == &socket->read_info.overlapped) {
|
104
|
+
info = &socket->read_info;
|
105
|
+
} else {
|
106
|
+
gpr_log(GPR_ERROR, "Unknown IOCP operation");
|
107
|
+
abort();
|
108
|
+
}
|
109
|
+
success = WSAGetOverlappedResult(socket->socket, &info->overlapped, &bytes,
|
110
|
+
FALSE, &flags);
|
111
|
+
info->bytes_transfered = bytes;
|
112
|
+
info->wsa_error = success ? 0 : WSAGetLastError();
|
113
|
+
GPR_ASSERT(overlapped == &info->overlapped);
|
114
|
+
GPR_ASSERT(!info->has_pending_iocp);
|
115
|
+
gpr_mu_lock(&socket->state_mu);
|
116
|
+
if (info->closure) {
|
117
|
+
closure = info->closure;
|
118
|
+
info->closure = NULL;
|
119
|
+
} else {
|
120
|
+
info->has_pending_iocp = 1;
|
121
|
+
}
|
122
|
+
gpr_mu_unlock(&socket->state_mu);
|
123
|
+
grpc_exec_ctx_enqueue(exec_ctx, closure, 1);
|
124
|
+
}
|
125
|
+
|
126
|
+
void grpc_iocp_init(void) {
|
127
|
+
g_iocp =
|
128
|
+
CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, (ULONG_PTR)NULL, 0);
|
129
|
+
GPR_ASSERT(g_iocp);
|
130
|
+
}
|
131
|
+
|
132
|
+
void grpc_iocp_kick(void) {
|
133
|
+
BOOL success;
|
134
|
+
|
135
|
+
gpr_atm_full_fetch_add(&g_custom_events, 1);
|
136
|
+
success = PostQueuedCompletionStatus(g_iocp, 0, (ULONG_PTR)&g_iocp_kick_token,
|
137
|
+
&g_iocp_custom_overlap);
|
138
|
+
GPR_ASSERT(success);
|
139
|
+
}
|
140
|
+
|
141
|
+
void grpc_iocp_flush(void) {
|
142
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
143
|
+
|
144
|
+
do {
|
145
|
+
grpc_iocp_work(&exec_ctx, gpr_inf_past(GPR_CLOCK_MONOTONIC));
|
146
|
+
} while (grpc_exec_ctx_flush(&exec_ctx));
|
147
|
+
}
|
148
|
+
|
149
|
+
void grpc_iocp_shutdown(void) {
|
150
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
151
|
+
while (gpr_atm_acq_load(&g_custom_events)) {
|
152
|
+
grpc_iocp_work(&exec_ctx, gpr_inf_future(GPR_CLOCK_MONOTONIC));
|
153
|
+
grpc_exec_ctx_flush(&exec_ctx);
|
154
|
+
}
|
155
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
156
|
+
GPR_ASSERT(CloseHandle(g_iocp));
|
157
|
+
}
|
158
|
+
|
159
|
+
void grpc_iocp_add_socket(grpc_winsocket *socket) {
|
160
|
+
HANDLE ret;
|
161
|
+
if (socket->added_to_iocp) return;
|
162
|
+
ret = CreateIoCompletionPort((HANDLE)socket->socket, g_iocp,
|
163
|
+
(gpr_uintptr)socket, 0);
|
164
|
+
if (!ret) {
|
165
|
+
char *utf8_message = gpr_format_message(WSAGetLastError());
|
166
|
+
gpr_log(GPR_ERROR, "Unable to add socket to iocp: %s", utf8_message);
|
167
|
+
gpr_free(utf8_message);
|
168
|
+
__debugbreak();
|
169
|
+
abort();
|
170
|
+
}
|
171
|
+
socket->added_to_iocp = 1;
|
172
|
+
GPR_ASSERT(ret == g_iocp);
|
173
|
+
}
|
174
|
+
|
175
|
+
/* Calling notify_on_read or write means either of two things:
|
176
|
+
-) The IOCP already completed in the background, and we need to call
|
177
|
+
the callback now.
|
178
|
+
-) The IOCP hasn't completed yet, and we're queuing it for later. */
|
179
|
+
static void socket_notify_on_iocp(grpc_exec_ctx *exec_ctx,
|
180
|
+
grpc_winsocket *socket, grpc_closure *closure,
|
181
|
+
grpc_winsocket_callback_info *info) {
|
182
|
+
int run_now = 0;
|
183
|
+
GPR_ASSERT(info->closure == NULL);
|
184
|
+
gpr_mu_lock(&socket->state_mu);
|
185
|
+
if (info->has_pending_iocp) {
|
186
|
+
run_now = 1;
|
187
|
+
info->has_pending_iocp = 0;
|
188
|
+
grpc_exec_ctx_enqueue(exec_ctx, closure, 1);
|
189
|
+
} else {
|
190
|
+
info->closure = closure;
|
191
|
+
}
|
192
|
+
gpr_mu_unlock(&socket->state_mu);
|
193
|
+
}
|
194
|
+
|
195
|
+
void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx,
|
196
|
+
grpc_winsocket *socket,
|
197
|
+
grpc_closure *closure) {
|
198
|
+
socket_notify_on_iocp(exec_ctx, socket, closure, &socket->write_info);
|
199
|
+
}
|
200
|
+
|
201
|
+
void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_winsocket *socket,
|
202
|
+
grpc_closure *closure) {
|
203
|
+
socket_notify_on_iocp(exec_ctx, socket, closure, &socket->read_info);
|
204
|
+
}
|
205
|
+
|
206
|
+
#endif /* GPR_WINSOCK_SOCKET */
|
@@ -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
|
+
#ifndef GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H
|
35
|
+
#define GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H
|
36
|
+
|
37
|
+
#include <grpc/support/sync.h>
|
38
|
+
|
39
|
+
#include "src/core/iomgr/socket_windows.h"
|
40
|
+
|
41
|
+
void grpc_iocp_work(grpc_exec_ctx *exec_ctx, gpr_timespec deadline);
|
42
|
+
void grpc_iocp_init(void);
|
43
|
+
void grpc_iocp_kick(void);
|
44
|
+
void grpc_iocp_flush(void);
|
45
|
+
void grpc_iocp_shutdown(void);
|
46
|
+
void grpc_iocp_add_socket(grpc_winsocket *);
|
47
|
+
|
48
|
+
void grpc_socket_notify_on_write(grpc_exec_ctx *exec_ctx,
|
49
|
+
grpc_winsocket *winsocket,
|
50
|
+
grpc_closure *closure);
|
51
|
+
|
52
|
+
void grpc_socket_notify_on_read(grpc_exec_ctx *exec_ctx,
|
53
|
+
grpc_winsocket *winsocket,
|
54
|
+
grpc_closure *closure);
|
55
|
+
|
56
|
+
#endif /* GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H */
|