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,74 @@
|
|
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_SURFACE_CHANNEL_H
|
35
|
+
#define GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H
|
36
|
+
|
37
|
+
#include "src/core/channel/channel_stack.h"
|
38
|
+
#include "src/core/client_config/subchannel_factory.h"
|
39
|
+
|
40
|
+
grpc_channel *grpc_channel_create_from_filters(
|
41
|
+
grpc_exec_ctx *exec_ctx, const char *target,
|
42
|
+
const grpc_channel_filter **filters, size_t count,
|
43
|
+
const grpc_channel_args *args, int is_client);
|
44
|
+
|
45
|
+
/** Get a (borrowed) pointer to this channels underlying channel stack */
|
46
|
+
grpc_channel_stack *grpc_channel_get_channel_stack(grpc_channel *channel);
|
47
|
+
|
48
|
+
/** Get a grpc_mdelem of grpc-status: X where X is the numeric value of
|
49
|
+
status_code.
|
50
|
+
|
51
|
+
The returned elem is owned by the caller. */
|
52
|
+
grpc_mdelem *grpc_channel_get_reffed_status_elem(grpc_channel *channel,
|
53
|
+
int status_code);
|
54
|
+
gpr_uint32 grpc_channel_get_max_message_length(grpc_channel *channel);
|
55
|
+
|
56
|
+
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
|
57
|
+
void grpc_channel_internal_ref(grpc_channel *channel, const char *reason);
|
58
|
+
void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx, grpc_channel *channel,
|
59
|
+
const char *reason);
|
60
|
+
#define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
|
61
|
+
grpc_channel_internal_ref(channel, reason)
|
62
|
+
#define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
|
63
|
+
grpc_channel_internal_unref(exec_ctx, channel, reason)
|
64
|
+
#else
|
65
|
+
void grpc_channel_internal_ref(grpc_channel *channel);
|
66
|
+
void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx,
|
67
|
+
grpc_channel *channel);
|
68
|
+
#define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
|
69
|
+
grpc_channel_internal_ref(channel)
|
70
|
+
#define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
|
71
|
+
grpc_channel_internal_unref(exec_ctx, channel)
|
72
|
+
#endif
|
73
|
+
|
74
|
+
#endif /* GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H */
|
@@ -0,0 +1,220 @@
|
|
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/surface/channel.h"
|
35
|
+
|
36
|
+
#include <grpc/support/alloc.h>
|
37
|
+
#include <grpc/support/log.h>
|
38
|
+
|
39
|
+
#include "src/core/channel/client_channel.h"
|
40
|
+
#include "src/core/channel/client_uchannel.h"
|
41
|
+
#include "src/core/iomgr/timer.h"
|
42
|
+
#include "src/core/surface/api_trace.h"
|
43
|
+
#include "src/core/surface/completion_queue.h"
|
44
|
+
|
45
|
+
grpc_connectivity_state grpc_channel_check_connectivity_state(
|
46
|
+
grpc_channel *channel, int try_to_connect) {
|
47
|
+
/* forward through to the underlying client channel */
|
48
|
+
grpc_channel_element *client_channel_elem =
|
49
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
50
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
51
|
+
grpc_connectivity_state state;
|
52
|
+
GRPC_API_TRACE(
|
53
|
+
"grpc_channel_check_connectivity_state(channel=%p, try_to_connect=%d)", 2,
|
54
|
+
(channel, try_to_connect));
|
55
|
+
if (client_channel_elem->filter == &grpc_client_channel_filter) {
|
56
|
+
state = grpc_client_channel_check_connectivity_state(
|
57
|
+
&exec_ctx, client_channel_elem, try_to_connect);
|
58
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
59
|
+
return state;
|
60
|
+
}
|
61
|
+
if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
|
62
|
+
state = grpc_client_uchannel_check_connectivity_state(
|
63
|
+
&exec_ctx, client_channel_elem, try_to_connect);
|
64
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
65
|
+
return state;
|
66
|
+
}
|
67
|
+
gpr_log(GPR_ERROR,
|
68
|
+
"grpc_channel_check_connectivity_state called on something that is "
|
69
|
+
"not a (u)client channel, but '%s'",
|
70
|
+
client_channel_elem->filter->name);
|
71
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
72
|
+
return GRPC_CHANNEL_FATAL_FAILURE;
|
73
|
+
}
|
74
|
+
|
75
|
+
typedef enum {
|
76
|
+
WAITING,
|
77
|
+
CALLING_BACK,
|
78
|
+
CALLING_BACK_AND_FINISHED,
|
79
|
+
CALLED_BACK
|
80
|
+
} callback_phase;
|
81
|
+
|
82
|
+
typedef struct {
|
83
|
+
gpr_mu mu;
|
84
|
+
callback_phase phase;
|
85
|
+
int success;
|
86
|
+
grpc_closure on_complete;
|
87
|
+
grpc_timer alarm;
|
88
|
+
grpc_connectivity_state state;
|
89
|
+
grpc_completion_queue *cq;
|
90
|
+
grpc_cq_completion completion_storage;
|
91
|
+
grpc_channel *channel;
|
92
|
+
void *tag;
|
93
|
+
} state_watcher;
|
94
|
+
|
95
|
+
static void delete_state_watcher(grpc_exec_ctx *exec_ctx, state_watcher *w) {
|
96
|
+
grpc_channel_element *client_channel_elem = grpc_channel_stack_last_element(
|
97
|
+
grpc_channel_get_channel_stack(w->channel));
|
98
|
+
if (client_channel_elem->filter == &grpc_client_channel_filter) {
|
99
|
+
GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, w->channel,
|
100
|
+
"watch_channel_connectivity");
|
101
|
+
} else if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
|
102
|
+
GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, w->channel,
|
103
|
+
"watch_uchannel_connectivity");
|
104
|
+
} else {
|
105
|
+
abort();
|
106
|
+
}
|
107
|
+
gpr_mu_destroy(&w->mu);
|
108
|
+
gpr_free(w);
|
109
|
+
}
|
110
|
+
|
111
|
+
static void finished_completion(grpc_exec_ctx *exec_ctx, void *pw,
|
112
|
+
grpc_cq_completion *ignored) {
|
113
|
+
int delete = 0;
|
114
|
+
state_watcher *w = pw;
|
115
|
+
gpr_mu_lock(&w->mu);
|
116
|
+
switch (w->phase) {
|
117
|
+
case WAITING:
|
118
|
+
case CALLED_BACK:
|
119
|
+
GPR_UNREACHABLE_CODE(return );
|
120
|
+
case CALLING_BACK:
|
121
|
+
w->phase = CALLED_BACK;
|
122
|
+
break;
|
123
|
+
case CALLING_BACK_AND_FINISHED:
|
124
|
+
delete = 1;
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
gpr_mu_unlock(&w->mu);
|
128
|
+
|
129
|
+
if (delete) {
|
130
|
+
delete_state_watcher(exec_ctx, w);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w,
|
135
|
+
int due_to_completion) {
|
136
|
+
int delete = 0;
|
137
|
+
|
138
|
+
if (due_to_completion) {
|
139
|
+
grpc_timer_cancel(exec_ctx, &w->alarm);
|
140
|
+
}
|
141
|
+
|
142
|
+
gpr_mu_lock(&w->mu);
|
143
|
+
if (due_to_completion) {
|
144
|
+
w->success = 1;
|
145
|
+
}
|
146
|
+
switch (w->phase) {
|
147
|
+
case WAITING:
|
148
|
+
w->phase = CALLING_BACK;
|
149
|
+
grpc_cq_end_op(exec_ctx, w->cq, w->tag, w->success, finished_completion,
|
150
|
+
w, &w->completion_storage);
|
151
|
+
break;
|
152
|
+
case CALLING_BACK:
|
153
|
+
w->phase = CALLING_BACK_AND_FINISHED;
|
154
|
+
break;
|
155
|
+
case CALLING_BACK_AND_FINISHED:
|
156
|
+
GPR_UNREACHABLE_CODE(return );
|
157
|
+
case CALLED_BACK:
|
158
|
+
delete = 1;
|
159
|
+
break;
|
160
|
+
}
|
161
|
+
gpr_mu_unlock(&w->mu);
|
162
|
+
|
163
|
+
if (delete) {
|
164
|
+
delete_state_watcher(exec_ctx, w);
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
static void watch_complete(grpc_exec_ctx *exec_ctx, void *pw, int success) {
|
169
|
+
partly_done(exec_ctx, pw, 1);
|
170
|
+
}
|
171
|
+
|
172
|
+
static void timeout_complete(grpc_exec_ctx *exec_ctx, void *pw, int success) {
|
173
|
+
partly_done(exec_ctx, pw, 0);
|
174
|
+
}
|
175
|
+
|
176
|
+
void grpc_channel_watch_connectivity_state(
|
177
|
+
grpc_channel *channel, grpc_connectivity_state last_observed_state,
|
178
|
+
gpr_timespec deadline, grpc_completion_queue *cq, void *tag) {
|
179
|
+
grpc_channel_element *client_channel_elem =
|
180
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
181
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
182
|
+
state_watcher *w = gpr_malloc(sizeof(*w));
|
183
|
+
|
184
|
+
GRPC_API_TRACE(
|
185
|
+
"grpc_channel_watch_connectivity_state("
|
186
|
+
"channel=%p, last_observed_state=%d, "
|
187
|
+
"deadline=gpr_timespec { tv_sec: %lld, tv_nsec: %d, clock_type: %d }, "
|
188
|
+
"cq=%p, tag=%p)",
|
189
|
+
7, (channel, (int)last_observed_state, (long long)deadline.tv_sec,
|
190
|
+
(int)deadline.tv_nsec, (int)deadline.clock_type, cq, tag));
|
191
|
+
|
192
|
+
grpc_cq_begin_op(cq, tag);
|
193
|
+
|
194
|
+
gpr_mu_init(&w->mu);
|
195
|
+
grpc_closure_init(&w->on_complete, watch_complete, w);
|
196
|
+
w->phase = WAITING;
|
197
|
+
w->state = last_observed_state;
|
198
|
+
w->success = 0;
|
199
|
+
w->cq = cq;
|
200
|
+
w->tag = tag;
|
201
|
+
w->channel = channel;
|
202
|
+
|
203
|
+
grpc_timer_init(&exec_ctx, &w->alarm,
|
204
|
+
gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC),
|
205
|
+
timeout_complete, w, gpr_now(GPR_CLOCK_MONOTONIC));
|
206
|
+
|
207
|
+
if (client_channel_elem->filter == &grpc_client_channel_filter) {
|
208
|
+
GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
|
209
|
+
grpc_client_channel_watch_connectivity_state(&exec_ctx, client_channel_elem,
|
210
|
+
grpc_cq_pollset(cq), &w->state,
|
211
|
+
&w->on_complete);
|
212
|
+
} else if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
|
213
|
+
GRPC_CHANNEL_INTERNAL_REF(channel, "watch_uchannel_connectivity");
|
214
|
+
grpc_client_uchannel_watch_connectivity_state(
|
215
|
+
&exec_ctx, client_channel_elem, grpc_cq_pollset(cq), &w->state,
|
216
|
+
&w->on_complete);
|
217
|
+
}
|
218
|
+
|
219
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
220
|
+
}
|
@@ -0,0 +1,235 @@
|
|
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/grpc.h>
|
35
|
+
|
36
|
+
#include <stdlib.h>
|
37
|
+
#include <string.h>
|
38
|
+
|
39
|
+
#include <grpc/support/alloc.h>
|
40
|
+
#include <grpc/support/slice.h>
|
41
|
+
#include <grpc/support/slice_buffer.h>
|
42
|
+
|
43
|
+
#include "src/core/census/grpc_filter.h"
|
44
|
+
#include "src/core/channel/channel_args.h"
|
45
|
+
#include "src/core/channel/client_channel.h"
|
46
|
+
#include "src/core/channel/compress_filter.h"
|
47
|
+
#include "src/core/channel/http_client_filter.h"
|
48
|
+
#include "src/core/client_config/resolver_registry.h"
|
49
|
+
#include "src/core/iomgr/tcp_client.h"
|
50
|
+
#include "src/core/surface/api_trace.h"
|
51
|
+
#include "src/core/surface/channel.h"
|
52
|
+
#include "src/core/transport/chttp2_transport.h"
|
53
|
+
|
54
|
+
typedef struct {
|
55
|
+
grpc_connector base;
|
56
|
+
gpr_refcount refs;
|
57
|
+
|
58
|
+
grpc_closure *notify;
|
59
|
+
grpc_connect_in_args args;
|
60
|
+
grpc_connect_out_args *result;
|
61
|
+
grpc_closure initial_string_sent;
|
62
|
+
gpr_slice_buffer initial_string_buffer;
|
63
|
+
|
64
|
+
grpc_endpoint *tcp;
|
65
|
+
|
66
|
+
grpc_closure connected;
|
67
|
+
} connector;
|
68
|
+
|
69
|
+
static void connector_ref(grpc_connector *con) {
|
70
|
+
connector *c = (connector *)con;
|
71
|
+
gpr_ref(&c->refs);
|
72
|
+
}
|
73
|
+
|
74
|
+
static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
|
75
|
+
connector *c = (connector *)con;
|
76
|
+
if (gpr_unref(&c->refs)) {
|
77
|
+
/* c->initial_string_buffer does not need to be destroyed */
|
78
|
+
gpr_free(c);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
|
83
|
+
int success) {
|
84
|
+
connector_unref(exec_ctx, arg);
|
85
|
+
}
|
86
|
+
|
87
|
+
static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
|
88
|
+
connector *c = arg;
|
89
|
+
grpc_closure *notify;
|
90
|
+
grpc_endpoint *tcp = c->tcp;
|
91
|
+
if (tcp != NULL) {
|
92
|
+
if (!GPR_SLICE_IS_EMPTY(c->args.initial_connect_string)) {
|
93
|
+
grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent,
|
94
|
+
c);
|
95
|
+
gpr_slice_buffer_init(&c->initial_string_buffer);
|
96
|
+
gpr_slice_buffer_add(&c->initial_string_buffer,
|
97
|
+
c->args.initial_connect_string);
|
98
|
+
connector_ref(arg);
|
99
|
+
grpc_endpoint_write(exec_ctx, tcp, &c->initial_string_buffer,
|
100
|
+
&c->initial_string_sent);
|
101
|
+
}
|
102
|
+
c->result->transport =
|
103
|
+
grpc_create_chttp2_transport(exec_ctx, c->args.channel_args, tcp, 1);
|
104
|
+
grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL,
|
105
|
+
0);
|
106
|
+
GPR_ASSERT(c->result->transport);
|
107
|
+
c->result->channel_args = c->args.channel_args;
|
108
|
+
c->result->filters = gpr_malloc(sizeof(grpc_channel_filter *));
|
109
|
+
c->result->filters[0] = &grpc_http_client_filter;
|
110
|
+
c->result->num_filters = 1;
|
111
|
+
} else {
|
112
|
+
memset(c->result, 0, sizeof(*c->result));
|
113
|
+
}
|
114
|
+
notify = c->notify;
|
115
|
+
c->notify = NULL;
|
116
|
+
notify->cb(exec_ctx, notify->cb_arg, 1);
|
117
|
+
}
|
118
|
+
|
119
|
+
static void connector_shutdown(grpc_exec_ctx *exec_ctx, grpc_connector *con) {}
|
120
|
+
|
121
|
+
static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con,
|
122
|
+
const grpc_connect_in_args *args,
|
123
|
+
grpc_connect_out_args *result,
|
124
|
+
grpc_closure *notify) {
|
125
|
+
connector *c = (connector *)con;
|
126
|
+
GPR_ASSERT(c->notify == NULL);
|
127
|
+
GPR_ASSERT(notify->cb);
|
128
|
+
c->notify = notify;
|
129
|
+
c->args = *args;
|
130
|
+
c->result = result;
|
131
|
+
c->tcp = NULL;
|
132
|
+
grpc_closure_init(&c->connected, connected, c);
|
133
|
+
grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp,
|
134
|
+
args->interested_parties, args->addr, args->addr_len,
|
135
|
+
args->deadline);
|
136
|
+
}
|
137
|
+
|
138
|
+
static const grpc_connector_vtable connector_vtable = {
|
139
|
+
connector_ref, connector_unref, connector_shutdown, connector_connect};
|
140
|
+
|
141
|
+
typedef struct {
|
142
|
+
grpc_subchannel_factory base;
|
143
|
+
gpr_refcount refs;
|
144
|
+
grpc_channel_args *merge_args;
|
145
|
+
grpc_channel *master;
|
146
|
+
} subchannel_factory;
|
147
|
+
|
148
|
+
static void subchannel_factory_ref(grpc_subchannel_factory *scf) {
|
149
|
+
subchannel_factory *f = (subchannel_factory *)scf;
|
150
|
+
gpr_ref(&f->refs);
|
151
|
+
}
|
152
|
+
|
153
|
+
static void subchannel_factory_unref(grpc_exec_ctx *exec_ctx,
|
154
|
+
grpc_subchannel_factory *scf) {
|
155
|
+
subchannel_factory *f = (subchannel_factory *)scf;
|
156
|
+
if (gpr_unref(&f->refs)) {
|
157
|
+
GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, f->master, "subchannel_factory");
|
158
|
+
grpc_channel_args_destroy(f->merge_args);
|
159
|
+
gpr_free(f);
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
static grpc_subchannel *subchannel_factory_create_subchannel(
|
164
|
+
grpc_exec_ctx *exec_ctx, grpc_subchannel_factory *scf,
|
165
|
+
grpc_subchannel_args *args) {
|
166
|
+
subchannel_factory *f = (subchannel_factory *)scf;
|
167
|
+
connector *c = gpr_malloc(sizeof(*c));
|
168
|
+
grpc_channel_args *final_args =
|
169
|
+
grpc_channel_args_merge(args->args, f->merge_args);
|
170
|
+
grpc_subchannel *s;
|
171
|
+
memset(c, 0, sizeof(*c));
|
172
|
+
c->base.vtable = &connector_vtable;
|
173
|
+
gpr_ref_init(&c->refs, 1);
|
174
|
+
args->args = final_args;
|
175
|
+
s = grpc_subchannel_create(&c->base, args);
|
176
|
+
grpc_connector_unref(exec_ctx, &c->base);
|
177
|
+
grpc_channel_args_destroy(final_args);
|
178
|
+
return s;
|
179
|
+
}
|
180
|
+
|
181
|
+
static const grpc_subchannel_factory_vtable subchannel_factory_vtable = {
|
182
|
+
subchannel_factory_ref, subchannel_factory_unref,
|
183
|
+
subchannel_factory_create_subchannel};
|
184
|
+
|
185
|
+
/* Create a client channel:
|
186
|
+
Asynchronously: - resolve target
|
187
|
+
- connect to it (trying alternatives as presented)
|
188
|
+
- perform handshakes */
|
189
|
+
grpc_channel *grpc_insecure_channel_create(const char *target,
|
190
|
+
const grpc_channel_args *args,
|
191
|
+
void *reserved) {
|
192
|
+
grpc_channel *channel = NULL;
|
193
|
+
#define MAX_FILTERS 3
|
194
|
+
const grpc_channel_filter *filters[MAX_FILTERS];
|
195
|
+
grpc_resolver *resolver;
|
196
|
+
subchannel_factory *f;
|
197
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
198
|
+
size_t n = 0;
|
199
|
+
GRPC_API_TRACE(
|
200
|
+
"grpc_insecure_channel_create(target=%p, args=%p, reserved=%p)", 3,
|
201
|
+
(target, args, reserved));
|
202
|
+
GPR_ASSERT(!reserved);
|
203
|
+
if (grpc_channel_args_is_census_enabled(args)) {
|
204
|
+
filters[n++] = &grpc_client_census_filter;
|
205
|
+
}
|
206
|
+
filters[n++] = &grpc_compress_filter;
|
207
|
+
filters[n++] = &grpc_client_channel_filter;
|
208
|
+
GPR_ASSERT(n <= MAX_FILTERS);
|
209
|
+
|
210
|
+
channel =
|
211
|
+
grpc_channel_create_from_filters(&exec_ctx, target, filters, n, args, 1);
|
212
|
+
|
213
|
+
f = gpr_malloc(sizeof(*f));
|
214
|
+
f->base.vtable = &subchannel_factory_vtable;
|
215
|
+
gpr_ref_init(&f->refs, 1);
|
216
|
+
f->merge_args = grpc_channel_args_copy(args);
|
217
|
+
f->master = channel;
|
218
|
+
GRPC_CHANNEL_INTERNAL_REF(f->master, "subchannel_factory");
|
219
|
+
resolver = grpc_resolver_create(target, &f->base);
|
220
|
+
if (!resolver) {
|
221
|
+
GRPC_CHANNEL_INTERNAL_UNREF(&exec_ctx, f->master, "subchannel_factory");
|
222
|
+
grpc_subchannel_factory_unref(&exec_ctx, &f->base);
|
223
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
224
|
+
return NULL;
|
225
|
+
}
|
226
|
+
|
227
|
+
grpc_client_channel_set_resolver(
|
228
|
+
&exec_ctx, grpc_channel_get_channel_stack(channel), resolver);
|
229
|
+
GRPC_RESOLVER_UNREF(&exec_ctx, resolver, "create");
|
230
|
+
grpc_subchannel_factory_unref(&exec_ctx, &f->base);
|
231
|
+
|
232
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
233
|
+
|
234
|
+
return channel;
|
235
|
+
}
|