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,162 @@
|
|
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_HTTPCLI_HTTPCLI_H
|
35
|
+
#define GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_H
|
36
|
+
|
37
|
+
#include <stddef.h>
|
38
|
+
|
39
|
+
#include <grpc/support/time.h>
|
40
|
+
|
41
|
+
#include "src/core/iomgr/endpoint.h"
|
42
|
+
#include "src/core/iomgr/pollset_set.h"
|
43
|
+
|
44
|
+
/* User agent this library reports */
|
45
|
+
#define GRPC_HTTPCLI_USER_AGENT "grpc-httpcli/0.0"
|
46
|
+
/* Maximum length of a header string of the form 'Key: Value\r\n' */
|
47
|
+
#define GRPC_HTTPCLI_MAX_HEADER_LENGTH 4096
|
48
|
+
|
49
|
+
/* A single header to be passed in a request */
|
50
|
+
typedef struct grpc_httpcli_header {
|
51
|
+
char *key;
|
52
|
+
char *value;
|
53
|
+
} grpc_httpcli_header;
|
54
|
+
|
55
|
+
/* Tracks in-progress http requests
|
56
|
+
TODO(ctiller): allow caching and capturing multiple requests for the
|
57
|
+
same content and combining them */
|
58
|
+
typedef struct grpc_httpcli_context {
|
59
|
+
grpc_pollset_set pollset_set;
|
60
|
+
} grpc_httpcli_context;
|
61
|
+
|
62
|
+
typedef struct {
|
63
|
+
const char *default_port;
|
64
|
+
void (*handshake)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint,
|
65
|
+
const char *host,
|
66
|
+
void (*on_done)(grpc_exec_ctx *exec_ctx, void *arg,
|
67
|
+
grpc_endpoint *endpoint));
|
68
|
+
} grpc_httpcli_handshaker;
|
69
|
+
|
70
|
+
extern const grpc_httpcli_handshaker grpc_httpcli_plaintext;
|
71
|
+
extern const grpc_httpcli_handshaker grpc_httpcli_ssl;
|
72
|
+
|
73
|
+
/* A request */
|
74
|
+
typedef struct grpc_httpcli_request {
|
75
|
+
/* The host name to connect to */
|
76
|
+
char *host;
|
77
|
+
/* The host to verify in the SSL handshake (or NULL) */
|
78
|
+
char *ssl_host_override;
|
79
|
+
/* The path of the resource to fetch */
|
80
|
+
char *path;
|
81
|
+
/* Additional headers: count and key/values; the following are supplied
|
82
|
+
automatically and MUST NOT be set here:
|
83
|
+
Host, Connection, User-Agent */
|
84
|
+
size_t hdr_count;
|
85
|
+
grpc_httpcli_header *hdrs;
|
86
|
+
/* handshaker to use ssl for the request */
|
87
|
+
const grpc_httpcli_handshaker *handshaker;
|
88
|
+
} grpc_httpcli_request;
|
89
|
+
|
90
|
+
/* A response */
|
91
|
+
typedef struct grpc_httpcli_response {
|
92
|
+
/* HTTP status code */
|
93
|
+
int status;
|
94
|
+
/* Headers: count and key/values */
|
95
|
+
size_t hdr_count;
|
96
|
+
grpc_httpcli_header *hdrs;
|
97
|
+
/* Body: length and contents; contents are NOT null-terminated */
|
98
|
+
size_t body_length;
|
99
|
+
char *body;
|
100
|
+
} grpc_httpcli_response;
|
101
|
+
|
102
|
+
/* Callback for grpc_httpcli_get and grpc_httpcli_post. */
|
103
|
+
typedef void (*grpc_httpcli_response_cb)(grpc_exec_ctx *exec_ctx,
|
104
|
+
void *user_data,
|
105
|
+
const grpc_httpcli_response *response);
|
106
|
+
|
107
|
+
void grpc_httpcli_context_init(grpc_httpcli_context *context);
|
108
|
+
void grpc_httpcli_context_destroy(grpc_httpcli_context *context);
|
109
|
+
|
110
|
+
/* Asynchronously perform a HTTP GET.
|
111
|
+
'context' specifies the http context under which to do the get
|
112
|
+
'pollset' indicates a grpc_pollset that is interested in the result
|
113
|
+
of the get - work on this pollset may be used to progress the get
|
114
|
+
operation
|
115
|
+
'request' contains request parameters - these are caller owned and can be
|
116
|
+
destroyed once the call returns
|
117
|
+
'deadline' contains a deadline for the request (or gpr_inf_future)
|
118
|
+
'on_response' is a callback to report results to (and 'user_data' is a user
|
119
|
+
supplied pointer to pass to said call) */
|
120
|
+
void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context,
|
121
|
+
grpc_pollset *pollset,
|
122
|
+
const grpc_httpcli_request *request,
|
123
|
+
gpr_timespec deadline,
|
124
|
+
grpc_httpcli_response_cb on_response, void *user_data);
|
125
|
+
|
126
|
+
/* Asynchronously perform a HTTP POST.
|
127
|
+
'context' specifies the http context under which to do the post
|
128
|
+
'pollset' indicates a grpc_pollset that is interested in the result
|
129
|
+
of the post - work on this pollset may be used to progress the post
|
130
|
+
operation
|
131
|
+
'request' contains request parameters - these are caller owned and can be
|
132
|
+
destroyed once the call returns
|
133
|
+
'body_bytes' and 'body_size' specify the payload for the post.
|
134
|
+
When there is no body, pass in NULL as body_bytes.
|
135
|
+
'deadline' contains a deadline for the request (or gpr_inf_future)
|
136
|
+
'em' points to a caller owned event manager that must be alive for the
|
137
|
+
lifetime of the request
|
138
|
+
'on_response' is a callback to report results to (and 'user_data' is a user
|
139
|
+
supplied pointer to pass to said call)
|
140
|
+
Does not support ?var1=val1&var2=val2 in the path. */
|
141
|
+
void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context,
|
142
|
+
grpc_pollset *pollset,
|
143
|
+
const grpc_httpcli_request *request,
|
144
|
+
const char *body_bytes, size_t body_size,
|
145
|
+
gpr_timespec deadline,
|
146
|
+
grpc_httpcli_response_cb on_response, void *user_data);
|
147
|
+
|
148
|
+
/* override functions return 1 if they handled the request, 0 otherwise */
|
149
|
+
typedef int (*grpc_httpcli_get_override)(grpc_exec_ctx *exec_ctx,
|
150
|
+
const grpc_httpcli_request *request,
|
151
|
+
gpr_timespec deadline,
|
152
|
+
grpc_httpcli_response_cb on_response,
|
153
|
+
void *user_data);
|
154
|
+
typedef int (*grpc_httpcli_post_override)(
|
155
|
+
grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
|
156
|
+
const char *body_bytes, size_t body_size, gpr_timespec deadline,
|
157
|
+
grpc_httpcli_response_cb on_response, void *user_data);
|
158
|
+
|
159
|
+
void grpc_httpcli_set_override(grpc_httpcli_get_override get,
|
160
|
+
grpc_httpcli_post_override post);
|
161
|
+
|
162
|
+
#endif /* GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_H */
|
@@ -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
|
+
#include "src/core/httpcli/httpcli.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include "src/core/security/handshake.h"
|
39
|
+
#include "src/core/support/string.h"
|
40
|
+
#include <grpc/support/alloc.h>
|
41
|
+
#include <grpc/support/log.h>
|
42
|
+
#include <grpc/support/string_util.h>
|
43
|
+
#include "src/core/tsi/ssl_transport_security.h"
|
44
|
+
|
45
|
+
typedef struct {
|
46
|
+
grpc_channel_security_connector base;
|
47
|
+
tsi_ssl_handshaker_factory *handshaker_factory;
|
48
|
+
char *secure_peer_name;
|
49
|
+
} grpc_httpcli_ssl_channel_security_connector;
|
50
|
+
|
51
|
+
static void httpcli_ssl_destroy(grpc_security_connector *sc) {
|
52
|
+
grpc_httpcli_ssl_channel_security_connector *c =
|
53
|
+
(grpc_httpcli_ssl_channel_security_connector *)sc;
|
54
|
+
if (c->handshaker_factory != NULL) {
|
55
|
+
tsi_ssl_handshaker_factory_destroy(c->handshaker_factory);
|
56
|
+
}
|
57
|
+
if (c->secure_peer_name != NULL) gpr_free(c->secure_peer_name);
|
58
|
+
gpr_free(sc);
|
59
|
+
}
|
60
|
+
|
61
|
+
static void httpcli_ssl_do_handshake(grpc_exec_ctx *exec_ctx,
|
62
|
+
grpc_security_connector *sc,
|
63
|
+
grpc_endpoint *nonsecure_endpoint,
|
64
|
+
grpc_security_handshake_done_cb cb,
|
65
|
+
void *user_data) {
|
66
|
+
grpc_httpcli_ssl_channel_security_connector *c =
|
67
|
+
(grpc_httpcli_ssl_channel_security_connector *)sc;
|
68
|
+
tsi_result result = TSI_OK;
|
69
|
+
tsi_handshaker *handshaker;
|
70
|
+
if (c->handshaker_factory == NULL) {
|
71
|
+
cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL);
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
result = tsi_ssl_handshaker_factory_create_handshaker(
|
75
|
+
c->handshaker_factory, c->secure_peer_name, &handshaker);
|
76
|
+
if (result != TSI_OK) {
|
77
|
+
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
78
|
+
tsi_result_to_string(result));
|
79
|
+
cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL);
|
80
|
+
} else {
|
81
|
+
grpc_do_security_handshake(exec_ctx, handshaker, sc, nonsecure_endpoint, cb,
|
82
|
+
user_data);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
static void httpcli_ssl_check_peer(grpc_exec_ctx *exec_ctx,
|
87
|
+
grpc_security_connector *sc,
|
88
|
+
tsi_peer peer,
|
89
|
+
grpc_security_peer_check_cb cb,
|
90
|
+
void *user_data) {
|
91
|
+
grpc_httpcli_ssl_channel_security_connector *c =
|
92
|
+
(grpc_httpcli_ssl_channel_security_connector *)sc;
|
93
|
+
grpc_security_status status = GRPC_SECURITY_OK;
|
94
|
+
|
95
|
+
/* Check the peer name. */
|
96
|
+
if (c->secure_peer_name != NULL &&
|
97
|
+
!tsi_ssl_peer_matches_name(&peer, c->secure_peer_name)) {
|
98
|
+
gpr_log(GPR_ERROR, "Peer name %s is not in peer certificate",
|
99
|
+
c->secure_peer_name);
|
100
|
+
status = GRPC_SECURITY_ERROR;
|
101
|
+
}
|
102
|
+
cb(exec_ctx, user_data, status, NULL);
|
103
|
+
tsi_peer_destruct(&peer);
|
104
|
+
}
|
105
|
+
|
106
|
+
static grpc_security_connector_vtable httpcli_ssl_vtable = {
|
107
|
+
httpcli_ssl_destroy, httpcli_ssl_do_handshake, httpcli_ssl_check_peer};
|
108
|
+
|
109
|
+
static grpc_security_status httpcli_ssl_channel_security_connector_create(
|
110
|
+
const unsigned char *pem_root_certs, size_t pem_root_certs_size,
|
111
|
+
const char *secure_peer_name, grpc_channel_security_connector **sc) {
|
112
|
+
tsi_result result = TSI_OK;
|
113
|
+
grpc_httpcli_ssl_channel_security_connector *c;
|
114
|
+
|
115
|
+
if (secure_peer_name != NULL && pem_root_certs == NULL) {
|
116
|
+
gpr_log(GPR_ERROR,
|
117
|
+
"Cannot assert a secure peer name without a trust root.");
|
118
|
+
return GRPC_SECURITY_ERROR;
|
119
|
+
}
|
120
|
+
|
121
|
+
c = gpr_malloc(sizeof(grpc_httpcli_ssl_channel_security_connector));
|
122
|
+
memset(c, 0, sizeof(grpc_httpcli_ssl_channel_security_connector));
|
123
|
+
|
124
|
+
gpr_ref_init(&c->base.base.refcount, 1);
|
125
|
+
c->base.base.is_client_side = 1;
|
126
|
+
c->base.base.vtable = &httpcli_ssl_vtable;
|
127
|
+
if (secure_peer_name != NULL) {
|
128
|
+
c->secure_peer_name = gpr_strdup(secure_peer_name);
|
129
|
+
}
|
130
|
+
result = tsi_create_ssl_client_handshaker_factory(
|
131
|
+
NULL, 0, NULL, 0, pem_root_certs, pem_root_certs_size, NULL, NULL, NULL,
|
132
|
+
0, &c->handshaker_factory);
|
133
|
+
if (result != TSI_OK) {
|
134
|
+
gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
|
135
|
+
tsi_result_to_string(result));
|
136
|
+
httpcli_ssl_destroy(&c->base.base);
|
137
|
+
*sc = NULL;
|
138
|
+
return GRPC_SECURITY_ERROR;
|
139
|
+
}
|
140
|
+
*sc = &c->base;
|
141
|
+
return GRPC_SECURITY_OK;
|
142
|
+
}
|
143
|
+
|
144
|
+
/* handshaker */
|
145
|
+
|
146
|
+
typedef struct {
|
147
|
+
void (*func)(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *endpoint);
|
148
|
+
void *arg;
|
149
|
+
} on_done_closure;
|
150
|
+
|
151
|
+
static void on_secure_transport_setup_done(grpc_exec_ctx *exec_ctx, void *rp,
|
152
|
+
grpc_security_status status,
|
153
|
+
grpc_endpoint *secure_endpoint,
|
154
|
+
grpc_auth_context *auth_context) {
|
155
|
+
on_done_closure *c = rp;
|
156
|
+
if (status != GRPC_SECURITY_OK) {
|
157
|
+
gpr_log(GPR_ERROR, "Secure transport setup failed with error %d.", status);
|
158
|
+
c->func(exec_ctx, c->arg, NULL);
|
159
|
+
} else {
|
160
|
+
c->func(exec_ctx, c->arg, secure_endpoint);
|
161
|
+
}
|
162
|
+
gpr_free(c);
|
163
|
+
}
|
164
|
+
|
165
|
+
static void ssl_handshake(grpc_exec_ctx *exec_ctx, void *arg,
|
166
|
+
grpc_endpoint *tcp, const char *host,
|
167
|
+
void (*on_done)(grpc_exec_ctx *exec_ctx, void *arg,
|
168
|
+
grpc_endpoint *endpoint)) {
|
169
|
+
grpc_channel_security_connector *sc = NULL;
|
170
|
+
const unsigned char *pem_root_certs = NULL;
|
171
|
+
on_done_closure *c = gpr_malloc(sizeof(*c));
|
172
|
+
size_t pem_root_certs_size = grpc_get_default_ssl_roots(&pem_root_certs);
|
173
|
+
if (pem_root_certs == NULL || pem_root_certs_size == 0) {
|
174
|
+
gpr_log(GPR_ERROR, "Could not get default pem root certs.");
|
175
|
+
on_done(exec_ctx, arg, NULL);
|
176
|
+
gpr_free(c);
|
177
|
+
return;
|
178
|
+
}
|
179
|
+
c->func = on_done;
|
180
|
+
c->arg = arg;
|
181
|
+
GPR_ASSERT(httpcli_ssl_channel_security_connector_create(
|
182
|
+
pem_root_certs, pem_root_certs_size, host, &sc) ==
|
183
|
+
GRPC_SECURITY_OK);
|
184
|
+
grpc_security_connector_do_handshake(exec_ctx, &sc->base, tcp,
|
185
|
+
on_secure_transport_setup_done, c);
|
186
|
+
GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "httpcli");
|
187
|
+
}
|
188
|
+
|
189
|
+
const grpc_httpcli_handshaker grpc_httpcli_ssl = {"https", ssl_handshake};
|
@@ -0,0 +1,211 @@
|
|
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/httpcli/parser.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include <grpc/support/alloc.h>
|
39
|
+
#include <grpc/support/log.h>
|
40
|
+
#include <grpc/support/useful.h>
|
41
|
+
|
42
|
+
static int handle_response_line(grpc_httpcli_parser *parser) {
|
43
|
+
gpr_uint8 *beg = parser->cur_line;
|
44
|
+
gpr_uint8 *cur = beg;
|
45
|
+
gpr_uint8 *end = beg + parser->cur_line_length;
|
46
|
+
|
47
|
+
if (cur == end || *cur++ != 'H') goto error;
|
48
|
+
if (cur == end || *cur++ != 'T') goto error;
|
49
|
+
if (cur == end || *cur++ != 'T') goto error;
|
50
|
+
if (cur == end || *cur++ != 'P') goto error;
|
51
|
+
if (cur == end || *cur++ != '/') goto error;
|
52
|
+
if (cur == end || *cur++ != '1') goto error;
|
53
|
+
if (cur == end || *cur++ != '.') goto error;
|
54
|
+
if (cur == end || *cur < '0' || *cur++ > '1') goto error;
|
55
|
+
if (cur == end || *cur++ != ' ') goto error;
|
56
|
+
if (cur == end || *cur < '1' || *cur++ > '9') goto error;
|
57
|
+
if (cur == end || *cur < '0' || *cur++ > '9') goto error;
|
58
|
+
if (cur == end || *cur < '0' || *cur++ > '9') goto error;
|
59
|
+
parser->r.status =
|
60
|
+
(cur[-3] - '0') * 100 + (cur[-2] - '0') * 10 + (cur[-1] - '0');
|
61
|
+
if (cur == end || *cur++ != ' ') goto error;
|
62
|
+
|
63
|
+
/* we don't really care about the status code message */
|
64
|
+
|
65
|
+
return 1;
|
66
|
+
|
67
|
+
error:
|
68
|
+
gpr_log(GPR_ERROR, "Failed parsing response line");
|
69
|
+
return 0;
|
70
|
+
}
|
71
|
+
|
72
|
+
static char *buf2str(void *buffer, size_t length) {
|
73
|
+
char *out = gpr_malloc(length + 1);
|
74
|
+
memcpy(out, buffer, length);
|
75
|
+
out[length] = 0;
|
76
|
+
return out;
|
77
|
+
}
|
78
|
+
|
79
|
+
static int add_header(grpc_httpcli_parser *parser) {
|
80
|
+
gpr_uint8 *beg = parser->cur_line;
|
81
|
+
gpr_uint8 *cur = beg;
|
82
|
+
gpr_uint8 *end = beg + parser->cur_line_length;
|
83
|
+
grpc_httpcli_header hdr = {NULL, NULL};
|
84
|
+
|
85
|
+
GPR_ASSERT(cur != end);
|
86
|
+
|
87
|
+
if (*cur == ' ' || *cur == '\t') {
|
88
|
+
gpr_log(GPR_ERROR, "Continued header lines not supported yet");
|
89
|
+
goto error;
|
90
|
+
}
|
91
|
+
|
92
|
+
while (cur != end && *cur != ':') {
|
93
|
+
cur++;
|
94
|
+
}
|
95
|
+
if (cur == end) {
|
96
|
+
gpr_log(GPR_ERROR, "Didn't find ':' in header string");
|
97
|
+
goto error;
|
98
|
+
}
|
99
|
+
GPR_ASSERT(cur >= beg);
|
100
|
+
hdr.key = buf2str(beg, (size_t)(cur - beg));
|
101
|
+
cur++; /* skip : */
|
102
|
+
|
103
|
+
while (cur != end && (*cur == ' ' || *cur == '\t')) {
|
104
|
+
cur++;
|
105
|
+
}
|
106
|
+
GPR_ASSERT(end - cur >= 2);
|
107
|
+
hdr.value = buf2str(cur, (size_t)(end - cur) - 2);
|
108
|
+
|
109
|
+
if (parser->r.hdr_count == parser->hdr_capacity) {
|
110
|
+
parser->hdr_capacity =
|
111
|
+
GPR_MAX(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2);
|
112
|
+
parser->r.hdrs = gpr_realloc(
|
113
|
+
parser->r.hdrs, parser->hdr_capacity * sizeof(*parser->r.hdrs));
|
114
|
+
}
|
115
|
+
parser->r.hdrs[parser->r.hdr_count++] = hdr;
|
116
|
+
return 1;
|
117
|
+
|
118
|
+
error:
|
119
|
+
gpr_free(hdr.key);
|
120
|
+
gpr_free(hdr.value);
|
121
|
+
return 0;
|
122
|
+
}
|
123
|
+
|
124
|
+
static int finish_line(grpc_httpcli_parser *parser) {
|
125
|
+
switch (parser->state) {
|
126
|
+
case GRPC_HTTPCLI_INITIAL_RESPONSE:
|
127
|
+
if (!handle_response_line(parser)) {
|
128
|
+
return 0;
|
129
|
+
}
|
130
|
+
parser->state = GRPC_HTTPCLI_HEADERS;
|
131
|
+
break;
|
132
|
+
case GRPC_HTTPCLI_HEADERS:
|
133
|
+
if (parser->cur_line_length == 2) {
|
134
|
+
parser->state = GRPC_HTTPCLI_BODY;
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
if (!add_header(parser)) {
|
138
|
+
return 0;
|
139
|
+
}
|
140
|
+
break;
|
141
|
+
case GRPC_HTTPCLI_BODY:
|
142
|
+
GPR_UNREACHABLE_CODE(return 0);
|
143
|
+
}
|
144
|
+
|
145
|
+
parser->cur_line_length = 0;
|
146
|
+
return 1;
|
147
|
+
}
|
148
|
+
|
149
|
+
static int addbyte(grpc_httpcli_parser *parser, gpr_uint8 byte) {
|
150
|
+
switch (parser->state) {
|
151
|
+
case GRPC_HTTPCLI_INITIAL_RESPONSE:
|
152
|
+
case GRPC_HTTPCLI_HEADERS:
|
153
|
+
if (parser->cur_line_length >= GRPC_HTTPCLI_MAX_HEADER_LENGTH) {
|
154
|
+
gpr_log(GPR_ERROR, "HTTP client max line length (%d) exceeded",
|
155
|
+
GRPC_HTTPCLI_MAX_HEADER_LENGTH);
|
156
|
+
return 0;
|
157
|
+
}
|
158
|
+
parser->cur_line[parser->cur_line_length] = byte;
|
159
|
+
parser->cur_line_length++;
|
160
|
+
if (parser->cur_line_length >= 2 &&
|
161
|
+
parser->cur_line[parser->cur_line_length - 2] == '\r' &&
|
162
|
+
parser->cur_line[parser->cur_line_length - 1] == '\n') {
|
163
|
+
return finish_line(parser);
|
164
|
+
} else {
|
165
|
+
return 1;
|
166
|
+
}
|
167
|
+
GPR_UNREACHABLE_CODE(return 0);
|
168
|
+
case GRPC_HTTPCLI_BODY:
|
169
|
+
if (parser->r.body_length == parser->body_capacity) {
|
170
|
+
parser->body_capacity = GPR_MAX(8, parser->body_capacity * 3 / 2);
|
171
|
+
parser->r.body =
|
172
|
+
gpr_realloc((void *)parser->r.body, parser->body_capacity);
|
173
|
+
}
|
174
|
+
parser->r.body[parser->r.body_length] = (char)byte;
|
175
|
+
parser->r.body_length++;
|
176
|
+
return 1;
|
177
|
+
}
|
178
|
+
GPR_UNREACHABLE_CODE(return 0);
|
179
|
+
}
|
180
|
+
|
181
|
+
void grpc_httpcli_parser_init(grpc_httpcli_parser *parser) {
|
182
|
+
memset(parser, 0, sizeof(*parser));
|
183
|
+
parser->state = GRPC_HTTPCLI_INITIAL_RESPONSE;
|
184
|
+
parser->r.status = 500;
|
185
|
+
}
|
186
|
+
|
187
|
+
void grpc_httpcli_parser_destroy(grpc_httpcli_parser *parser) {
|
188
|
+
size_t i;
|
189
|
+
gpr_free(parser->r.body);
|
190
|
+
for (i = 0; i < parser->r.hdr_count; i++) {
|
191
|
+
gpr_free(parser->r.hdrs[i].key);
|
192
|
+
gpr_free(parser->r.hdrs[i].value);
|
193
|
+
}
|
194
|
+
gpr_free(parser->r.hdrs);
|
195
|
+
}
|
196
|
+
|
197
|
+
int grpc_httpcli_parser_parse(grpc_httpcli_parser *parser, gpr_slice slice) {
|
198
|
+
size_t i;
|
199
|
+
|
200
|
+
for (i = 0; i < GPR_SLICE_LENGTH(slice); i++) {
|
201
|
+
if (!addbyte(parser, GPR_SLICE_START_PTR(slice)[i])) {
|
202
|
+
return 0;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
return 1;
|
207
|
+
}
|
208
|
+
|
209
|
+
int grpc_httpcli_parser_eof(grpc_httpcli_parser *parser) {
|
210
|
+
return parser->state == GRPC_HTTPCLI_BODY;
|
211
|
+
}
|