aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Makefile371
-rw-r--r--README.md17
-rw-r--r--build.json112
-rw-r--r--examples/pubsub/main.cc11
-rw-r--r--examples/pubsub/publisher_test.cc2
-rw-r--r--src/compiler/python_generator.cc330
-rw-r--r--src/compiler/python_generator.h51
-rw-r--r--src/compiler/python_plugin.cc87
-rw-r--r--src/core/README.md9
-rw-r--r--src/core/security/credentials.c6
-rw-r--r--src/core/security/json_token.c9
-rw-r--r--src/core/support/cpu_posix.c2
-rw-r--r--src/core/surface/call.c9
-rw-r--r--src/core/transport/chttp2/frame_data.c2
-rw-r--r--src/core/transport/chttp2_transport.c2
-rw-r--r--src/core/tsi/ssl_transport_security.c2
-rw-r--r--src/cpp/README.md9
-rw-r--r--src/cpp/server/server.cc156
-rw-r--r--src/csharp/GrpcApi/MathExamples.cs4
-rw-r--r--src/csharp/GrpcApi/MathGrpc.cs16
-rw-r--r--src/csharp/GrpcApi/MathServiceImpl.cs6
-rw-r--r--src/csharp/GrpcApi/Properties/AssemblyInfo.cs4
-rw-r--r--src/csharp/GrpcApi/TestServiceGrpc.cs23
-rw-r--r--src/csharp/GrpcApiTests/MathClientServerTests.cs8
-rw-r--r--src/csharp/GrpcApiTests/Properties/AssemblyInfo.cs4
-rw-r--r--src/csharp/GrpcCore/Call.cs4
-rw-r--r--src/csharp/GrpcCore/Calls.cs4
-rw-r--r--src/csharp/GrpcCore/Channel.cs4
-rw-r--r--src/csharp/GrpcCore/ClientStreamingAsyncResult.cs2
-rw-r--r--src/csharp/GrpcCore/GrpcEnvironment.cs4
-rw-r--r--src/csharp/GrpcCore/Internal/AsyncCall.cs14
-rw-r--r--src/csharp/GrpcCore/Internal/BatchContextSafeHandleNotOwned.cs4
-rw-r--r--src/csharp/GrpcCore/Internal/CallSafeHandle.cs6
-rw-r--r--src/csharp/GrpcCore/Internal/ChannelSafeHandle.cs2
-rw-r--r--src/csharp/GrpcCore/Internal/ClientStreamingInputObserver.cs4
-rw-r--r--src/csharp/GrpcCore/Internal/CompletionQueueSafeHandle.cs2
-rw-r--r--src/csharp/GrpcCore/Internal/Enums.cs2
-rw-r--r--src/csharp/GrpcCore/Internal/GrpcThreadPool.cs6
-rw-r--r--src/csharp/GrpcCore/Internal/SafeHandleZeroIsInvalid.cs2
-rw-r--r--src/csharp/GrpcCore/Internal/ServerSafeHandle.cs6
-rw-r--r--src/csharp/GrpcCore/Internal/ServerStreamingOutputObserver.cs6
-rw-r--r--src/csharp/GrpcCore/Internal/Timespec.cs2
-rw-r--r--src/csharp/GrpcCore/Marshaller.cs2
-rw-r--r--src/csharp/GrpcCore/Method.cs2
-rw-r--r--src/csharp/GrpcCore/Properties/AssemblyInfo.cs4
-rw-r--r--src/csharp/GrpcCore/RpcException.cs2
-rw-r--r--src/csharp/GrpcCore/Server.cs10
-rw-r--r--src/csharp/GrpcCore/ServerCallHandler.cs6
-rw-r--r--src/csharp/GrpcCore/ServerCalls.cs2
-rw-r--r--src/csharp/GrpcCore/ServerServiceDefinition.cs2
-rw-r--r--src/csharp/GrpcCore/Status.cs2
-rw-r--r--src/csharp/GrpcCore/StatusCode.cs40
-rw-r--r--src/csharp/GrpcCore/Utils/RecordingObserver.cs4
-rw-r--r--src/csharp/GrpcCore/Utils/RecordingQueue.cs2
-rw-r--r--src/csharp/GrpcCoreTests/ClientServerTest.cs14
-rw-r--r--src/csharp/GrpcCoreTests/GrpcEnvironmentTest.cs6
-rw-r--r--src/csharp/GrpcCoreTests/Properties/AssemblyInfo.cs4
-rw-r--r--src/csharp/GrpcCoreTests/ServerTest.cs10
-rw-r--r--src/csharp/GrpcCoreTests/TestResult.xml6
-rw-r--r--src/csharp/GrpcCoreTests/TimespecTest.cs6
-rw-r--r--src/csharp/InteropClient/Client.cs8
-rw-r--r--src/csharp/InteropClient/InteropClient.csproj9
-rw-r--r--src/csharp/InteropClient/Properties/AssemblyInfo.cs4
-rw-r--r--src/csharp/MathClient/MathClient.cs2
-rw-r--r--src/csharp/MathClient/Properties/AssemblyInfo.cs4
-rwxr-xr-xsrc/csharp/README.md4
-rw-r--r--src/node/.jshintrc28
-rw-r--r--src/node/README.md4
-rw-r--r--src/node/examples/math_server.js5
-rw-r--r--src/node/examples/perf_test.js33
-rw-r--r--src/node/examples/stock_server.js2
-rw-r--r--src/node/ext/node_grpc.cc1
-rw-r--r--src/node/index.js2
-rw-r--r--src/node/interop/interop_client.js7
-rw-r--r--src/node/interop/interop_server.js2
-rw-r--r--src/node/package.json14
-rw-r--r--src/node/src/client.js23
-rw-r--r--src/node/src/common.js2
-rw-r--r--src/node/src/server.js12
-rw-r--r--src/node/test/call_test.js2
-rw-r--r--src/node/test/channel_test.js2
-rw-r--r--src/node/test/constant_test.js2
-rw-r--r--src/node/test/end_to_end_test.js4
-rw-r--r--src/node/test/interop_sanity_test.js2
-rw-r--r--src/node/test/math_client_test.js4
-rw-r--r--src/node/test/surface_test.js4
-rw-r--r--src/objective-c/GRPCClient/GRPCCall.h2
-rw-r--r--src/objective-c/GRPCClient/GRPCCall.m2
-rw-r--r--src/objective-c/GRPCClient/GRPCMethodName.h2
-rw-r--r--src/objective-c/GRPCClient/GRPCMethodName.m2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannel.h2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannel.m2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCCompletionQueue.h2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCCompletionQueue.m2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCDelegateWrapper.h2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCDelegateWrapper.m4
-rw-r--r--src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.h2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.m2
-rw-r--r--src/objective-c/GRPCClient/private/NSData+GRPC.h2
-rw-r--r--src/objective-c/GRPCClient/private/NSData+GRPC.m2
-rw-r--r--src/objective-c/GRPCClient/private/NSDictionary+GRPC.h2
-rw-r--r--src/objective-c/GRPCClient/private/NSDictionary+GRPC.m2
-rw-r--r--src/objective-c/GRPCClient/private/NSError+GRPC.h2
-rw-r--r--src/objective-c/GRPCClient/private/NSError+GRPC.m2
-rw-r--r--src/objective-c/RxLibrary/GRXImmediateWriter.h2
-rw-r--r--src/objective-c/RxLibrary/GRXImmediateWriter.m2
-rw-r--r--src/objective-c/RxLibrary/GRXWriteable.h2
-rw-r--r--src/objective-c/RxLibrary/GRXWriteable.m2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter+Immediate.h2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter+Immediate.m2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter+Transformations.h2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter+Transformations.m2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter.h2
-rw-r--r--src/objective-c/RxLibrary/GRXWriter.m2
-rw-r--r--src/objective-c/RxLibrary/NSEnumerator+GRXUtil.h2
-rw-r--r--src/objective-c/RxLibrary/NSEnumerator+GRXUtil.m2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.h2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.m2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSFastEnumerator.h2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSFastEnumerator.m2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.h2
-rw-r--r--src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.m2
-rw-r--r--src/objective-c/RxLibrary/transformations/GRXMappingWriter.h2
-rw-r--r--src/objective-c/RxLibrary/transformations/GRXMappingWriter.m2
-rwxr-xr-xsrc/php/README.md10
-rwxr-xr-xsrc/python/README.md34
-rw-r--r--src/python/interop/interop/methods.py79
-rw-r--r--src/python/interop/interop/server.py17
-rw-r--r--src/python/src/grpc/_adapter/_c.c9
-rw-r--r--src/python/src/grpc/_adapter/_call.c59
-rw-r--r--src/python/src/grpc/_adapter/_channel.c12
-rw-r--r--src/python/src/grpc/_adapter/_completion_queue.c132
-rw-r--r--src/python/src/grpc/_adapter/_server.c36
-rw-r--r--src/python/src/grpc/_adapter/_server_credentials.c21
-rw-r--r--src/python/src/grpc/early_adopter/_face_utilities.py107
-rw-r--r--src/python/src/grpc/early_adopter/implementations.py10
-rw-r--r--src/python/src/grpc/early_adopter/interfaces.py41
-rw-r--r--src/python/src/grpc/early_adopter/utilities.py150
-rw-r--r--src/python/src/grpc/framework/base/interfaces_test_case.py (renamed from src/python/src/grpc/framework/base/interfaces_test.py)0
-rw-r--r--src/python/src/grpc/framework/base/packets/implementations_test.py6
-rwxr-xr-xsrc/ruby/README.md39
-rwxr-xr-xsrc/ruby/bin/interop/interop_client.rb4
-rwxr-xr-xsrc/ruby/grpc.gemspec8
-rw-r--r--templates/Makefile.template14
-rw-r--r--test/core/iomgr/tcp_posix_test.c2
-rw-r--r--test/core/security/fetch_oauth2.c2
-rw-r--r--test/core/statistics/hash_table_test.c4
-rw-r--r--test/cpp/client/channel_arguments_test.cc12
-rw-r--r--test/cpp/end2end/async_end2end_test.cc12
-rw-r--r--test/cpp/interop/client.cc11
-rw-r--r--test/cpp/interop/interop_test.c135
-rw-r--r--test/cpp/interop/server.cc11
-rw-r--r--test/cpp/qps/client.cc11
-rw-r--r--test/cpp/qps/server.cc11
-rwxr-xr-xtools/distrib/check_copyright.py1
-rw-r--r--tools/dockerfile/grpc_base/README.md3
-rw-r--r--tools/run_tests/tests.json4
-rw-r--r--vsprojects/vs2013/Grpc.mak12
-rw-r--r--vsprojects/vs2013/gpr.vcxproj1
-rw-r--r--vsprojects/vs2013/gpr.vcxproj.filters3
-rw-r--r--vsprojects/vs2013/gpr_shared.vcxproj1
-rw-r--r--vsprojects/vs2013/gpr_shared.vcxproj.filters3
-rw-r--r--vsprojects/vs2013/grpc.sln16
163 files changed, 1895 insertions, 862 deletions
diff --git a/Makefile b/Makefile
index a1b8fbbbc5..110d5f48ab 100644
--- a/Makefile
+++ b/Makefile
@@ -86,7 +86,6 @@ CXX_tsan = clang++
LD_tsan = clang
LDXX_tsan = clang++
CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer
-OPENSSL_CONFIG_tsan = no-asm
LDFLAGS_tsan = -fsanitize=thread
DEFINES_tsan = NDEBUG
@@ -97,7 +96,6 @@ CXX_asan = clang++
LD_asan = clang
LDXX_asan = clang++
CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer
-OPENSSL_CONFIG_asan = no-asm
LDFLAGS_asan = -fsanitize=address
DEFINES_asan = NDEBUG
@@ -109,7 +107,6 @@ LD_msan = clang
LDXX_msan = clang++-libc++
CPPFLAGS_msan = -O1 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1
OPENSSL_CFLAGS_msan = -DPURIFY
-OPENSSL_CONFIG_msan = no-asm
LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1
DEFINES_msan = NDEBUG
@@ -121,7 +118,6 @@ LD_ubsan = clang
LDXX_ubsan = clang++
CPPFLAGS_ubsan = -O1 -fsanitize=undefined -fno-omit-frame-pointer
OPENSSL_CFLAGS_ubsan = -DPURIFY
-OPENSSL_CONFIG_ubsan = no-asm
LDFLAGS_ubsan = -fsanitize=undefined
DEFINES_ubsan = NDEBUG
@@ -332,7 +328,7 @@ endif
.SECONDARY = %.pb.h %.pb.cc
-PROTOC_PLUGINS = $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
+PROTOC_PLUGINS = $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(BINDIR)/$(CONFIG)/grpc_python_plugin $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
ifeq ($(DEP_MISSING),)
all: static shared plugins
dep_error:
@@ -475,6 +471,7 @@ hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test
httpcli_format_request_test: $(BINDIR)/$(CONFIG)/httpcli_format_request_test
httpcli_parser_test: $(BINDIR)/$(CONFIG)/httpcli_parser_test
httpcli_test: $(BINDIR)/$(CONFIG)/httpcli_test
+interop_test: $(BINDIR)/$(CONFIG)/interop_test
json_rewrite: $(BINDIR)/$(CONFIG)/json_rewrite
json_rewrite_test: $(BINDIR)/$(CONFIG)/json_rewrite_test
json_test: $(BINDIR)/$(CONFIG)/json_test
@@ -498,9 +495,11 @@ timeout_encoding_test: $(BINDIR)/$(CONFIG)/timeout_encoding_test
transport_metadata_test: $(BINDIR)/$(CONFIG)/transport_metadata_test
async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test
channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test
-grpc_cpp_plugin: $(BINDIR)/$(CONFIG)/grpc_cpp_plugin
credentials_test: $(BINDIR)/$(CONFIG)/credentials_test
end2end_test: $(BINDIR)/$(CONFIG)/end2end_test
+grpc_cpp_plugin: $(BINDIR)/$(CONFIG)/grpc_cpp_plugin
+grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin
+grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
interop_client: $(BINDIR)/$(CONFIG)/interop_client
interop_server: $(BINDIR)/$(CONFIG)/interop_server
pubsub_client: $(BINDIR)/$(CONFIG)/pubsub_client
@@ -508,7 +507,6 @@ pubsub_publisher_test: $(BINDIR)/$(CONFIG)/pubsub_publisher_test
pubsub_subscriber_test: $(BINDIR)/$(CONFIG)/pubsub_subscriber_test
qps_client: $(BINDIR)/$(CONFIG)/qps_client
qps_server: $(BINDIR)/$(CONFIG)/qps_server
-grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
status_test: $(BINDIR)/$(CONFIG)/status_test
thread_pool_test: $(BINDIR)/$(CONFIG)/thread_pool_test
chttp2_fake_security_cancel_after_accept_test: $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test
@@ -866,9 +864,9 @@ $(LIBDIR)/$(CONFIG)/zlib/libz.a:
$(LIBDIR)/$(CONFIG)/openssl/libssl.a:
$(E) "[MAKE] Building openssl for $(SYSTEM)"
ifeq ($(SYSTEM),Darwin)
- $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc $(OPENSSL_CONFIG_$(CONFIG)))
+ $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc)
else
- $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config $(OPENSSL_CONFIG_$(CONFIG)))
+ $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config no-asm $(OPENSSL_CONFIG_$(CONFIG)))
endif
$(Q)$(MAKE) -C third_party/openssl clean
$(Q)$(MAKE) -C third_party/openssl build_crypto build_ssl
@@ -915,7 +913,7 @@ privatelibs_cxx: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/
buildtests: buildtests_c buildtests_cxx
-buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/census_hash_table_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_test $(BINDIR)/$(CONFIG)/census_statistics_performance_test $(BINDIR)/$(CONFIG)/census_statistics_quick_test $(BINDIR)/$(CONFIG)/census_statistics_small_log_test $(BINDIR)/$(CONFIG)/census_stub_test $(BINDIR)/$(CONFIG)/census_window_stats_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/chttp2_transport_end2end_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/echo_client $(BINDIR)/$(CONFIG)/echo_server $(BINDIR)/$(CONFIG)/echo_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cancellable_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/metadata_buffer_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/poll_kick_posix_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/time_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test
+buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/census_hash_table_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_test $(BINDIR)/$(CONFIG)/census_statistics_performance_test $(BINDIR)/$(CONFIG)/census_statistics_quick_test $(BINDIR)/$(CONFIG)/census_statistics_small_log_test $(BINDIR)/$(CONFIG)/census_stub_test $(BINDIR)/$(CONFIG)/census_window_stats_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/chttp2_transport_end2end_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/echo_client $(BINDIR)/$(CONFIG)/echo_server $(BINDIR)/$(CONFIG)/echo_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cancellable_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/metadata_buffer_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/poll_kick_posix_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/time_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test
buildtests_cxx: privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/pubsub_client $(BINDIR)/$(CONFIG)/pubsub_publisher_test $(BINDIR)/$(CONFIG)/pubsub_subscriber_test $(BINDIR)/$(CONFIG)/qps_client $(BINDIR)/$(CONFIG)/qps_server $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/thread_pool_test
@@ -1018,6 +1016,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/httpcli_parser_test || ( echo test httpcli_parser_test failed ; exit 1 )
$(E) "[RUN] Testing httpcli_test"
$(Q) $(BINDIR)/$(CONFIG)/httpcli_test || ( echo test httpcli_test failed ; exit 1 )
+ $(E) "[RUN] Testing interop_test"
+ $(Q) $(BINDIR)/$(CONFIG)/interop_test || ( echo test interop_test failed ; exit 1 )
$(E) "[RUN] Testing json_test"
$(Q) $(BINDIR)/$(CONFIG)/json_test || ( echo test json_test failed ; exit 1 )
$(E) "[RUN] Testing lame_client_test"
@@ -1808,7 +1808,7 @@ else
$(GENDIR)/examples/pubsub/empty.pb.cc: examples/pubsub/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1817,7 +1817,7 @@ else
$(GENDIR)/examples/pubsub/label.pb.cc: examples/pubsub/label.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1826,7 +1826,7 @@ else
$(GENDIR)/examples/pubsub/pubsub.pb.cc: examples/pubsub/pubsub.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1835,7 +1835,7 @@ else
$(GENDIR)/test/cpp/interop/empty.pb.cc: test/cpp/interop/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1844,7 +1844,7 @@ else
$(GENDIR)/test/cpp/interop/messages.pb.cc: test/cpp/interop/messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1853,7 +1853,7 @@ else
$(GENDIR)/test/cpp/interop/test.pb.cc: test/cpp/interop/test.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1862,7 +1862,7 @@ else
$(GENDIR)/test/cpp/qps/qpstest.pb.cc: test/cpp/qps/qpstest.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1871,7 +1871,7 @@ else
$(GENDIR)/test/cpp/util/echo.pb.cc: test/cpp/util/echo.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1880,7 +1880,7 @@ else
$(GENDIR)/test/cpp/util/echo_duplicate.pb.cc: test/cpp/util/echo_duplicate.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
ifeq ($(NO_PROTOC),true)
@@ -1889,7 +1889,7 @@ else
$(GENDIR)/test/cpp/util/messages.pb.cc: test/cpp/util/messages.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
@@ -1986,7 +1986,7 @@ endif
endif
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
@@ -2005,7 +2005,7 @@ endif
endif
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
@@ -2024,7 +2024,7 @@ endif
endif
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
@@ -2035,7 +2035,7 @@ ifneq ($(PROTOBUF_DEP),)
$(Q) $(MAKE) -C third_party/protobuf install prefix=$(prefix)
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
endif
@@ -2046,6 +2046,7 @@ ifeq ($(SYSTEM),MINGW32)
else
$(E) "[INSTALL] Installing grpc protoc plugins"
$(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(prefix)/bin/grpc_cpp_plugin
+ $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_python_plugin $(prefix)/bin/grpc_python_plugin
$(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_ruby_plugin $(prefix)/bin/grpc_ruby_plugin
endif
@@ -2642,74 +2643,6 @@ $(OBJDIR)/$(CONFIG)/src/core/transport/stream_op.o:
$(OBJDIR)/$(CONFIG)/src/core/transport/transport.o:
-LIBGRPC_CSHARP_EXT_SRC = \
- src/csharp/ext/grpc_csharp_ext.c \
-
-
-LIBGRPC_CSHARP_EXT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CSHARP_EXT_SRC))))
-
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure libraries if you don't have OpenSSL with ALPN.
-
-$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: openssl_dep_error
-
-ifeq ($(SYSTEM),MINGW32)
-$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): openssl_dep_error
-else
-$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): openssl_dep_error
-endif
-
-else
-
-
-ifneq ($(OPENSSL_DEP),)
-# This is to ensure the embedded OpenSSL is built beforehand, properly
-# installing headers to their final destination on the drive. We need this
-# otherwise parallel compilation will fail if a source is compiled first.
-src/csharp/ext/grpc_csharp_ext.c: $(OPENSSL_DEP)
-endif
-
-$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_CSHARP_EXT_OBJS)
- $(E) "[AR] Creating $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
- $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS)
-ifeq ($(SYSTEM),Darwin)
- $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
-endif
-
-
-
-ifeq ($(SYSTEM),MINGW32)
-$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP)$(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT)$(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP)
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext-imp.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr-imp -lgrpc-imp
-else
-$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP)
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
-ifeq ($(SYSTEM),Darwin)
- $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr -lgrpc
-else
- $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr -lgrpc
- $(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so.0
- $(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so
-endif
-endif
-
-endif
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(LIBGRPC_CSHARP_EXT_OBJS:.o=.dep)
-endif
-endif
-
-$(OBJDIR)/$(CONFIG)/src/csharp/ext/grpc_csharp_ext.o:
-
-
LIBGRPC_TEST_UTIL_SRC = \
test/core/end2end/cq_verifier.c \
test/core/end2end/data/server1_cert.c \
@@ -3061,12 +2994,15 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/impl/internal_stub.h \
include/grpc++/impl/rpc_method.h \
include/grpc++/impl/rpc_service_method.h \
+ include/grpc++/impl/service_type.h \
include/grpc++/server.h \
include/grpc++/server_builder.h \
include/grpc++/server_context.h \
include/grpc++/server_credentials.h \
include/grpc++/status.h \
+ include/grpc++/status_code_enum.h \
include/grpc++/stream.h \
+ include/grpc++/thread_pool_interface.h \
LIBGRPC++_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_SRC))))
@@ -3314,6 +3250,74 @@ $(OBJDIR)/$(CONFIG)/examples/pubsub/publisher.o: $(GENDIR)/examples/pubsub/l
$(OBJDIR)/$(CONFIG)/examples/pubsub/subscriber.o: $(GENDIR)/examples/pubsub/label.pb.cc $(GENDIR)/examples/pubsub/empty.pb.cc $(GENDIR)/examples/pubsub/pubsub.pb.cc
+LIBGRPC_CSHARP_EXT_SRC = \
+ src/csharp/ext/grpc_csharp_ext.c \
+
+
+LIBGRPC_CSHARP_EXT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CSHARP_EXT_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure libraries if you don't have OpenSSL with ALPN.
+
+$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: openssl_dep_error
+
+ifeq ($(SYSTEM),MINGW32)
+$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): openssl_dep_error
+else
+$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): openssl_dep_error
+endif
+
+else
+
+
+ifneq ($(OPENSSL_DEP),)
+# This is to ensure the embedded OpenSSL is built beforehand, properly
+# installing headers to their final destination on the drive. We need this
+# otherwise parallel compilation will fail if a source is compiled first.
+src/csharp/ext/grpc_csharp_ext.c: $(OPENSSL_DEP)
+endif
+
+$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_CSHARP_EXT_OBJS)
+ $(E) "[AR] Creating $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
+ $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS)
+ifeq ($(SYSTEM),Darwin)
+ $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
+endif
+
+
+
+ifeq ($(SYSTEM),MINGW32)
+$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP)$(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT)$(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP)
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext-imp.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr-imp -lgrpc-imp
+else
+$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP)
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ifeq ($(SYSTEM),Darwin)
+ $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr -lgrpc
+else
+ $(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgpr -lgrpc
+ $(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so.0
+ $(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so
+endif
+endif
+
+endif
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(LIBGRPC_CSHARP_EXT_OBJS:.o=.dep)
+endif
+endif
+
+$(OBJDIR)/$(CONFIG)/src/csharp/ext/grpc_csharp_ext.o:
+
+
LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_SRC = \
test/core/end2end/fixtures/chttp2_fake_security.c \
@@ -6659,6 +6663,37 @@ endif
endif
+INTEROP_TEST_SRC = \
+ test/cpp/interop/interop_test.c \
+
+INTEROP_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(INTEROP_TEST_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/interop_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/interop_test: $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(INTEROP_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/interop_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/interop/interop_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_interop_test: $(INTEROP_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(INTEROP_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
JSON_REWRITE_SRC = \
test/core/json/json_rewrite.c \
@@ -7372,6 +7407,68 @@ endif
endif
+CREDENTIALS_TEST_SRC = \
+ test/cpp/client/credentials_test.cc \
+
+CREDENTIALS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CREDENTIALS_TEST_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/credentials_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/credentials_test: $(CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(CREDENTIALS_TEST_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/credentials_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/client/credentials_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_credentials_test: $(CREDENTIALS_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(CREDENTIALS_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
+END2END_TEST_SRC = \
+ test/cpp/end2end/end2end_test.cc \
+
+END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/end2end_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/end2end_test: $(END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(END2END_TEST_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/end2end_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/end2end/end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_end2end_test: $(END2END_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(END2END_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
GRPC_CPP_PLUGIN_SRC = \
src/compiler/cpp_generator.cc \
src/compiler/cpp_plugin.cc \
@@ -7404,65 +7501,67 @@ ifneq ($(NO_DEPS),true)
endif
-CREDENTIALS_TEST_SRC = \
- test/cpp/client/credentials_test.cc \
+GRPC_PYTHON_PLUGIN_SRC = \
+ src/compiler/python_generator.cc \
+ src/compiler/python_plugin.cc \
-CREDENTIALS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CREDENTIALS_TEST_SRC))))
+GRPC_PYTHON_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_PYTHON_PLUGIN_SRC))))
-ifeq ($(NO_SECURE),true)
-# You can't build secure targets if you don't have OpenSSL with ALPN.
+ifeq ($(NO_PROTOBUF),true)
-$(BINDIR)/$(CONFIG)/credentials_test: openssl_dep_error
+# You can't build the protoc plugins if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/grpc_python_plugin: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/credentials_test: $(CREDENTIALS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
- $(E) "[LD] Linking $@"
+$(BINDIR)/$(CONFIG)/grpc_python_plugin: $(PROTOBUF_DEP) $(GRPC_PYTHON_PLUGIN_OBJS)
+ $(E) "[HOSTLD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(CREDENTIALS_TEST_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/credentials_test
+ $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_PYTHON_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_python_plugin
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/client/credentials_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/src/compiler/python_generator.o:
+$(OBJDIR)/$(CONFIG)/src/compiler/python_plugin.o:
-deps_credentials_test: $(CREDENTIALS_TEST_OBJS:.o=.dep)
+deps_grpc_python_plugin: $(GRPC_PYTHON_PLUGIN_OBJS:.o=.dep)
-ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
--include $(CREDENTIALS_TEST_OBJS:.o=.dep)
-endif
+-include $(GRPC_PYTHON_PLUGIN_OBJS:.o=.dep)
endif
-END2END_TEST_SRC = \
- test/cpp/end2end/end2end_test.cc \
+GRPC_RUBY_PLUGIN_SRC = \
+ src/compiler/ruby_generator.cc \
+ src/compiler/ruby_plugin.cc \
-END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC))))
+GRPC_RUBY_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_RUBY_PLUGIN_SRC))))
-ifeq ($(NO_SECURE),true)
-# You can't build secure targets if you don't have OpenSSL with ALPN.
+ifeq ($(NO_PROTOBUF),true)
-$(BINDIR)/$(CONFIG)/end2end_test: openssl_dep_error
+# You can't build the protoc plugins if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/grpc_ruby_plugin: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/end2end_test: $(END2END_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
- $(E) "[LD] Linking $@"
+$(BINDIR)/$(CONFIG)/grpc_ruby_plugin: $(PROTOBUF_DEP) $(GRPC_RUBY_PLUGIN_OBJS)
+ $(E) "[HOSTLD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(END2END_TEST_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/end2end_test
+ $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_RUBY_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/end2end/end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/src/compiler/ruby_generator.o:
+$(OBJDIR)/$(CONFIG)/src/compiler/ruby_plugin.o:
-deps_end2end_test: $(END2END_TEST_OBJS:.o=.dep)
+deps_grpc_ruby_plugin: $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep)
-ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
--include $(END2END_TEST_OBJS:.o=.dep)
-endif
+-include $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep)
endif
@@ -7699,38 +7798,6 @@ endif
endif
-GRPC_RUBY_PLUGIN_SRC = \
- src/compiler/ruby_generator.cc \
- src/compiler/ruby_plugin.cc \
-
-GRPC_RUBY_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_RUBY_PLUGIN_SRC))))
-
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build the protoc plugins if you don't have protobuf 3.0.0+.
-
-$(BINDIR)/$(CONFIG)/grpc_ruby_plugin: protobuf_dep_error
-
-else
-
-$(BINDIR)/$(CONFIG)/grpc_ruby_plugin: $(PROTOBUF_DEP) $(GRPC_RUBY_PLUGIN_OBJS)
- $(E) "[HOSTLD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_RUBY_PLUGIN_OBJS) $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
-
-endif
-
-$(OBJDIR)/$(CONFIG)/src/compiler/ruby_generator.o:
-$(OBJDIR)/$(CONFIG)/src/compiler/ruby_plugin.o:
-
-deps_grpc_ruby_plugin: $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep)
-
-ifneq ($(NO_DEPS),true)
--include $(GRPC_RUBY_PLUGIN_OBJS:.o=.dep)
-endif
-
-
STATUS_TEST_SRC = \
test/cpp/util/status_test.cc \
diff --git a/README.md b/README.md
index 2b049d206b..1985176753 100644
--- a/README.md
+++ b/README.md
@@ -18,10 +18,27 @@ of shared C core library [src/core] (src/core).
* NodeJS source code: [src/node] (src/node)
* PHP source code: [src/php] (src/php)
* C# source code: [src/csharp] (src/csharp)
+ * Objective-C source code: [src/objective-c] (src/objective-c)
Java source code is in [grpc-java] (http://github.com/grpc/grpc-java) repository.
Go source code is in [grpc-go] (http://github.com/grpc/grpc-go) repository.
+#Documentation
+
+You can find more detailed documentation and examples in the [grpc-common repository](http://github.com/grpc/grpc-common).
+
+#Current Status of libraries
+
+Libraries in different languages are in different state of development. We are seeking contributions for all of these libraries.
+
+ * shared C core library [src/core] (src/core) : Early adopter ready - Alpha.
+ * C++ Library: [src/cpp] (src/cpp) : Early adopter ready - Alpha.
+ * Python Library: [src/python] (src/python) : Early adopter ready - Alpha.
+ * Ruby Library: [src/ruby] (src/ruby) : Early adopter ready - Alpha.
+ * NodeJS Library: [src/node] (src/node) : Early adopter ready - Alpha.
+ * PHP Library: [src/php] (src/php) : Pre-Alpha.
+ * C# Library: [src/csharp] (src/csharp) : Pre-Alpha.
+ * Objective-C Library: [src/objective-c] (src/objective-c): Pre-Alpha.
#Overview
diff --git a/build.json b/build.json
index 47f00a27e8..27b6357d49 100644
--- a/build.json
+++ b/build.json
@@ -239,7 +239,6 @@
"include/grpc/support/useful.h"
],
"headers": [
- "src/core/support/cpu.h",
"src/core/support/env.h",
"src/core/support/file.h",
"src/core/support/murmur_hash.h",
@@ -343,19 +342,6 @@
"vs_project_guid": "{29D16885-7228-4C31-81ED-5F9187C7F2A9}"
},
{
- "name": "grpc_csharp_ext",
- "build": "all",
- "language": "csharp",
- "src": [
- "src/csharp/ext/grpc_csharp_ext.c"
- ],
- "deps": [
- "gpr",
- "grpc"
- ],
- "vs_project_guid": "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
- },
- {
"name": "grpc_test_util",
"build": "private",
"language": "c",
@@ -410,12 +396,15 @@
"include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
+ "include/grpc++/impl/service_type.h",
"include/grpc++/server.h",
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
"include/grpc++/status.h",
- "include/grpc++/stream.h"
+ "include/grpc++/status_code_enum.h",
+ "include/grpc++/stream.h",
+ "include/grpc++/thread_pool_interface.h"
],
"headers": [
"src/cpp/client/channel.h",
@@ -476,6 +465,19 @@
"grpc",
"gpr"
]
+ },
+ {
+ "name": "grpc_csharp_ext",
+ "build": "all",
+ "language": "csharp",
+ "src": [
+ "src/csharp/ext/grpc_csharp_ext.c"
+ ],
+ "deps": [
+ "gpr",
+ "grpc"
+ ],
+ "vs_project_guid": "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
}
],
"targets": [
@@ -1253,6 +1255,20 @@
]
},
{
+ "name": "interop_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/cpp/interop/interop_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
"name": "json_rewrite",
"build": "test",
"run": false,
@@ -1574,21 +1590,6 @@
]
},
{
- "name": "grpc_cpp_plugin",
- "build": "protoc",
- "language": "c++",
- "headers": [
- "src/compiler/cpp_generator.h",
- "src/compiler/cpp_generator_helpers.h"
- ],
- "src": [
- "src/compiler/cpp_generator.cc",
- "src/compiler/cpp_plugin.cc"
- ],
- "deps": [],
- "secure": false
- },
- {
"name": "credentials_test",
"build": "test",
"language": "c++",
@@ -1618,6 +1619,46 @@
]
},
{
+ "name": "grpc_cpp_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "headers": [
+ "src/compiler/cpp_generator.h",
+ "src/compiler/cpp_generator_helpers.h"
+ ],
+ "src": [
+ "src/compiler/cpp_generator.cc",
+ "src/compiler/cpp_plugin.cc"
+ ],
+ "deps": [],
+ "secure": false
+ },
+ {
+ "name": "grpc_python_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "headers": [
+ "src/compiler/python_generator.h"
+ ],
+ "src": [
+ "src/compiler/python_generator.cc",
+ "src/compiler/python_plugin.cc"
+ ],
+ "deps": [],
+ "secure": false
+ },
+ {
+ "name": "grpc_ruby_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/ruby_generator.cc",
+ "src/compiler/ruby_plugin.cc"
+ ],
+ "deps": [],
+ "secure": false
+ },
+ {
"name": "interop_client",
"build": "test",
"run": false,
@@ -1746,17 +1787,6 @@
]
},
{
- "name": "grpc_ruby_plugin",
- "build": "protoc",
- "language": "c++",
- "src": [
- "src/compiler/ruby_generator.cc",
- "src/compiler/ruby_plugin.cc"
- ],
- "deps": [],
- "secure": false
- },
- {
"name": "status_test",
"build": "test",
"language": "c++",
diff --git a/examples/pubsub/main.cc b/examples/pubsub/main.cc
index d752685545..39fb8aea15 100644
--- a/examples/pubsub/main.cc
+++ b/examples/pubsub/main.cc
@@ -40,7 +40,7 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include <google/gflags.h>
+#include <gflags/gflags.h>
#include <grpc++/channel_interface.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -60,6 +60,13 @@ DEFINE_string(oauth_scope,
"https://www.googleapis.com/auth/cloud-platform",
"Scope for OAuth tokens.");
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google { }
+namespace gflags { }
+using namespace google;
+using namespace gflags;
+
namespace {
const char kTopic[] = "testtopics";
@@ -81,7 +88,7 @@ grpc::string GetServiceAccountJsonKey() {
int main(int argc, char** argv) {
grpc_init();
- google::ParseCommandLineFlags(&argc, &argv, true);
+ ParseCommandLineFlags(&argc, &argv, true);
gpr_log(GPR_INFO, "Start PUBSUB client");
std::ostringstream ss;
diff --git a/examples/pubsub/publisher_test.cc b/examples/pubsub/publisher_test.cc
index 40b122bc74..b7bea5b1bd 100644
--- a/examples/pubsub/publisher_test.cc
+++ b/examples/pubsub/publisher_test.cc
@@ -138,7 +138,7 @@ TEST_F(PublisherTest, TestPublisher) {
std::vector<grpc::string> topics;
EXPECT_TRUE(publisher_->ListTopics(kProjectId, &topics).IsOk());
- EXPECT_EQ(topics.size(), 1);
+ EXPECT_EQ(topics.size(), static_cast<size_t>(1));
EXPECT_EQ(topics[0], kTopic);
}
diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc
new file mode 100644
index 0000000000..cdd3d8a98a
--- /dev/null
+++ b/src/compiler/python_generator.cc
@@ -0,0 +1,330 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <cassert>
+#include <cctype>
+#include <map>
+#include <ostream>
+#include <sstream>
+
+#include "src/compiler/python_generator.h"
+#include <google/protobuf/io/printer.h>
+#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
+#include <google/protobuf/descriptor.pb.h>
+#include <google/protobuf/descriptor.h>
+
+using google::protobuf::FileDescriptor;
+using google::protobuf::ServiceDescriptor;
+using google::protobuf::MethodDescriptor;
+using google::protobuf::io::Printer;
+using google::protobuf::io::StringOutputStream;
+using std::initializer_list;
+using std::map;
+using std::string;
+
+namespace grpc_python_generator {
+namespace {
+//////////////////////////////////
+// BEGIN FORMATTING BOILERPLATE //
+//////////////////////////////////
+
+// Converts an initializer list of the form { key0, value0, key1, value1, ... }
+// into a map of key* to value*. Is merely a readability helper for later code.
+map<string, string> ListToDict(const initializer_list<string>& values) {
+ assert(values.size() % 2 == 0);
+ map<string, string> value_map;
+ auto value_iter = values.begin();
+ for (unsigned i = 0; i < values.size()/2; ++i) {
+ string key = *value_iter;
+ ++value_iter;
+ string value = *value_iter;
+ value_map[key] = value;
+ ++value_iter;
+ }
+ return value_map;
+}
+
+// Provides RAII indentation handling. Use as:
+// {
+// IndentScope raii_my_indent_var_name_here(my_py_printer);
+// // constructor indented my_py_printer
+// ...
+// // destructor called at end of scope, un-indenting my_py_printer
+// }
+class IndentScope {
+ public:
+ explicit IndentScope(Printer* printer) : printer_(printer) {
+ printer_->Indent();
+ }
+
+ ~IndentScope() {
+ printer_->Outdent();
+ }
+
+ private:
+ Printer* printer_;
+};
+
+////////////////////////////////
+// END FORMATTING BOILERPLATE //
+////////////////////////////////
+
+void PrintService(const ServiceDescriptor* service,
+ Printer* out) {
+ string doc = "<fill me in later!>";
+ map<string, string> dict = ListToDict({
+ "Service", service->name(),
+ "Documentation", doc,
+ });
+ out->Print(dict, "class $Service$Service(object):\n");
+ {
+ IndentScope raii_class_indent(out);
+ out->Print(dict, "\"\"\"$Documentation$\"\"\"\n");
+ out->Print("def __init__(self):\n");
+ {
+ IndentScope raii_method_indent(out);
+ out->Print("pass\n");
+ }
+ }
+}
+
+void PrintServicer(const ServiceDescriptor* service,
+ Printer* out) {
+ string doc = "<fill me in later!>";
+ map<string, string> dict = ListToDict({
+ "Service", service->name(),
+ "Documentation", doc,
+ });
+ out->Print(dict, "class $Service$Servicer(object):\n");
+ {
+ IndentScope raii_class_indent(out);
+ out->Print(dict, "\"\"\"$Documentation$\"\"\"\n");
+ for (int i = 0; i < service->method_count(); ++i) {
+ auto meth = service->method(i);
+ out->Print("def $Method$(self, arg):\n", "Method", meth->name());
+ {
+ IndentScope raii_method_indent(out);
+ out->Print("raise NotImplementedError()\n");
+ }
+ }
+ }
+}
+
+void PrintStub(const ServiceDescriptor* service,
+ Printer* out) {
+ string doc = "<fill me in later!>";
+ map<string, string> dict = ListToDict({
+ "Service", service->name(),
+ "Documentation", doc,
+ });
+ out->Print(dict, "class $Service$Stub(object):\n");
+ {
+ IndentScope raii_class_indent(out);
+ out->Print(dict, "\"\"\"$Documentation$\"\"\"\n");
+ for (int i = 0; i < service->method_count(); ++i) {
+ const MethodDescriptor* meth = service->method(i);
+ auto methdict = ListToDict({"Method", meth->name()});
+ out->Print(methdict, "def $Method$(self, arg):\n");
+ {
+ IndentScope raii_method_indent(out);
+ out->Print("raise NotImplementedError()\n");
+ }
+ out->Print(methdict, "$Method$.async = None\n");
+ }
+ }
+}
+
+void PrintStubImpl(const ServiceDescriptor* service,
+ Printer* out) {
+ map<string, string> dict = ListToDict({
+ "Service", service->name(),
+ });
+ out->Print(dict, "class _$Service$Stub($Service$Stub):\n");
+ {
+ IndentScope raii_class_indent(out);
+ out->Print("def __init__(self, face_stub, default_timeout):\n");
+ {
+ IndentScope raii_method_indent(out);
+ out->Print("self._face_stub = face_stub\n"
+ "self._default_timeout = default_timeout\n"
+ "stub_self = self\n");
+
+ for (int i = 0; i < service->method_count(); ++i) {
+ const MethodDescriptor* meth = service->method(i);
+ bool server_streaming = meth->server_streaming();
+ bool client_streaming = meth->client_streaming();
+ std::string blocking_call, future_call;
+ if (server_streaming) {
+ if (client_streaming) {
+ blocking_call = "stub_self._face_stub.inline_stream_in_stream_out";
+ future_call = blocking_call;
+ } else {
+ blocking_call = "stub_self._face_stub.inline_value_in_stream_out";
+ future_call = blocking_call;
+ }
+ } else {
+ if (client_streaming) {
+ blocking_call = "stub_self._face_stub.blocking_stream_in_value_out";
+ future_call = "stub_self._face_stub.future_stream_in_value_out";
+ } else {
+ blocking_call = "stub_self._face_stub.blocking_value_in_value_out";
+ future_call = "stub_self._face_stub.future_value_in_value_out";
+ }
+ }
+ // TODO(atash): use the solution described at
+ // http://stackoverflow.com/a/2982 to bind 'async' attribute
+ // functions to def'd functions instead of using callable attributes.
+ auto methdict = ListToDict({
+ "Method", meth->name(),
+ "BlockingCall", blocking_call,
+ "FutureCall", future_call
+ });
+ out->Print(methdict, "class $Method$(object):\n");
+ {
+ IndentScope raii_callable_indent(out);
+ out->Print("def __call__(self, arg):\n");
+ {
+ IndentScope raii_callable_call_indent(out);
+ out->Print(methdict,
+ "return $BlockingCall$(\"$Method$\", arg, "
+ "stub_self._default_timeout)\n");
+ }
+ out->Print("def async(self, arg):\n");
+ {
+ IndentScope raii_callable_async_indent(out);
+ out->Print(methdict,
+ "return $FutureCall$(\"$Method$\", arg, "
+ "stub_self._default_timeout)\n");
+ }
+ }
+ out->Print(methdict, "self.$Method$ = $Method$()\n");
+ }
+ }
+ }
+}
+
+void PrintStubGenerators(const ServiceDescriptor* service, Printer* out) {
+ map<string, string> dict = ListToDict({
+ "Service", service->name(),
+ });
+ // Write out a generator of linked pairs of Server/Stub
+ out->Print(dict, "def mock_$Service$(servicer, default_timeout):\n");
+ {
+ IndentScope raii_mock_indent(out);
+ out->Print("value_in_value_out = {}\n"
+ "value_in_stream_out = {}\n"
+ "stream_in_value_out = {}\n"
+ "stream_in_stream_out = {}\n");
+ for (int i = 0; i < service->method_count(); ++i) {
+ const MethodDescriptor* meth = service->method(i);
+ std::string super_interface, meth_dict;
+ bool server_streaming = meth->server_streaming();
+ bool client_streaming = meth->client_streaming();
+ if (server_streaming) {
+ if (client_streaming) {
+ super_interface = "InlineStreamInStreamOutMethod";
+ meth_dict = "stream_in_stream_out";
+ } else {
+ super_interface = "InlineValueInStreamOutMethod";
+ meth_dict = "value_in_stream_out";
+ }
+ } else {
+ if (client_streaming) {
+ super_interface = "InlineStreamInValueOutMethod";
+ meth_dict = "stream_in_value_out";
+ } else {
+ super_interface = "InlineValueInValueOutMethod";
+ meth_dict = "value_in_value_out";
+ }
+ }
+ map<string, string> methdict = ListToDict({
+ "Method", meth->name(),
+ "SuperInterface", super_interface,
+ "MethodDict", meth_dict
+ });
+ out->Print(
+ methdict, "class $Method$(_face_interfaces.$SuperInterface$):\n");
+ {
+ IndentScope raii_inline_class_indent(out);
+ out->Print("def service(self, request, context):\n");
+ {
+ IndentScope raii_inline_class_fn_indent(out);
+ out->Print(methdict, "return servicer.$Method$(request)\n");
+ }
+ }
+ out->Print(methdict, "$MethodDict$['$Method$'] = $Method$()\n");
+ }
+ out->Print(
+ "face_linked_pair = _face_testing.server_and_stub(default_timeout,"
+ "inline_value_in_value_out_methods=value_in_value_out,"
+ "inline_value_in_stream_out_methods=value_in_stream_out,"
+ "inline_stream_in_value_out_methods=stream_in_value_out,"
+ "inline_stream_in_stream_out_methods=stream_in_stream_out)\n");
+ out->Print("class LinkedPair(object):\n");
+ {
+ IndentScope raii_linked_pair(out);
+ out->Print("def __init__(self, server, stub):\n");
+ {
+ IndentScope raii_linked_pair_init(out);
+ out->Print("self.server = server\n"
+ "self.stub = stub\n");
+ }
+ }
+ out->Print(
+ dict,
+ "stub = _$Service$Stub(face_linked_pair.stub, default_timeout)\n");
+ out->Print("return LinkedPair(None, stub)\n");
+ }
+}
+
+} // namespace
+
+string GetServices(const FileDescriptor* file) {
+ string output;
+ StringOutputStream output_stream(&output);
+ Printer out(&output_stream, '$');
+ out.Print("from grpc.framework.face import demonstration as _face_testing\n");
+ out.Print("from grpc.framework.face import interfaces as _face_interfaces\n");
+
+ for (int i = 0; i < file->service_count(); ++i) {
+ auto service = file->service(i);
+ PrintService(service, &out);
+ PrintServicer(service, &out);
+ PrintStub(service, &out);
+ PrintStubImpl(service, &out);
+ PrintStubGenerators(service, &out);
+ }
+ return output;
+}
+
+} // namespace grpc_python_generator
diff --git a/src/compiler/python_generator.h b/src/compiler/python_generator.h
new file mode 100644
index 0000000000..673ef7b23b
--- /dev/null
+++ b/src/compiler/python_generator.h
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef __GRPC_COMPILER_PYTHON_GENERATOR_H__
+#define __GRPC_COMPILER_PYTHON_GENERATOR_H__
+
+#include <string>
+
+namespace google {
+namespace protobuf {
+class FileDescriptor;
+} // namespace protobuf
+} // namespace google
+
+namespace grpc_python_generator {
+
+std::string GetServices(const google::protobuf::FileDescriptor* file);
+
+} // namespace grpc_python_generator
+
+#endif // __GRPC_COMPILER_PYTHON_GENERATOR_H__
diff --git a/src/compiler/python_plugin.cc b/src/compiler/python_plugin.cc
new file mode 100644
index 0000000000..ebe3660619
--- /dev/null
+++ b/src/compiler/python_plugin.cc
@@ -0,0 +1,87 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+// Generates a Python gRPC service interface out of Protobuf IDL.
+
+#include <memory>
+#include <string>
+
+#include "src/compiler/python_generator.h"
+#include <google/protobuf/compiler/code_generator.h>
+#include <google/protobuf/compiler/plugin.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/io/zero_copy_stream.h>
+#include <google/protobuf/descriptor.h>
+
+using google::protobuf::FileDescriptor;
+using google::protobuf::compiler::CodeGenerator;
+using google::protobuf::compiler::GeneratorContext;
+using google::protobuf::compiler::PluginMain;
+using google::protobuf::io::CodedOutputStream;
+using google::protobuf::io::ZeroCopyOutputStream;
+using std::string;
+
+class PythonGrpcGenerator : public CodeGenerator {
+ public:
+ PythonGrpcGenerator() {}
+ ~PythonGrpcGenerator() override {}
+
+ bool Generate(const FileDescriptor* file,
+ const string& parameter,
+ GeneratorContext* context,
+ string* error) const override {
+ // Get output file name.
+ string file_name;
+ static const int proto_suffix_length = 6; // length of ".proto"
+ if (file->name().size() > proto_suffix_length &&
+ file->name().find_last_of(".proto") == file->name().size() - 1) {
+ file_name = file->name().substr(
+ 0, file->name().size() - proto_suffix_length) + "_pb2.py";
+ } else {
+ *error = "Invalid proto file name. Proto file must end with .proto";
+ return false;
+ }
+
+ std::unique_ptr<ZeroCopyOutputStream> output(
+ context->OpenForInsert(file_name, "module_scope"));
+ CodedOutputStream coded_out(output.get());
+ string code = grpc_python_generator::GetServices(file);
+ coded_out.WriteRaw(code.data(), code.size());
+ return true;
+ }
+};
+
+int main(int argc, char* argv[]) {
+ PythonGrpcGenerator generator;
+ return PluginMain(argc, argv, &generator);
+}
diff --git a/src/core/README.md b/src/core/README.md
new file mode 100644
index 0000000000..407dc4f701
--- /dev/null
+++ b/src/core/README.md
@@ -0,0 +1,9 @@
+#Overview
+
+This directory contains source code for shared C library. Libraries in other languages in this repository (C++, Ruby,
+Python, PHP, NodeJS, Objective-C) are layered on top of this library.
+
+#Status
+
+Alpha : Ready for early adopters
+
diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c
index 60e82d9dfa..a21c27bff9 100644
--- a/src/core/security/credentials.c
+++ b/src/core/security/credentials.c
@@ -336,6 +336,12 @@ grpc_oauth2_token_fetcher_credentials_parse_server_response(
grpc_credentials_status status = GRPC_CREDENTIALS_OK;
grpc_json *json = NULL;
+ if (response == NULL) {
+ gpr_log(GPR_ERROR, "Received NULL response.");
+ status = GRPC_CREDENTIALS_ERROR;
+ goto end;
+ }
+
if (response->body_length > 0) {
null_terminated_body = gpr_malloc(response->body_length + 1);
null_terminated_body[response->body_length] = '\0';
diff --git a/src/core/security/json_token.c b/src/core/security/json_token.c
index c85b0cd847..20d62e2b43 100644
--- a/src/core/security/json_token.c
+++ b/src/core/security/json_token.c
@@ -206,15 +206,14 @@ static char *encoded_jwt_claim(const grpc_auth_json_key *json_key,
char *result = NULL;
gpr_timespec now = gpr_now();
gpr_timespec expiration = gpr_time_add(now, token_lifetime);
- /* log10(2^64) ~= 20 */
- char now_str[24];
- char expiration_str[24];
+ char now_str[GPR_LTOA_MIN_BUFSIZE];
+ char expiration_str[GPR_LTOA_MIN_BUFSIZE];
if (gpr_time_cmp(token_lifetime, grpc_max_auth_token_lifetime) > 0) {
gpr_log(GPR_INFO, "Cropping token lifetime to maximum allowed value.");
expiration = gpr_time_add(now, grpc_max_auth_token_lifetime);
}
- sprintf(now_str, "%ld", now.tv_sec);
- sprintf(expiration_str, "%ld", expiration.tv_sec);
+ gpr_ltoa(now.tv_sec, now_str);
+ gpr_ltoa(expiration.tv_sec, expiration_str);
child = create_child(NULL, json, "iss", json_key->client_email,
GRPC_JSON_STRING);
diff --git a/src/core/support/cpu_posix.c b/src/core/support/cpu_posix.c
index 91f722530c..91ce80c364 100644
--- a/src/core/support/cpu_posix.c
+++ b/src/core/support/cpu_posix.c
@@ -35,8 +35,6 @@
#ifdef GPR_CPU_POSIX
-#include "src/core/support/cpu.h"
-
#include <errno.h>
#include <unistd.h>
#include <string.h>
diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index 40caa93868..7cf3c0e4fd 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -360,8 +360,7 @@ static void unlock(grpc_call *call) {
int num_completed_requests = call->num_completed_requests;
int need_more_data =
call->need_more_data &&
- !call->sending &&
- call->write_state >= WRITE_STATE_STARTED;
+ (call->write_state >= WRITE_STATE_STARTED || !call->is_client);
int i;
if (need_more_data) {
@@ -536,14 +535,16 @@ static void finish_finish_step(void *pc, grpc_op_error error) {
}
static void finish_start_step(void *pc, grpc_op_error error) {
- finish_send_op(pc, GRPC_IOREQ_SEND_INITIAL_METADATA, WRITE_STATE_STARTED, error);
+ finish_send_op(pc, GRPC_IOREQ_SEND_INITIAL_METADATA, WRITE_STATE_STARTED,
+ error);
}
static send_action choose_send_action(grpc_call *call) {
switch (call->write_state) {
case WRITE_STATE_INITIAL:
if (is_op_live(call, GRPC_IOREQ_SEND_INITIAL_METADATA)) {
- if (is_op_live(call, GRPC_IOREQ_SEND_MESSAGE) || is_op_live(call, GRPC_IOREQ_SEND_CLOSE)) {
+ if (is_op_live(call, GRPC_IOREQ_SEND_MESSAGE) ||
+ is_op_live(call, GRPC_IOREQ_SEND_CLOSE)) {
return SEND_BUFFERED_INITIAL_METADATA;
} else {
return SEND_INITIAL_METADATA;
diff --git a/src/core/transport/chttp2/frame_data.c b/src/core/transport/chttp2/frame_data.c
index 95c27ad286..a1ae9ed2e6 100644
--- a/src/core/transport/chttp2/frame_data.c
+++ b/src/core/transport/chttp2/frame_data.c
@@ -135,7 +135,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse(
case GRPC_CHTTP2_DATA_FRAME:
if (cur == end) {
return GRPC_CHTTP2_PARSE_OK;
- } else if (end - cur == p->frame_size) {
+ } else if ((gpr_uint32)(end - cur) == p->frame_size) {
state->need_flush_reads = 1;
grpc_sopb_add_slice(&p->incoming_sopb,
gpr_slice_sub(slice, cur - beg, end - beg));
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 5b2d0a5e5b..982417ec8a 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -1631,7 +1631,7 @@ static int process_read(transport *t, gpr_slice slice) {
/* fallthrough */
case DTS_FRAME:
GPR_ASSERT(cur < end);
- if (end - cur == t->incoming_frame_size) {
+ if ((gpr_uint32)(end - cur) == t->incoming_frame_size) {
if (!parse_frame_slice(
t, gpr_slice_sub_no_ref(slice, cur - beg, end - beg), 1)) {
return 0;
diff --git a/src/core/tsi/ssl_transport_security.c b/src/core/tsi/ssl_transport_security.c
index 2e59275ff8..92fcb96dd2 100644
--- a/src/core/tsi/ssl_transport_security.c
+++ b/src/core/tsi/ssl_transport_security.c
@@ -1084,7 +1084,7 @@ static int server_handshaker_factory_alpn_callback(
tsi_ssl_server_handshaker_factory* factory =
(tsi_ssl_server_handshaker_factory*)arg;
const unsigned char* client_current = in;
- while ((client_current - in) < inlen) {
+ while ((unsigned int)(client_current - in) < inlen) {
unsigned char client_current_len = *(client_current++);
const unsigned char* server_current = factory->alpn_protocol_list;
while ((server_current >= factory->alpn_protocol_list) &&
diff --git a/src/cpp/README.md b/src/cpp/README.md
new file mode 100644
index 0000000000..a2eb9a08c8
--- /dev/null
+++ b/src/cpp/README.md
@@ -0,0 +1,9 @@
+
+#Overview
+
+This directory contains source code for C++ implementation of gRPC.
+
+#Status
+
+Alpha : Ready for early adopters
+
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index 7cccc58afd..f565d3aa5d 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -49,84 +49,6 @@
namespace grpc {
-Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned,
- ServerCredentials* creds)
- : started_(false),
- shutdown_(false),
- num_running_cb_(0),
- thread_pool_(thread_pool),
- thread_pool_owned_(thread_pool_owned),
- secure_(creds != nullptr) {
- if (creds) {
- server_ =
- grpc_secure_server_create(creds->GetRawCreds(), cq_.cq(), nullptr);
- } else {
- server_ = grpc_server_create(cq_.cq(), nullptr);
- }
-}
-
-Server::Server() {
- // Should not be called.
- GPR_ASSERT(false);
-}
-
-Server::~Server() {
- std::unique_lock<std::mutex> lock(mu_);
- if (started_ && !shutdown_) {
- lock.unlock();
- Shutdown();
- } else {
- lock.unlock();
- }
- grpc_server_destroy(server_);
- if (thread_pool_owned_) {
- delete thread_pool_;
- }
-}
-
-bool Server::RegisterService(RpcService* service) {
- for (int i = 0; i < service->GetMethodCount(); ++i) {
- RpcServiceMethod* method = service->GetMethod(i);
- void* tag =
- grpc_server_register_method(server_, method->name(), nullptr, cq_.cq());
- if (!tag) {
- gpr_log(GPR_DEBUG, "Attempt to register %s multiple times",
- method->name());
- return false;
- }
- sync_methods_.emplace_back(method, tag);
- }
- return true;
-}
-
-bool Server::RegisterAsyncService(AsynchronousService* service) {
- GPR_ASSERT(service->dispatch_impl_ == nullptr &&
- "Can only register an asynchronous service against one server.");
- service->dispatch_impl_ = this;
- service->request_args_ = new void* [service->method_count_];
- for (size_t i = 0; i < service->method_count_; ++i) {
- void* tag =
- grpc_server_register_method(server_, service->method_names_[i], nullptr,
- service->completion_queue()->cq());
- if (!tag) {
- gpr_log(GPR_DEBUG, "Attempt to register %s multiple times",
- service->method_names_[i]);
- return false;
- }
- service->request_args_[i] = tag;
- }
- return true;
-}
-
-int Server::AddPort(const grpc::string& addr) {
- GPR_ASSERT(!started_);
- if (secure_) {
- return grpc_server_add_secure_http2_port(server_, addr.c_str());
- } else {
- return grpc_server_add_http2_port(server_, addr.c_str());
- }
-}
-
class Server::SyncRequest final : public CompletionQueueTag {
public:
SyncRequest(RpcServiceMethod* method, void* tag)
@@ -247,6 +169,84 @@ class Server::SyncRequest final : public CompletionQueueTag {
grpc_completion_queue* cq_;
};
+Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned,
+ ServerCredentials* creds)
+ : started_(false),
+ shutdown_(false),
+ num_running_cb_(0),
+ thread_pool_(thread_pool),
+ thread_pool_owned_(thread_pool_owned),
+ secure_(creds != nullptr) {
+ if (creds) {
+ server_ =
+ grpc_secure_server_create(creds->GetRawCreds(), cq_.cq(), nullptr);
+ } else {
+ server_ = grpc_server_create(cq_.cq(), nullptr);
+ }
+}
+
+Server::Server() {
+ // Should not be called.
+ GPR_ASSERT(false);
+}
+
+Server::~Server() {
+ std::unique_lock<std::mutex> lock(mu_);
+ if (started_ && !shutdown_) {
+ lock.unlock();
+ Shutdown();
+ } else {
+ lock.unlock();
+ }
+ grpc_server_destroy(server_);
+ if (thread_pool_owned_) {
+ delete thread_pool_;
+ }
+}
+
+bool Server::RegisterService(RpcService* service) {
+ for (int i = 0; i < service->GetMethodCount(); ++i) {
+ RpcServiceMethod* method = service->GetMethod(i);
+ void* tag =
+ grpc_server_register_method(server_, method->name(), nullptr, cq_.cq());
+ if (!tag) {
+ gpr_log(GPR_DEBUG, "Attempt to register %s multiple times",
+ method->name());
+ return false;
+ }
+ sync_methods_.emplace_back(method, tag);
+ }
+ return true;
+}
+
+bool Server::RegisterAsyncService(AsynchronousService* service) {
+ GPR_ASSERT(service->dispatch_impl_ == nullptr &&
+ "Can only register an asynchronous service against one server.");
+ service->dispatch_impl_ = this;
+ service->request_args_ = new void* [service->method_count_];
+ for (size_t i = 0; i < service->method_count_; ++i) {
+ void* tag =
+ grpc_server_register_method(server_, service->method_names_[i], nullptr,
+ service->completion_queue()->cq());
+ if (!tag) {
+ gpr_log(GPR_DEBUG, "Attempt to register %s multiple times",
+ service->method_names_[i]);
+ return false;
+ }
+ service->request_args_[i] = tag;
+ }
+ return true;
+}
+
+int Server::AddPort(const grpc::string& addr) {
+ GPR_ASSERT(!started_);
+ if (secure_) {
+ return grpc_server_add_secure_http2_port(server_, addr.c_str());
+ } else {
+ return grpc_server_add_http2_port(server_, addr.c_str());
+ }
+}
+
bool Server::Start() {
GPR_ASSERT(!started_);
started_ = true;
diff --git a/src/csharp/GrpcApi/MathExamples.cs b/src/csharp/GrpcApi/MathExamples.cs
index 2202c52a27..97c91b1b1b 100644
--- a/src/csharp/GrpcApi/MathExamples.cs
+++ b/src/csharp/GrpcApi/MathExamples.cs
@@ -32,10 +32,10 @@
#endregion
using System;
-using System.Threading.Tasks;
using System.Collections.Generic;
using System.Reactive.Linq;
-using Google.GRPC.Core.Utils;
+using System.Threading.Tasks;
+using Grpc.Core.Utils;
namespace math
{
diff --git a/src/csharp/GrpcApi/MathGrpc.cs b/src/csharp/GrpcApi/MathGrpc.cs
index 44e704e496..f938a24543 100644
--- a/src/csharp/GrpcApi/MathGrpc.cs
+++ b/src/csharp/GrpcApi/MathGrpc.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using System.Threading;
-using System.Threading.Tasks;
using System.Collections.Generic;
using System.Reactive.Linq;
-using Google.GRPC.Core;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
namespace math
{
@@ -99,31 +99,31 @@ namespace math
public DivReply Div(DivArgs request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<DivArgs, DivReply>(divMethod, channel);
+ var call = new Grpc.Core.Call<DivArgs, DivReply>(divMethod, channel);
return Calls.BlockingUnaryCall(call, request, token);
}
public Task<DivReply> DivAsync(DivArgs request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<DivArgs, DivReply>(divMethod, channel);
+ var call = new Grpc.Core.Call<DivArgs, DivReply>(divMethod, channel);
return Calls.AsyncUnaryCall(call, request, token);
}
public void Fib(FibArgs request, IObserver<Num> responseObserver, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<FibArgs, Num>(fibMethod, channel);
+ var call = new Grpc.Core.Call<FibArgs, Num>(fibMethod, channel);
Calls.AsyncServerStreamingCall(call, request, responseObserver, token);
}
public ClientStreamingAsyncResult<Num, Num> Sum(CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<Num, Num>(sumMethod, channel);
+ var call = new Grpc.Core.Call<Num, Num>(sumMethod, channel);
return Calls.AsyncClientStreamingCall(call, token);
}
public IObserver<DivArgs> DivMany(IObserver<DivReply> responseObserver, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<DivArgs, DivReply>(divManyMethod, channel);
+ var call = new Grpc.Core.Call<DivArgs, DivReply>(divManyMethod, channel);
return Calls.DuplexStreamingCall(call, responseObserver, token);
}
}
diff --git a/src/csharp/GrpcApi/MathServiceImpl.cs b/src/csharp/GrpcApi/MathServiceImpl.cs
index 1a2f98f8b2..462fab4454 100644
--- a/src/csharp/GrpcApi/MathServiceImpl.cs
+++ b/src/csharp/GrpcApi/MathServiceImpl.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using System.Threading;
-using System.Threading.Tasks;
using System.Collections.Generic;
using System.Reactive.Linq;
-using Google.GRPC.Core.Utils;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core.Utils;
namespace math
{
diff --git a/src/csharp/GrpcApi/Properties/AssemblyInfo.cs b/src/csharp/GrpcApi/Properties/AssemblyInfo.cs
index e0a8e4357f..96f142dae9 100644
--- a/src/csharp/GrpcApi/Properties/AssemblyInfo.cs
+++ b/src/csharp/GrpcApi/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jtattermusch")]
+[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
+[assembly: AssemblyVersion ("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/GrpcApi/TestServiceGrpc.cs b/src/csharp/GrpcApi/TestServiceGrpc.cs
index 64d5c09563..15700e40ac 100644
--- a/src/csharp/GrpcApi/TestServiceGrpc.cs
+++ b/src/csharp/GrpcApi/TestServiceGrpc.cs
@@ -30,12 +30,13 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endregion
+
using System;
-using System.Threading;
-using System.Threading.Tasks;
using System.Collections.Generic;
using System.Reactive.Linq;
-using Google.GRPC.Core;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
namespace grpc.testing
{
@@ -119,49 +120,49 @@ namespace grpc.testing
public Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<Empty, Empty>(emptyCallMethod, channel);
+ var call = new Grpc.Core.Call<Empty, Empty>(emptyCallMethod, channel);
return Calls.BlockingUnaryCall(call, request, token);
}
public Task<Empty> EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<Empty, Empty>(emptyCallMethod, channel);
+ var call = new Grpc.Core.Call<Empty, Empty>(emptyCallMethod, channel);
return Calls.AsyncUnaryCall(call, request, token);
}
public SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel);
+ var call = new Grpc.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel);
return Calls.BlockingUnaryCall(call, request, token);
}
public Task<SimpleResponse> UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel);
+ var call = new Grpc.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel);
return Calls.AsyncUnaryCall(call, request, token);
}
public void StreamingOutputCall(StreamingOutputCallRequest request, IObserver<StreamingOutputCallResponse> responseObserver, CancellationToken token = default(CancellationToken)) {
- var call = new Google.GRPC.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(streamingOutputCallMethod, channel);
+ var call = new Grpc.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(streamingOutputCallMethod, channel);
Calls.AsyncServerStreamingCall(call, request, responseObserver, token);
}
public ClientStreamingAsyncResult<StreamingInputCallRequest, StreamingInputCallResponse> StreamingInputCall(CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<StreamingInputCallRequest, StreamingInputCallResponse>(streamingInputCallMethod, channel);
+ var call = new Grpc.Core.Call<StreamingInputCallRequest, StreamingInputCallResponse>(streamingInputCallMethod, channel);
return Calls.AsyncClientStreamingCall(call, token);
}
public IObserver<StreamingOutputCallRequest> FullDuplexCall(IObserver<StreamingOutputCallResponse> responseObserver, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(fullDuplexCallMethod, channel);
+ var call = new Grpc.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(fullDuplexCallMethod, channel);
return Calls.DuplexStreamingCall(call, responseObserver, token);
}
public IObserver<StreamingOutputCallRequest> HalfDuplexCall(IObserver<StreamingOutputCallResponse> responseObserver, CancellationToken token = default(CancellationToken))
{
- var call = new Google.GRPC.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(halfDuplexCallMethod, channel);
+ var call = new Grpc.Core.Call<StreamingOutputCallRequest, StreamingOutputCallResponse>(halfDuplexCallMethod, channel);
return Calls.DuplexStreamingCall(call, responseObserver, token);
}
}
diff --git a/src/csharp/GrpcApiTests/MathClientServerTests.cs b/src/csharp/GrpcApiTests/MathClientServerTests.cs
index 9056142097..767340d6f2 100644
--- a/src/csharp/GrpcApiTests/MathClientServerTests.cs
+++ b/src/csharp/GrpcApiTests/MathClientServerTests.cs
@@ -32,12 +32,12 @@
#endregion
using System;
-using NUnit.Framework;
-using Google.GRPC.Core;
+using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using Google.GRPC.Core.Utils;
-using System.Collections.Generic;
+using Grpc.Core;
+using Grpc.Core.Utils;
+using NUnit.Framework;
namespace math.Tests
{
diff --git a/src/csharp/GrpcApiTests/Properties/AssemblyInfo.cs b/src/csharp/GrpcApiTests/Properties/AssemblyInfo.cs
index 5594e92e72..ac3cfca52e 100644
--- a/src/csharp/GrpcApiTests/Properties/AssemblyInfo.cs
+++ b/src/csharp/GrpcApiTests/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/GrpcCore/Call.cs b/src/csharp/GrpcCore/Call.cs
index 93a7507b2f..72dca68895 100644
--- a/src/csharp/GrpcCore/Call.cs
+++ b/src/csharp/GrpcCore/Call.cs
@@ -32,9 +32,9 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
public class Call<TRequest, TResponse>
{
diff --git a/src/csharp/GrpcCore/Calls.cs b/src/csharp/GrpcCore/Calls.cs
index e5ddd879d6..b67332676a 100644
--- a/src/csharp/GrpcCore/Calls.cs
+++ b/src/csharp/GrpcCore/Calls.cs
@@ -34,9 +34,9 @@
using System;
using System.Threading;
using System.Threading.Tasks;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
// NOTE: this class is work-in-progress
diff --git a/src/csharp/GrpcCore/Channel.cs b/src/csharp/GrpcCore/Channel.cs
index d1f795541c..942651cf39 100644
--- a/src/csharp/GrpcCore/Channel.cs
+++ b/src/csharp/GrpcCore/Channel.cs
@@ -35,9 +35,9 @@ using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
public class Channel : IDisposable
{
diff --git a/src/csharp/GrpcCore/ClientStreamingAsyncResult.cs b/src/csharp/GrpcCore/ClientStreamingAsyncResult.cs
index f82fe5f26c..44580a1154 100644
--- a/src/csharp/GrpcCore/ClientStreamingAsyncResult.cs
+++ b/src/csharp/GrpcCore/ClientStreamingAsyncResult.cs
@@ -34,7 +34,7 @@
using System;
using System.Threading.Tasks;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
/// <summary>
/// Return type for client streaming async method.
diff --git a/src/csharp/GrpcCore/GrpcEnvironment.cs b/src/csharp/GrpcCore/GrpcEnvironment.cs
index 55a6cac8f6..0e3a0a581c 100644
--- a/src/csharp/GrpcCore/GrpcEnvironment.cs
+++ b/src/csharp/GrpcCore/GrpcEnvironment.cs
@@ -32,10 +32,10 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
using System.Runtime.InteropServices;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
/// <summary>
/// Encapsulates initialization and shutdown of gRPC library.
diff --git a/src/csharp/GrpcCore/Internal/AsyncCall.cs b/src/csharp/GrpcCore/Internal/AsyncCall.cs
index ce0ba30d53..5e96092e27 100644
--- a/src/csharp/GrpcCore/Internal/AsyncCall.cs
+++ b/src/csharp/GrpcCore/Internal/AsyncCall.cs
@@ -32,14 +32,14 @@
#endregion
using System;
-using System.Runtime.InteropServices;
using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
-using System.Runtime.CompilerServices;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// Handles native call lifecycle and provides convenience methods.
@@ -381,7 +381,7 @@ namespace Google.GRPC.Core.Internal
private void CompleteStreamObserver(Status status)
{
- if (status.StatusCode != StatusCode.GRPC_STATUS_OK)
+ if (status.StatusCode != StatusCode.OK)
{
// TODO: wrap to handle exceptions;
readObserver.OnError(new RpcException(status));
@@ -413,13 +413,13 @@ namespace Google.GRPC.Core.Internal
if (error != GRPCOpError.GRPC_OP_OK)
{
tcs.SetException(new RpcException(
- new Status(StatusCode.GRPC_STATUS_INTERNAL, "Internal error occured.")
+ new Status(StatusCode.Internal, "Internal error occured.")
));
return;
}
var status = ctx.GetReceivedStatus();
- if (status.StatusCode != StatusCode.GRPC_STATUS_OK)
+ if (status.StatusCode != StatusCode.OK)
{
tcs.SetException(new RpcException(status));
return;
diff --git a/src/csharp/GrpcCore/Internal/BatchContextSafeHandleNotOwned.cs b/src/csharp/GrpcCore/Internal/BatchContextSafeHandleNotOwned.cs
index ddfd94a3b5..75cd30e1a2 100644
--- a/src/csharp/GrpcCore/Internal/BatchContextSafeHandleNotOwned.cs
+++ b/src/csharp/GrpcCore/Internal/BatchContextSafeHandleNotOwned.cs
@@ -33,9 +33,9 @@
using System;
using System.Runtime.InteropServices;
-using Google.GRPC.Core;
+using Grpc.Core;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// Not owned version of
diff --git a/src/csharp/GrpcCore/Internal/CallSafeHandle.cs b/src/csharp/GrpcCore/Internal/CallSafeHandle.cs
index 55d66a62ca..659a383b4b 100644
--- a/src/csharp/GrpcCore/Internal/CallSafeHandle.cs
+++ b/src/csharp/GrpcCore/Internal/CallSafeHandle.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using System.Runtime.InteropServices;
using System.Diagnostics;
-using Google.GRPC.Core;
+using System.Runtime.InteropServices;
+using Grpc.Core;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
//TODO: rename the delegate
internal delegate void CompletionCallbackDelegate(GRPCOpError error, IntPtr batchContextPtr);
diff --git a/src/csharp/GrpcCore/Internal/ChannelSafeHandle.cs b/src/csharp/GrpcCore/Internal/ChannelSafeHandle.cs
index 379c83d537..f15ead3572 100644
--- a/src/csharp/GrpcCore/Internal/ChannelSafeHandle.cs
+++ b/src/csharp/GrpcCore/Internal/ChannelSafeHandle.cs
@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// grpc_channel from <grpc/grpc.h>
diff --git a/src/csharp/GrpcCore/Internal/ClientStreamingInputObserver.cs b/src/csharp/GrpcCore/Internal/ClientStreamingInputObserver.cs
index 4d10a9bdf9..fb59e86e2d 100644
--- a/src/csharp/GrpcCore/Internal/ClientStreamingInputObserver.cs
+++ b/src/csharp/GrpcCore/Internal/ClientStreamingInputObserver.cs
@@ -32,9 +32,9 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
internal class ClientStreamingInputObserver<TWrite, TRead> : IObserver<TWrite>
{
diff --git a/src/csharp/GrpcCore/Internal/CompletionQueueSafeHandle.cs b/src/csharp/GrpcCore/Internal/CompletionQueueSafeHandle.cs
index 5ea436df19..3f01fdbfd0 100644
--- a/src/csharp/GrpcCore/Internal/CompletionQueueSafeHandle.cs
+++ b/src/csharp/GrpcCore/Internal/CompletionQueueSafeHandle.cs
@@ -35,7 +35,7 @@ using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// grpc_completion_queue from <grpc/grpc.h>
diff --git a/src/csharp/GrpcCore/Internal/Enums.cs b/src/csharp/GrpcCore/Internal/Enums.cs
index d38896ec84..f363050b07 100644
--- a/src/csharp/GrpcCore/Internal/Enums.cs
+++ b/src/csharp/GrpcCore/Internal/Enums.cs
@@ -34,7 +34,7 @@
using System;
using System.Runtime.InteropServices;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// from grpc/grpc.h
diff --git a/src/csharp/GrpcCore/Internal/GrpcThreadPool.cs b/src/csharp/GrpcCore/Internal/GrpcThreadPool.cs
index 634a0b2d72..9e69fe2f43 100644
--- a/src/csharp/GrpcCore/Internal/GrpcThreadPool.cs
+++ b/src/csharp/GrpcCore/Internal/GrpcThreadPool.cs
@@ -32,13 +32,13 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
+using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
-using System.Collections.Generic;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// Pool of threads polling on the same completion queue.
diff --git a/src/csharp/GrpcCore/Internal/SafeHandleZeroIsInvalid.cs b/src/csharp/GrpcCore/Internal/SafeHandleZeroIsInvalid.cs
index 59f08d4ca8..aa6fce2e96 100644
--- a/src/csharp/GrpcCore/Internal/SafeHandleZeroIsInvalid.cs
+++ b/src/csharp/GrpcCore/Internal/SafeHandleZeroIsInvalid.cs
@@ -34,7 +34,7 @@
using System;
using System.Runtime.InteropServices;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// Safe handle to wrap native objects.
diff --git a/src/csharp/GrpcCore/Internal/ServerSafeHandle.cs b/src/csharp/GrpcCore/Internal/ServerSafeHandle.cs
index 047bde1add..de9bbaf7c1 100644
--- a/src/csharp/GrpcCore/Internal/ServerSafeHandle.cs
+++ b/src/csharp/GrpcCore/Internal/ServerSafeHandle.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
using System.Collections.Concurrent;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
// TODO: we need to make sure that the delegates are not collected before invoked.
internal delegate void ServerShutdownCallbackDelegate(IntPtr eventPtr);
diff --git a/src/csharp/GrpcCore/Internal/ServerStreamingOutputObserver.cs b/src/csharp/GrpcCore/Internal/ServerStreamingOutputObserver.cs
index e9cb65cb3b..08d9921475 100644
--- a/src/csharp/GrpcCore/Internal/ServerStreamingOutputObserver.cs
+++ b/src/csharp/GrpcCore/Internal/ServerStreamingOutputObserver.cs
@@ -32,9 +32,9 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// Observer that writes all arriving messages to a call abstraction (in blocking fashion)
@@ -52,7 +52,7 @@ namespace Google.GRPC.Core.Internal
public void OnCompleted()
{
// TODO: how bad is the Wait here?
- call.SendStatusFromServerAsync(new Status(StatusCode.GRPC_STATUS_OK, "")).Wait();
+ call.SendStatusFromServerAsync(new Status(StatusCode.OK, "")).Wait();
}
public void OnError(Exception error)
diff --git a/src/csharp/GrpcCore/Internal/Timespec.cs b/src/csharp/GrpcCore/Internal/Timespec.cs
index 38b75180dc..b191ecde94 100644
--- a/src/csharp/GrpcCore/Internal/Timespec.cs
+++ b/src/csharp/GrpcCore/Internal/Timespec.cs
@@ -35,7 +35,7 @@ using System;
using System.Runtime.InteropServices;
using System.Threading;
-namespace Google.GRPC.Core.Internal
+namespace Grpc.Core.Internal
{
/// <summary>
/// gpr_timespec from grpc/support/time.h
diff --git a/src/csharp/GrpcCore/Marshaller.cs b/src/csharp/GrpcCore/Marshaller.cs
index f031354fd2..602e0eb824 100644
--- a/src/csharp/GrpcCore/Marshaller.cs
+++ b/src/csharp/GrpcCore/Marshaller.cs
@@ -33,7 +33,7 @@
using System;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
/// <summary>
/// For serializing and deserializing messages.
diff --git a/src/csharp/GrpcCore/Method.cs b/src/csharp/GrpcCore/Method.cs
index 64a4f71396..c94aa8161f 100644
--- a/src/csharp/GrpcCore/Method.cs
+++ b/src/csharp/GrpcCore/Method.cs
@@ -33,7 +33,7 @@
using System;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
public enum MethodType
{
diff --git a/src/csharp/GrpcCore/Properties/AssemblyInfo.cs b/src/csharp/GrpcCore/Properties/AssemblyInfo.cs
index 0907b86833..ed3a7af8f4 100644
--- a/src/csharp/GrpcCore/Properties/AssemblyInfo.cs
+++ b/src/csharp/GrpcCore/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jtattermusch")]
+[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
+[assembly: AssemblyVersion ("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/GrpcCore/RpcException.cs b/src/csharp/GrpcCore/RpcException.cs
index 9ec1d2f2f3..5a9d0039bc 100644
--- a/src/csharp/GrpcCore/RpcException.cs
+++ b/src/csharp/GrpcCore/RpcException.cs
@@ -33,7 +33,7 @@
using System;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
public class RpcException : Exception
{
diff --git a/src/csharp/GrpcCore/Server.cs b/src/csharp/GrpcCore/Server.cs
index 91842d8182..002592a3d8 100644
--- a/src/csharp/GrpcCore/Server.cs
+++ b/src/csharp/GrpcCore/Server.cs
@@ -32,14 +32,14 @@
#endregion
using System;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
-using System.Threading.Tasks;
using System.Collections.Concurrent;
using System.Collections.Generic;
-using Google.GRPC.Core.Internal;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
/// <summary>
/// Server is implemented only to be able to do
diff --git a/src/csharp/GrpcCore/ServerCallHandler.cs b/src/csharp/GrpcCore/ServerCallHandler.cs
index 48d1eaa335..1296947f34 100644
--- a/src/csharp/GrpcCore/ServerCallHandler.cs
+++ b/src/csharp/GrpcCore/ServerCallHandler.cs
@@ -32,9 +32,9 @@
#endregion
using System;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
internal interface IServerCallHandler
{
@@ -111,7 +111,7 @@ namespace Google.GRPC.Core
var finishedTask = asyncCall.ServerSideStreamingRequestCallAsync(new NullObserver<byte[]>());
- asyncCall.SendStatusFromServerAsync(new Status(StatusCode.GRPC_STATUS_UNIMPLEMENTED, "No such method.")).Wait();
+ asyncCall.SendStatusFromServerAsync(new Status(StatusCode.Unimplemented, "No such method.")).Wait();
finishedTask.Wait();
}
diff --git a/src/csharp/GrpcCore/ServerCalls.cs b/src/csharp/GrpcCore/ServerCalls.cs
index 273029cab6..bed77796de 100644
--- a/src/csharp/GrpcCore/ServerCalls.cs
+++ b/src/csharp/GrpcCore/ServerCalls.cs
@@ -33,7 +33,7 @@
using System;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
// TODO: perhaps add also serverSideStreaming and clientSideStreaming
diff --git a/src/csharp/GrpcCore/ServerServiceDefinition.cs b/src/csharp/GrpcCore/ServerServiceDefinition.cs
index 1eb17837e4..231c376062 100644
--- a/src/csharp/GrpcCore/ServerServiceDefinition.cs
+++ b/src/csharp/GrpcCore/ServerServiceDefinition.cs
@@ -34,7 +34,7 @@
using System;
using System.Collections.Generic;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
public class ServerServiceDefinition
{
diff --git a/src/csharp/GrpcCore/Status.cs b/src/csharp/GrpcCore/Status.cs
index 6430e6b7ab..5ea1df7b48 100644
--- a/src/csharp/GrpcCore/Status.cs
+++ b/src/csharp/GrpcCore/Status.cs
@@ -34,7 +34,7 @@
using System;
using System.Runtime.InteropServices;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
/// <summary>
/// Represents RPC result.
diff --git a/src/csharp/GrpcCore/StatusCode.cs b/src/csharp/GrpcCore/StatusCode.cs
index ba99f9b5e0..1fbf9c1b68 100644
--- a/src/csharp/GrpcCore/StatusCode.cs
+++ b/src/csharp/GrpcCore/StatusCode.cs
@@ -33,22 +33,22 @@
using System;
-namespace Google.GRPC.Core
+namespace Grpc.Core
{
// TODO: element names should changed to comply with C# naming conventions.
/// <summary>
- /// grpc_status_code from grpc/status.h
+ /// based on grpc_status_code from grpc/status.h
/// </summary>
public enum StatusCode
{
/* Not an error; returned on success
HTTP Mapping: 200 OK */
- GRPC_STATUS_OK = 0,
+ OK = 0,
/* The operation was cancelled (typically by the caller).
HTTP Mapping: 499 Client Closed Request */
- GRPC_STATUS_CANCELLED = 1,
+ Cancelled = 1,
/* Unknown error. An example of where this error may be returned is
if a Status value received from another address space belongs to
an error-space that is not known in this address space. Also
@@ -56,14 +56,14 @@ namespace Google.GRPC.Core
may be converted to this error.
HTTP Mapping: 500 Internal Server Error */
- GRPC_STATUS_UNKNOWN = 2,
+ Unknown = 2,
/* Client specified an invalid argument. Note that this differs
from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments
that are problematic regardless of the state of the system
(e.g., a malformed file name).
HTTP Mapping: 400 Bad Request */
- GRPC_STATUS_INVALID_ARGUMENT = 3,
+ InvalidArgument = 3,
/* Deadline expired before operation could complete. For operations
that change the state of the system, this error may be returned
even if the operation has completed successfully. For example, a
@@ -71,16 +71,16 @@ namespace Google.GRPC.Core
enough for the deadline to expire.
HTTP Mapping: 504 Gateway Timeout */
- GRPC_STATUS_DEADLINE_EXCEEDED = 4,
+ DeadlineExceeded = 4,
/* Some requested entity (e.g., file or directory) was not found.
HTTP Mapping: 404 Not Found */
- GRPC_STATUS_NOT_FOUND = 5,
+ NotFound = 5,
/* Some entity that we attempted to create (e.g., file or directory)
already exists.
HTTP Mapping: 409 Conflict */
- GRPC_STATUS_ALREADY_EXISTS = 6,
+ AlreadyExists = 6,
/* The caller does not have permission to execute the specified
operation. PERMISSION_DENIED must not be used for rejections
caused by exhausting some resource (use RESOURCE_EXHAUSTED
@@ -89,17 +89,17 @@ namespace Google.GRPC.Core
instead for those errors).
HTTP Mapping: 403 Forbidden */
- GRPC_STATUS_PERMISSION_DENIED = 7,
+ PermissionDenied = 7,
/* The request does not have valid authentication credentials for the
operation.
HTTP Mapping: 401 Unauthorized */
- GRPC_STATUS_UNAUTHENTICATED = 16,
+ Unauthenticated = 16,
/* Some resource has been exhausted, perhaps a per-user quota, or
perhaps the entire file system is out of space.
HTTP Mapping: 429 Too Many Requests */
- GRPC_STATUS_RESOURCE_EXHAUSTED = 8,
+ ResourceExhausted = 8,
/* Operation was rejected because the system is not in a state
required for the operation's execution. For example, directory
to be deleted may be non-empty, an rmdir operation is applied to
@@ -126,7 +126,7 @@ namespace Google.GRPC.Core
the request contains Etag related headers. So if the server does see
Etag related headers in the request, it may choose to return 412
instead of 400 for this error code. */
- GRPC_STATUS_FAILED_PRECONDITION = 9,
+ FailedPrecondition = 9,
/* The operation was aborted, typically due to a concurrency issue
like sequencer check failures, transaction aborts, etc.
@@ -134,7 +134,7 @@ namespace Google.GRPC.Core
ABORTED, and UNAVAILABLE.
HTTP Mapping: 409 Conflict */
- GRPC_STATUS_ABORTED = 10,
+ Aborted = 10,
/* Operation was attempted past the valid range. E.g., seeking or
reading past end of file.
@@ -152,17 +152,17 @@ namespace Google.GRPC.Core
they are done.
HTTP Mapping: 400 Bad Request */
- GRPC_STATUS_OUT_OF_RANGE = 11,
+ OutOfRange = 11,
/* Operation is not implemented or not supported/enabled in this service.
HTTP Mapping: 501 Not Implemented */
- GRPC_STATUS_UNIMPLEMENTED = 12,
+ Unimplemented = 12,
/* Internal errors. Means some invariants expected by underlying
system has been broken. If you see one of these errors,
something is very broken.
HTTP Mapping: 500 Internal Server Error */
- GRPC_STATUS_INTERNAL = 13,
+ Internal = 13,
/* The service is currently unavailable. This is a most likely a
transient condition and may be corrected by retrying with
a backoff.
@@ -171,13 +171,11 @@ namespace Google.GRPC.Core
ABORTED, and UNAVAILABLE.
HTTP Mapping: 503 Service Unavailable */
- GRPC_STATUS_UNAVAILABLE = 14,
+ Unavailable = 14,
/* Unrecoverable data loss or corruption.
HTTP Mapping: 500 Internal Server Error */
- GRPC_STATUS_DATA_LOSS = 15,
- /* Force users to include a default branch: */
- GRPC_STATUS__DO_NOT_USE = -1
+ DataLoss = 15
}
}
diff --git a/src/csharp/GrpcCore/Utils/RecordingObserver.cs b/src/csharp/GrpcCore/Utils/RecordingObserver.cs
index 0c784e1d35..99d2725b70 100644
--- a/src/csharp/GrpcCore/Utils/RecordingObserver.cs
+++ b/src/csharp/GrpcCore/Utils/RecordingObserver.cs
@@ -32,10 +32,10 @@
#endregion
using System;
-using System.Threading.Tasks;
using System.Collections.Generic;
+using System.Threading.Tasks;
-namespace Google.GRPC.Core.Utils
+namespace Grpc.Core.Utils
{
public class RecordingObserver<T> : IObserver<T>
{
diff --git a/src/csharp/GrpcCore/Utils/RecordingQueue.cs b/src/csharp/GrpcCore/Utils/RecordingQueue.cs
index f8940d7584..63992da6a9 100644
--- a/src/csharp/GrpcCore/Utils/RecordingQueue.cs
+++ b/src/csharp/GrpcCore/Utils/RecordingQueue.cs
@@ -36,7 +36,7 @@ using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent;
-namespace Google.GRPC.Core.Utils
+namespace Grpc.Core.Utils
{
// TODO: replace this by something that implements IAsyncEnumerator.
/// <summary>
diff --git a/src/csharp/GrpcCoreTests/ClientServerTest.cs b/src/csharp/GrpcCoreTests/ClientServerTest.cs
index ba43e4f6a0..7e564a2fba 100644
--- a/src/csharp/GrpcCoreTests/ClientServerTest.cs
+++ b/src/csharp/GrpcCoreTests/ClientServerTest.cs
@@ -32,15 +32,15 @@
#endregion
using System;
-using NUnit.Framework;
-using Google.GRPC.Core;
-using Google.GRPC.Core.Internal;
-using System.Threading;
using System.Diagnostics;
+using System.Threading;
using System.Threading.Tasks;
-using Google.GRPC.Core.Utils;
+using Grpc.Core;
+using Grpc.Core.Internal;
+using Grpc.Core.Utils;
+using NUnit.Framework;
-namespace Google.GRPC.Core.Tests
+namespace Grpc.Core.Tests
{
public class ClientServerTest
{
@@ -133,7 +133,7 @@ namespace Google.GRPC.Core.Tests
Calls.BlockingUnaryCall(call, "ABC", default(CancellationToken));
Assert.Fail();
} catch(RpcException e) {
- Assert.AreEqual(StatusCode.GRPC_STATUS_UNIMPLEMENTED, e.Status.StatusCode);
+ Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode);
}
}
diff --git a/src/csharp/GrpcCoreTests/GrpcEnvironmentTest.cs b/src/csharp/GrpcCoreTests/GrpcEnvironmentTest.cs
index 8656b1bf01..8d3aef946a 100644
--- a/src/csharp/GrpcCoreTests/GrpcEnvironmentTest.cs
+++ b/src/csharp/GrpcCoreTests/GrpcEnvironmentTest.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using NUnit.Framework;
-using Google.GRPC.Core;
using System.Threading;
+using Grpc.Core;
+using NUnit.Framework;
-namespace Google.GRPC.Core.Tests
+namespace Grpc.Core.Tests
{
public class GrpcEnvironmentTest
{
diff --git a/src/csharp/GrpcCoreTests/Properties/AssemblyInfo.cs b/src/csharp/GrpcCoreTests/Properties/AssemblyInfo.cs
index a93d843889..07f35556df 100644
--- a/src/csharp/GrpcCoreTests/Properties/AssemblyInfo.cs
+++ b/src/csharp/GrpcCoreTests/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/GrpcCoreTests/ServerTest.cs b/src/csharp/GrpcCoreTests/ServerTest.cs
index 43414a4cc4..dd30366f6a 100644
--- a/src/csharp/GrpcCoreTests/ServerTest.cs
+++ b/src/csharp/GrpcCoreTests/ServerTest.cs
@@ -32,12 +32,12 @@
#endregion
using System;
+using Grpc.Core;
+using Grpc.Core.Internal;
+using Grpc.Core.Utils;
using NUnit.Framework;
-using Google.GRPC.Core.Internal;
-using Google.GRPC.Core;
-using Google.GRPC.Core.Utils;
-namespace Google.GRPC.Core.Tests
+namespace Grpc.Core.Tests
{
public class ServerTest
{
@@ -47,7 +47,7 @@ namespace Google.GRPC.Core.Tests
GrpcEnvironment.Initialize();
Server server = new Server();
- int port = server.AddPort("localhost:0");
+ server.AddPort("localhost:0");
server.Start();
server.ShutdownAsync().Wait();
diff --git a/src/csharp/GrpcCoreTests/TestResult.xml b/src/csharp/GrpcCoreTests/TestResult.xml
index a5a6abd7b9..13da80739c 100644
--- a/src/csharp/GrpcCoreTests/TestResult.xml
+++ b/src/csharp/GrpcCoreTests/TestResult.xml
@@ -15,17 +15,17 @@
<results>
<test-suite type="TestFixture" name="CallsTest" executed="True" result="Success" success="True" time="0.009" asserts="0">
<results>
- <test-case name="Google.GRPC.Core.Tests.CallsTest.Test1" executed="True" result="Success" success="True" time="0.004" asserts="0" />
+ <test-case name="Grpc.Core.Tests.CallsTest.Test1" executed="True" result="Success" success="True" time="0.004" asserts="0" />
</results>
</test-suite>
<test-suite type="TestFixture" name="ClientServerTest" executed="True" result="Success" success="True" time="0.149" asserts="0">
<results>
- <test-case name="Google.GRPC.Core.Tests.ClientServerTest.EmptyCall" executed="True" result="Success" success="True" time="0.111" asserts="0" />
+ <test-case name="Grpc.Core.Tests.ClientServerTest.EmptyCall" executed="True" result="Success" success="True" time="0.111" asserts="0" />
</results>
</test-suite>
<test-suite type="TestFixture" name="ServerTest" executed="True" result="Success" success="True" time="0.001" asserts="0">
<results>
- <test-case name="Google.GRPC.Core.Tests.ServerTest.StartAndShutdownServer" executed="True" result="Success" success="True" time="0.001" asserts="0" />
+ <test-case name="Grpc.Core.Tests.ServerTest.StartAndShutdownServer" executed="True" result="Success" success="True" time="0.001" asserts="0" />
</results>
</test-suite>
</results>
diff --git a/src/csharp/GrpcCoreTests/TimespecTest.cs b/src/csharp/GrpcCoreTests/TimespecTest.cs
index 2169824219..0ca84ec44b 100644
--- a/src/csharp/GrpcCoreTests/TimespecTest.cs
+++ b/src/csharp/GrpcCoreTests/TimespecTest.cs
@@ -32,11 +32,11 @@
#endregion
using System;
-using NUnit.Framework;
using System.Runtime.InteropServices;
-using Google.GRPC.Core.Internal;
+using Grpc.Core.Internal;
+using NUnit.Framework;
-namespace Google.GRPC.Core.Internal.Tests
+namespace Grpc.Core.Internal.Tests
{
public class TimespecTest
{
diff --git a/src/csharp/InteropClient/Client.cs b/src/csharp/InteropClient/Client.cs
index 945afe0642..fdec6efd2e 100644
--- a/src/csharp/InteropClient/Client.cs
+++ b/src/csharp/InteropClient/Client.cs
@@ -33,14 +33,14 @@
using System;
using System.Collections.Generic;
-using NUnit.Framework;
using System.Text.RegularExpressions;
-using Google.GRPC.Core;
-using Google.GRPC.Core.Utils;
using Google.ProtocolBuffers;
+using Grpc.Core;
+using Grpc.Core.Utils;
+using NUnit.Framework;
using grpc.testing;
-namespace Google.GRPC.Interop
+namespace Grpc.Interop
{
class Client
{
diff --git a/src/csharp/InteropClient/InteropClient.csproj b/src/csharp/InteropClient/InteropClient.csproj
index a450f3a2fe..29590f4950 100644
--- a/src/csharp/InteropClient/InteropClient.csproj
+++ b/src/csharp/InteropClient/InteropClient.csproj
@@ -9,7 +9,7 @@
<OutputType>Exe</OutputType>
<RootNamespace>InteropClient</RootNamespace>
<AssemblyName>InteropClient</AssemblyName>
- <StartupObject>Google.GRPC.Interop.Client</StartupObject>
+ <StartupObject>Grpc.Interop.Client</StartupObject>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
@@ -33,14 +33,13 @@
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
- <Reference Include="Google.ProtocolBuffers, Version=2.4.1.521, Culture=neutral, PublicKeyToken=55f7125234beb589, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
diff --git a/src/csharp/InteropClient/Properties/AssemblyInfo.cs b/src/csharp/InteropClient/Properties/AssemblyInfo.cs
index 00b4bd5895..3a13173ac7 100644
--- a/src/csharp/InteropClient/Properties/AssemblyInfo.cs
+++ b/src/csharp/InteropClient/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/MathClient/MathClient.cs b/src/csharp/MathClient/MathClient.cs
index eb9b7b105b..95a4678bb8 100644
--- a/src/csharp/MathClient/MathClient.cs
+++ b/src/csharp/MathClient/MathClient.cs
@@ -33,8 +33,8 @@
using System;
using System.Runtime.InteropServices;
-using Google.GRPC.Core;
using System.Threading;
+using Grpc.Core;
namespace math
{
diff --git a/src/csharp/MathClient/Properties/AssemblyInfo.cs b/src/csharp/MathClient/Properties/AssemblyInfo.cs
index aa614943ac..d24412f497 100644
--- a/src/csharp/MathClient/Properties/AssemblyInfo.cs
+++ b/src/csharp/MathClient/Properties/AssemblyInfo.cs
@@ -8,13 +8,13 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
-[assembly: AssemblyCopyright ("jtattermusch")]
+[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion ("1.0.*")]
+[assembly: AssemblyVersion ("0.9.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
diff --git a/src/csharp/README.md b/src/csharp/README.md
index f56ddabda5..9967af22b3 100755
--- a/src/csharp/README.md
+++ b/src/csharp/README.md
@@ -1,9 +1,9 @@
gRPC C#
=======
-A C# implementation of gRPC, Google's RPC library.
+A C# implementation of gRPC.
-EXPERIMENTAL ONLY
+Status
-----------------
**This gRPC C# implementation is work-in-progress and is not expected to work yet.**
diff --git a/src/node/.jshintrc b/src/node/.jshintrc
new file mode 100644
index 0000000000..8237e0d2b6
--- /dev/null
+++ b/src/node/.jshintrc
@@ -0,0 +1,28 @@
+{
+ "bitwise": true,
+ "curly": true,
+ "eqeqeq": true,
+ "esnext": true,
+ "freeze": true,
+ "immed": true,
+ "indent": 2,
+ "latedef": "nofunc",
+ "maxlen": 80,
+ "newcap": true,
+ "node": true,
+ "noarg": true,
+ "quotmark": "single",
+ "strict": true,
+ "trailing": true,
+ "undef": true,
+ "unused": "vars",
+ "globals": {
+ /* Mocha-provided globals */
+ "describe": false,
+ "it": false,
+ "before": false,
+ "beforeEach": false,
+ "after": false,
+ "afterEach": false
+ }
+}
diff --git a/src/node/README.md b/src/node/README.md
index c342b7ca57..8880213e9a 100644
--- a/src/node/README.md
+++ b/src/node/README.md
@@ -1,5 +1,9 @@
# Node.js gRPC Library
+## Status
+
+Alpha : Ready for early adopters
+
## Installation
First, clone this repository (NPM package coming soon). Then follow the instructions in the `INSTALL` file in the root of the repository to install the C core library that this package depends on.
diff --git a/src/node/examples/math_server.js b/src/node/examples/math_server.js
index 89bc0de3ba..ae548c89e4 100644
--- a/src/node/examples/math_server.js
+++ b/src/node/examples/math_server.js
@@ -31,9 +31,8 @@
*
*/
-var _ = require('underscore');
-var ProtoBuf = require('protobufjs');
-var fs = require('fs');
+'use strict';
+
var util = require('util');
var Transform = require('stream').Transform;
diff --git a/src/node/examples/perf_test.js b/src/node/examples/perf_test.js
index c5e2872736..31083e0987 100644
--- a/src/node/examples/perf_test.js
+++ b/src/node/examples/perf_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var grpc = require('..');
var testProto = grpc.load(__dirname + '/../interop/test.proto').grpc.testing;
var _ = require('underscore');
@@ -44,7 +46,6 @@ function runTest(iterations, callback) {
function runIterations(finish) {
var start = process.hrtime();
var intervals = [];
- var pending = iterations;
function next(i) {
if (i >= iterations) {
testServer.server.shutdown();
@@ -69,28 +70,30 @@ function runTest(iterations, callback) {
function warmUp(num) {
var pending = num;
+ function startCall() {
+ client.emptyCall({}, function(err, resp) {
+ pending--;
+ if (pending === 0) {
+ runIterations(callback);
+ }
+ });
+ }
for (var i = 0; i < num; i++) {
- (function(i) {
- client.emptyCall({}, function(err, resp) {
- pending--;
- if (pending === 0) {
- runIterations(callback);
- }
- });
- })(i);
+ startCall();
}
}
warmUp(100);
}
-function percentile(arr, percentile) {
- if (percentile > 99) {
- percentile = 99;
+function percentile(arr, pct) {
+ if (pct > 99) {
+ pct = 99;
}
- if (percentile < 0) {
- percentile = 0;
+ if (pct < 0) {
+ pct = 0;
}
- return arr[(arr.length * percentile / 100)|0];
+ var index = Math.floor(arr.length * pct / 100);
+ return arr[index];
}
if (require.main === module) {
diff --git a/src/node/examples/stock_server.js b/src/node/examples/stock_server.js
index b226a71573..e475c9cb4c 100644
--- a/src/node/examples/stock_server.js
+++ b/src/node/examples/stock_server.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var _ = require('underscore');
var grpc = require('..');
var examples = grpc.load(__dirname + '/stock.proto').examples;
diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc
index 965186e0cc..9f5095839c 100644
--- a/src/node/ext/node_grpc.cc
+++ b/src/node/ext/node_grpc.cc
@@ -38,7 +38,6 @@
#include "call.h"
#include "channel.h"
-#include "event.h"
#include "server.h"
#include "completion_queue_async_worker.h"
#include "credentials.h"
diff --git a/src/node/index.js b/src/node/index.js
index 1bef2072dd..4b5302e438 100644
--- a/src/node/index.js
+++ b/src/node/index.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var _ = require('underscore');
var ProtoBuf = require('protobufjs');
diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js
index fc2fdf4dc9..eaf254bcfe 100644
--- a/src/node/interop/interop_client.js
+++ b/src/node/interop/interop_client.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var fs = require('fs');
var path = require('path');
var grpc = require('..');
@@ -41,7 +43,8 @@ var assert = require('assert');
var AUTH_SCOPE = 'https://www.googleapis.com/auth/xapi.zoo';
var AUTH_SCOPE_RESPONSE = 'xapi.zoo';
-var AUTH_USER = '155450119199-3psnrh1sdr3d8cpj1v46naggf81mhdnk@developer.gserviceaccount.com';
+var AUTH_USER = ('155450119199-3psnrh1sdr3d8cpj1v46naggf81mhdnk' +
+ '@developer.gserviceaccount.com');
/**
* Create a buffer filled with size zeroes
@@ -318,7 +321,7 @@ var test_cases = {
/**
* Execute a single test case.
* @param {string} address The address of the server to connect to, in the
- * format "hostname:port"
+ * format 'hostname:port'
* @param {string} host_overrirde The hostname of the server to use as an SSL
* override
* @param {string} test_case The name of the test case to run
diff --git a/src/node/interop/interop_server.js b/src/node/interop/interop_server.js
index c97d234455..125ede1746 100644
--- a/src/node/interop/interop_server.js
+++ b/src/node/interop/interop_server.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var fs = require('fs');
var path = require('path');
var _ = require('underscore');
diff --git a/src/node/package.json b/src/node/package.json
index 821641ce19..a71577fb96 100644
--- a/src/node/package.json
+++ b/src/node/package.json
@@ -3,10 +3,12 @@
"version": "0.2.0",
"description": "gRPC Library for Node",
"scripts": {
- "test": "./node_modules/mocha/bin/mocha"
+ "lint": "nodejs ./node_modules/jshint/bin/jshint src test examples interop index.js",
+ "test": "nodejs ./node_modules/mocha/bin/mocha && npm run-script lint"
},
"dependencies": {
"bindings": "^1.2.1",
+ "jshint": "^2.5.5",
"nan": "~1.3.0",
"protobufjs": "murgatroid99/ProtoBuf.js",
"underscore": "^1.7.0",
@@ -17,5 +19,15 @@
"minimist": "^1.1.0",
"googleauth": "google/google-auth-library-nodejs"
},
+ "files": [
+ "README.md",
+ "index.js",
+ "binding.gyp",
+ "examples",
+ "ext",
+ "interop",
+ "src",
+ "test"
+ ],
"main": "index.js"
}
diff --git a/src/node/src/client.js b/src/node/src/client.js
index 19c3144c7d..aaa7be79c9 100644
--- a/src/node/src/client.js
+++ b/src/node/src/client.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var _ = require('underscore');
var capitalize = require('underscore.string/capitalize');
@@ -77,6 +79,7 @@ function ClientWritableStream(call, serialize) {
* @param {function(Error=)} callback Called when the write is complete
*/
function _write(chunk, encoding, callback) {
+ /* jshint validthis: true */
var batch = {};
batch[grpc.opType.SEND_MESSAGE] = this.serialize(chunk);
this.call.startBatch(batch, function(err, event) {
@@ -85,7 +88,7 @@ function _write(chunk, encoding, callback) {
}
callback();
});
-};
+}
ClientWritableStream.prototype._write = _write;
@@ -111,6 +114,7 @@ function ClientReadableStream(call, deserialize) {
* @param {*} size Ignored because we use objectMode=true
*/
function _read(size) {
+ /* jshint validthis: true */
var self = this;
/**
* Callback to be called when a READ event is received. Pushes the data onto
@@ -126,7 +130,7 @@ function _read(size) {
return;
}
var data = event.read;
- if (self.push(self.deserialize(data)) && data != null) {
+ if (self.push(self.deserialize(data)) && data !== null) {
var read_batch = {};
read_batch[grpc.opType.RECV_MESSAGE] = true;
self.call.startBatch(read_batch, readCallback);
@@ -144,7 +148,7 @@ function _read(size) {
self.call.startBatch(read_batch, readCallback);
}
}
-};
+}
ClientReadableStream.prototype._read = _read;
@@ -163,10 +167,6 @@ function ClientDuplexStream(call, serialize, deserialize) {
Duplex.call(this, {objectMode: true});
this.serialize = common.wrapIgnoreNull(serialize);
this.deserialize = common.wrapIgnoreNull(deserialize);
- var self = this;
- var finished = false;
- // Indicates that a read is currently pending
- var reading = false;
this.call = call;
this.on('finish', function() {
var batch = {};
@@ -182,6 +182,7 @@ ClientDuplexStream.prototype._write = _write;
* Cancel the ongoing call
*/
function cancel() {
+ /* jshint validthis: true */
this.call.cancel();
}
@@ -213,6 +214,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
* @return {EventEmitter} An event emitter for stream related events
*/
function makeUnaryRequest(argument, callback, metadata, deadline) {
+ /* jshint validthis: true */
if (deadline === undefined) {
deadline = Infinity;
}
@@ -242,7 +244,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
callback(err);
return;
}
- if (response.status.code != grpc.status.OK) {
+ if (response.status.code !== grpc.status.OK) {
callback(response.status);
return;
}
@@ -278,6 +280,7 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
* @return {EventEmitter} An event emitter for stream related events
*/
function makeClientStreamRequest(callback, metadata, deadline) {
+ /* jshint validthis: true */
if (deadline === undefined) {
deadline = Infinity;
}
@@ -310,7 +313,7 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
callback(err);
return;
}
- if (response.status.code != grpc.status.OK) {
+ if (response.status.code !== grpc.status.OK) {
callback(response.status);
return;
}
@@ -345,6 +348,7 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
* @return {EventEmitter} An event emitter for stream related events
*/
function makeServerStreamRequest(argument, metadata, deadline) {
+ /* jshint validthis: true */
if (deadline === undefined) {
deadline = Infinity;
}
@@ -404,6 +408,7 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
* @return {EventEmitter} An event emitter for stream related events
*/
function makeBidiStreamRequest(metadata, deadline) {
+ /* jshint validthis: true */
if (deadline === undefined) {
deadline = Infinity;
}
diff --git a/src/node/src/common.js b/src/node/src/common.js
index 848c96742d..eec8f0f987 100644
--- a/src/node/src/common.js
+++ b/src/node/src/common.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var _ = require('underscore');
var capitalize = require('underscore.string/capitalize');
diff --git a/src/node/src/server.js b/src/node/src/server.js
index 48c349ef99..91dde02251 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var _ = require('underscore');
var capitalize = require('underscore.string/capitalize');
@@ -217,6 +219,7 @@ function ServerWritableStream(call, serialize) {
* complete
*/
function _write(chunk, encoding, callback) {
+ /* jshint validthis: true */
var batch = {};
batch[grpc.opType.SEND_MESSAGE] = this.serialize(chunk);
this.call.startBatch(batch, function(err, value) {
@@ -251,6 +254,7 @@ function ServerReadableStream(call, deserialize) {
* @param {number} size Ignored
*/
function _read(size) {
+ /* jshint validthis: true */
var self = this;
/**
* Callback to be called when a READ event is received. Pushes the data onto
@@ -267,7 +271,7 @@ function _read(size) {
return;
}
var data = event.read;
- if (self.push(self.deserialize(data)) && data != null) {
+ if (self.push(self.deserialize(data)) && data !== null) {
var read_batch = {};
read_batch[grpc.opType.RECV_MESSAGE] = true;
self.call.startBatch(read_batch, readCallback);
@@ -424,7 +428,6 @@ function Server(getMetadata, options) {
var handlers = this.handlers;
var server = new grpc.Server(options);
this._server = server;
- var started = false;
/**
* Start the server and begin handling requests
* @this Server
@@ -456,8 +459,7 @@ function Server(getMetadata, options) {
return;
}
server.requestCall(handleNewCall);
- var handler = undefined;
- var deadline = details.deadline;
+ var handler;
if (handlers.hasOwnProperty(method)) {
handler = handlers[method];
} else {
@@ -465,7 +467,7 @@ function Server(getMetadata, options) {
batch[grpc.opType.SEND_INITIAL_METADATA] = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: grpc.status.UNIMPLEMENTED,
- details: "This method is not available on this server.",
+ details: 'This method is not available on this server.',
metadata: {}
};
batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
diff --git a/src/node/test/call_test.js b/src/node/test/call_test.js
index c1a7e95fa0..7b2b36ae37 100644
--- a/src/node/test/call_test.js
+++ b/src/node/test/call_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var assert = require('assert');
var grpc = require('bindings')('grpc.node');
diff --git a/src/node/test/channel_test.js b/src/node/test/channel_test.js
index 449a8cc4c3..33200c99ee 100644
--- a/src/node/test/channel_test.js
+++ b/src/node/test/channel_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var assert = require('assert');
var grpc = require('bindings')('grpc.node');
diff --git a/src/node/test/constant_test.js b/src/node/test/constant_test.js
index 4a403868c7..ecc98ec443 100644
--- a/src/node/test/constant_test.js
+++ b/src/node/test/constant_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var assert = require('assert');
var grpc = require('bindings')('grpc.node');
diff --git a/src/node/test/end_to_end_test.js b/src/node/test/end_to_end_test.js
index 8e99d6f162..1cc1928691 100644
--- a/src/node/test/end_to_end_test.js
+++ b/src/node/test/end_to_end_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var assert = require('assert');
var grpc = require('bindings')('grpc.node');
@@ -227,7 +229,7 @@ describe('end-to-end', function() {
response_batch[grpc.opType.RECV_CLOSE_ON_SERVER] = true;
server_call.startBatch(response_batch, function(err, response) {
assert(response['send status']);
- assert(!response['cancelled']);
+ assert(!response.cancelled);
done();
});
});
diff --git a/src/node/test/interop_sanity_test.js b/src/node/test/interop_sanity_test.js
index d1bdd1660f..8dc933eac5 100644
--- a/src/node/test/interop_sanity_test.js
+++ b/src/node/test/interop_sanity_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var interop_server = require('../interop/interop_server.js');
var interop_client = require('../interop/interop_client.js');
diff --git a/src/node/test/math_client_test.js b/src/node/test/math_client_test.js
index fd946e0325..d83f64116f 100644
--- a/src/node/test/math_client_test.js
+++ b/src/node/test/math_client_test.js
@@ -31,6 +31,8 @@
*
*/
+'use strict';
+
var assert = require('assert');
var grpc = require('..');
@@ -59,7 +61,7 @@ describe('Math client', function() {
});
it('should handle a single request', function(done) {
var arg = {dividend: 7, divisor: 4};
- var call = math_client.div(arg, function handleDivResult(err, value) {
+ math_client.div(arg, function handleDivResult(err, value) {
assert.ifError(err);
assert.equal(value.quotient, 1);
assert.equal(value.remainder, 3);
diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js
index d6694724e5..91d8197bee 100644
--- a/src/node/test/surface_test.js
+++ b/src/node/test/surface_test.js
@@ -31,9 +31,9 @@
*
*/
-var assert = require('assert');
+'use strict';
-var surface_server = require('../src/server.js');
+var assert = require('assert');
var surface_client = require('../src/client.js');
diff --git a/src/objective-c/GRPCClient/GRPCCall.h b/src/objective-c/GRPCClient/GRPCCall.h
index 10437cb8bc..3a18db6137 100644
--- a/src/objective-c/GRPCClient/GRPCCall.h
+++ b/src/objective-c/GRPCClient/GRPCCall.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m
index 46a1e232e3..f246b81e63 100644
--- a/src/objective-c/GRPCClient/GRPCCall.m
+++ b/src/objective-c/GRPCClient/GRPCCall.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/GRPCMethodName.h b/src/objective-c/GRPCClient/GRPCMethodName.h
index a62c479788..dcad8a3347 100644
--- a/src/objective-c/GRPCClient/GRPCMethodName.h
+++ b/src/objective-c/GRPCClient/GRPCMethodName.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/GRPCMethodName.m b/src/objective-c/GRPCClient/GRPCMethodName.m
index fbaf24b9f0..96724073a5 100644
--- a/src/objective-c/GRPCClient/GRPCMethodName.m
+++ b/src/objective-c/GRPCClient/GRPCMethodName.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.h b/src/objective-c/GRPCClient/private/GRPCChannel.h
index 7442f1fae4..2e07dcc3c7 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.h
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.m b/src/objective-c/GRPCClient/private/GRPCChannel.m
index 3e6952cfa3..c8fa69ef91 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.m
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h
index 0a8e397443..c85d57c0ea 100644
--- a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h
+++ b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.m b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.m
index c81e9a2a98..bc2a824a6b 100644
--- a/src/objective-c/GRPCClient/private/GRPCCompletionQueue.m
+++ b/src/objective-c/GRPCClient/private/GRPCCompletionQueue.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.h b/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.h
index b8a73b12df..24c2b96729 100644
--- a/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.h
+++ b/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.m b/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.m
index 73a2f51f1b..2a3a50f763 100644
--- a/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.m
+++ b/src/objective-c/GRPCClient/private/GRPCDelegateWrapper.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@
#import "GRPCDelegateWrapper.h"
-#import <net/grpc/objc/RxLibrary/GRXWriteable.h>
+#import <RxLibrary/GRXWriteable.h>
@interface GRPCDelegateWrapper ()
// These are atomic so that cancellation can nillify them from any thread.
diff --git a/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.h b/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.h
index 05e35bb1a3..28c7374517 100644
--- a/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.h
+++ b/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.m b/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.m
index 3fb9af25ec..3ad757fb29 100644
--- a/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.m
+++ b/src/objective-c/GRPCClient/private/GRPCMethodName+HTTP2Encoding.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSData+GRPC.h b/src/objective-c/GRPCClient/private/NSData+GRPC.h
index 936c2a0e8a..65ac151c2e 100644
--- a/src/objective-c/GRPCClient/private/NSData+GRPC.h
+++ b/src/objective-c/GRPCClient/private/NSData+GRPC.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSData+GRPC.m b/src/objective-c/GRPCClient/private/NSData+GRPC.m
index b5f952722c..f885e9db9c 100644
--- a/src/objective-c/GRPCClient/private/NSData+GRPC.m
+++ b/src/objective-c/GRPCClient/private/NSData+GRPC.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSDictionary+GRPC.h b/src/objective-c/GRPCClient/private/NSDictionary+GRPC.h
index bf0233fd46..8025285259 100644
--- a/src/objective-c/GRPCClient/private/NSDictionary+GRPC.h
+++ b/src/objective-c/GRPCClient/private/NSDictionary+GRPC.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSDictionary+GRPC.m b/src/objective-c/GRPCClient/private/NSDictionary+GRPC.m
index 345ff3e1e6..e59685e4a8 100644
--- a/src/objective-c/GRPCClient/private/NSDictionary+GRPC.m
+++ b/src/objective-c/GRPCClient/private/NSDictionary+GRPC.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSError+GRPC.h b/src/objective-c/GRPCClient/private/NSError+GRPC.h
index b7439fa067..6183008983 100644
--- a/src/objective-c/GRPCClient/private/NSError+GRPC.h
+++ b/src/objective-c/GRPCClient/private/NSError+GRPC.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/GRPCClient/private/NSError+GRPC.m b/src/objective-c/GRPCClient/private/NSError+GRPC.m
index 4fc1249efc..15c0208681 100644
--- a/src/objective-c/GRPCClient/private/NSError+GRPC.m
+++ b/src/objective-c/GRPCClient/private/NSError+GRPC.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXImmediateWriter.h b/src/objective-c/RxLibrary/GRXImmediateWriter.h
index 74f4dc69f4..f86d38dcd8 100644
--- a/src/objective-c/RxLibrary/GRXImmediateWriter.h
+++ b/src/objective-c/RxLibrary/GRXImmediateWriter.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXImmediateWriter.m b/src/objective-c/RxLibrary/GRXImmediateWriter.m
index 4417ae8f16..7468af557f 100644
--- a/src/objective-c/RxLibrary/GRXImmediateWriter.m
+++ b/src/objective-c/RxLibrary/GRXImmediateWriter.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriteable.h b/src/objective-c/RxLibrary/GRXWriteable.h
index 5aa00ba40e..cdcb99f459 100644
--- a/src/objective-c/RxLibrary/GRXWriteable.h
+++ b/src/objective-c/RxLibrary/GRXWriteable.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriteable.m b/src/objective-c/RxLibrary/GRXWriteable.m
index 9567e42b74..7231f06462 100644
--- a/src/objective-c/RxLibrary/GRXWriteable.m
+++ b/src/objective-c/RxLibrary/GRXWriteable.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter+Immediate.h b/src/objective-c/RxLibrary/GRXWriter+Immediate.h
index 101df81e5e..b75c0a5a64 100644
--- a/src/objective-c/RxLibrary/GRXWriter+Immediate.h
+++ b/src/objective-c/RxLibrary/GRXWriter+Immediate.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter+Immediate.m b/src/objective-c/RxLibrary/GRXWriter+Immediate.m
index 7dab5e2ba5..39c54f86ec 100644
--- a/src/objective-c/RxLibrary/GRXWriter+Immediate.m
+++ b/src/objective-c/RxLibrary/GRXWriter+Immediate.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter+Transformations.h b/src/objective-c/RxLibrary/GRXWriter+Transformations.h
index cfd644b520..60c4da37d6 100644
--- a/src/objective-c/RxLibrary/GRXWriter+Transformations.h
+++ b/src/objective-c/RxLibrary/GRXWriter+Transformations.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter+Transformations.m b/src/objective-c/RxLibrary/GRXWriter+Transformations.m
index 67c54a7e80..d37ed308cc 100644
--- a/src/objective-c/RxLibrary/GRXWriter+Transformations.m
+++ b/src/objective-c/RxLibrary/GRXWriter+Transformations.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter.h b/src/objective-c/RxLibrary/GRXWriter.h
index 8bda52fcb9..68c294f007 100644
--- a/src/objective-c/RxLibrary/GRXWriter.h
+++ b/src/objective-c/RxLibrary/GRXWriter.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/GRXWriter.m b/src/objective-c/RxLibrary/GRXWriter.m
index 7d6c2acd36..b48a44f3a7 100644
--- a/src/objective-c/RxLibrary/GRXWriter.m
+++ b/src/objective-c/RxLibrary/GRXWriter.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.h b/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.h
index e3f8bbe9c2..400e834c6a 100644
--- a/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.h
+++ b/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.m b/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.m
index 807a1cd700..5fc81e3292 100644
--- a/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.m
+++ b/src/objective-c/RxLibrary/NSEnumerator+GRXUtil.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.h b/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.h
index 4253324e95..34cfc4d8a7 100644
--- a/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.h
+++ b/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.m b/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.m
index 53b8bb863d..163e310bcf 100644
--- a/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.m
+++ b/src/objective-c/RxLibrary/private/GRXNSBlockEnumerator.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.h b/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.h
index 1c28b158d7..1565029205 100644
--- a/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.h
+++ b/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.m b/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.m
index 2bbefacd69..2050fa98ec 100644
--- a/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.m
+++ b/src/objective-c/RxLibrary/private/GRXNSFastEnumerator.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.h b/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.h
index 5f4026e3a5..12aa51e213 100644
--- a/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.h
+++ b/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.m b/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.m
index 18f6ddfc26..f323ea14e6 100644
--- a/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.m
+++ b/src/objective-c/RxLibrary/private/GRXNSScalarEnumerator.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h
index 72249b486b..dcebb6132a 100644
--- a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h
+++ b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m
index 8375aefdcd..8a41c819a6 100644
--- a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m
+++ b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2014, Google Inc.
+ * Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/php/README.md b/src/php/README.md
index 620c68fd7b..40c79e0dd4 100755
--- a/src/php/README.md
+++ b/src/php/README.md
@@ -1,4 +1,12 @@
-# PHP wrapper for the GRPC interfaces.
+
+#Overview
+
+This directory contains source code for PHP implementation of gRPC layered on shared C library.
+
+#Status
+
+Pre-Alpha : This gRPC PHP implementation is work-in-progress and is not expected to work yet.
+
## LAYOUT
diff --git a/src/python/README.md b/src/python/README.md
new file mode 100755
index 0000000000..be2f2bedf9
--- /dev/null
+++ b/src/python/README.md
@@ -0,0 +1,34 @@
+GRPC Python
+=========
+
+The Python facility of GRPC.
+
+
+Prerequisites
+-----------------------
+
+Python 2.7, virtualenv, pip, libprotobuf-dev, and libprotoc-dev.
+
+
+Building from source
+----------------------
+
+- Build the GRPC core
+E.g, from the root of the grpc [git repo](https://github.com/google/grpc)
+```
+$ make shared_c static_c
+```
+
+- Use build_python.sh to build the Python code and install it into a virtual environment
+```
+$ tools/run_tests/build_python.sh
+```
+
+
+Testing
+-----------------------
+
+- Use run_python.sh to run GRPC as it was installed into the virtual environment
+```
+$ tools/run_tests/run_python.sh
+```
diff --git a/src/python/interop/interop/methods.py b/src/python/interop/interop/methods.py
index 854dbec8cc..26c1869f93 100644
--- a/src/python/interop/interop/methods.py
+++ b/src/python/interop/interop/methods.py
@@ -37,9 +37,11 @@ from interop import messages_pb2
def _empty_call(request):
return empty_pb2.Empty()
-EMPTY_CALL = utilities.unary_unary_rpc_method(
- _empty_call, empty_pb2.Empty.SerializeToString, empty_pb2.Empty.FromString,
+_CLIENT_EMPTY_CALL = utilities.unary_unary_client_rpc_method(
empty_pb2.Empty.SerializeToString, empty_pb2.Empty.FromString)
+_SERVER_EMPTY_CALL = utilities.unary_unary_server_rpc_method(
+ _empty_call, empty_pb2.Empty.FromString,
+ empty_pb2.Empty.SerializeToString)
def _unary_call(request):
@@ -48,11 +50,12 @@ def _unary_call(request):
type=messages_pb2.COMPRESSABLE,
body=b'\x00' * request.response_size))
-UNARY_CALL = utilities.unary_unary_rpc_method(
- _unary_call, messages_pb2.SimpleRequest.SerializeToString,
- messages_pb2.SimpleRequest.FromString,
- messages_pb2.SimpleResponse.SerializeToString,
+_CLIENT_UNARY_CALL = utilities.unary_unary_client_rpc_method(
+ messages_pb2.SimpleRequest.SerializeToString,
messages_pb2.SimpleResponse.FromString)
+_SERVER_UNARY_CALL = utilities.unary_unary_server_rpc_method(
+ _unary_call, messages_pb2.SimpleRequest.FromString,
+ messages_pb2.SimpleResponse.SerializeToString)
def _streaming_output_call(request):
@@ -62,12 +65,13 @@ def _streaming_output_call(request):
type=request.response_type,
body=b'\x00' * response_parameters.size))
-STREAMING_OUTPUT_CALL = utilities.unary_stream_rpc_method(
- _streaming_output_call,
+_CLIENT_STREAMING_OUTPUT_CALL = utilities.unary_stream_client_rpc_method(
messages_pb2.StreamingOutputCallRequest.SerializeToString,
- messages_pb2.StreamingOutputCallRequest.FromString,
- messages_pb2.StreamingOutputCallResponse.SerializeToString,
messages_pb2.StreamingOutputCallResponse.FromString)
+_SERVER_STREAMING_OUTPUT_CALL = utilities.unary_stream_server_rpc_method(
+ _streaming_output_call,
+ messages_pb2.StreamingOutputCallRequest.FromString,
+ messages_pb2.StreamingOutputCallResponse.SerializeToString)
def _streaming_input_call(request_iterator):
@@ -78,12 +82,13 @@ def _streaming_input_call(request_iterator):
return messages_pb2.StreamingInputCallResponse(
aggregated_payload_size=aggregate_size)
-STREAMING_INPUT_CALL = utilities.stream_unary_rpc_method(
- _streaming_input_call,
+_CLIENT_STREAMING_INPUT_CALL = utilities.stream_unary_client_rpc_method(
messages_pb2.StreamingInputCallRequest.SerializeToString,
- messages_pb2.StreamingInputCallRequest.FromString,
- messages_pb2.StreamingInputCallResponse.SerializeToString,
messages_pb2.StreamingInputCallResponse.FromString)
+_SERVER_STREAMING_INPUT_CALL = utilities.stream_unary_server_rpc_method(
+ _streaming_input_call,
+ messages_pb2.StreamingInputCallRequest.FromString,
+ messages_pb2.StreamingInputCallResponse.SerializeToString)
def _full_duplex_call(request_iterator):
@@ -93,17 +98,47 @@ def _full_duplex_call(request_iterator):
type=request.payload.type,
body=b'\x00' * request.response_parameters[0].size))
-FULL_DUPLEX_CALL = utilities.stream_stream_rpc_method(
- _full_duplex_call,
+_CLIENT_FULL_DUPLEX_CALL = utilities.stream_stream_client_rpc_method(
messages_pb2.StreamingOutputCallRequest.SerializeToString,
- messages_pb2.StreamingOutputCallRequest.FromString,
- messages_pb2.StreamingOutputCallResponse.SerializeToString,
messages_pb2.StreamingOutputCallResponse.FromString)
+_SERVER_FULL_DUPLEX_CALL = utilities.stream_stream_server_rpc_method(
+ _full_duplex_call,
+ messages_pb2.StreamingOutputCallRequest.FromString,
+ messages_pb2.StreamingOutputCallResponse.SerializeToString)
# NOTE(nathaniel): Apparently this is the same as the full-duplex call?
-HALF_DUPLEX_CALL = utilities.stream_stream_rpc_method(
- _full_duplex_call,
+_CLIENT_HALF_DUPLEX_CALL = utilities.stream_stream_client_rpc_method(
messages_pb2.StreamingOutputCallRequest.SerializeToString,
- messages_pb2.StreamingOutputCallRequest.FromString,
- messages_pb2.StreamingOutputCallResponse.SerializeToString,
messages_pb2.StreamingOutputCallResponse.FromString)
+_SERVER_HALF_DUPLEX_CALL = utilities.stream_stream_server_rpc_method(
+ _full_duplex_call,
+ messages_pb2.StreamingOutputCallRequest.FromString,
+ messages_pb2.StreamingOutputCallResponse.SerializeToString)
+
+
+_SERVICE_NAME = '/grpc.testing.TestService'
+
+EMPTY_CALL_METHOD_NAME = _SERVICE_NAME + '/EmptyCall'
+UNARY_CALL_METHOD_NAME = _SERVICE_NAME + '/UnaryCall'
+STREAMING_OUTPUT_CALL_METHOD_NAME = _SERVICE_NAME + '/StreamingOutputCall'
+STREAMING_INPUT_CALL_METHOD_NAME = _SERVICE_NAME + '/StreamingInputCall'
+FULL_DUPLEX_CALL_METHOD_NAME = _SERVICE_NAME + '/FullDuplexCall'
+HALF_DUPLEX_CALL_METHOD_NAME = _SERVICE_NAME + '/HalfDuplexCall'
+
+CLIENT_METHODS = {
+ EMPTY_CALL_METHOD_NAME: _CLIENT_EMPTY_CALL,
+ UNARY_CALL_METHOD_NAME: _CLIENT_UNARY_CALL,
+ STREAMING_OUTPUT_CALL_METHOD_NAME: _CLIENT_STREAMING_OUTPUT_CALL,
+ STREAMING_INPUT_CALL_METHOD_NAME: _CLIENT_STREAMING_INPUT_CALL,
+ FULL_DUPLEX_CALL_METHOD_NAME: _CLIENT_FULL_DUPLEX_CALL,
+ HALF_DUPLEX_CALL_METHOD_NAME: _CLIENT_HALF_DUPLEX_CALL,
+}
+
+SERVER_METHODS = {
+ EMPTY_CALL_METHOD_NAME: _SERVER_EMPTY_CALL,
+ UNARY_CALL_METHOD_NAME: _SERVER_UNARY_CALL,
+ STREAMING_OUTPUT_CALL_METHOD_NAME: _SERVER_STREAMING_OUTPUT_CALL,
+ STREAMING_INPUT_CALL_METHOD_NAME: _SERVER_STREAMING_INPUT_CALL,
+ FULL_DUPLEX_CALL_METHOD_NAME: _SERVER_FULL_DUPLEX_CALL,
+ HALF_DUPLEX_CALL_METHOD_NAME: _SERVER_HALF_DUPLEX_CALL,
+}
diff --git a/src/python/interop/interop/server.py b/src/python/interop/interop/server.py
index 0035e062a4..785d482fe5 100644
--- a/src/python/interop/interop/server.py
+++ b/src/python/interop/interop/server.py
@@ -43,19 +43,6 @@ _ONE_DAY_IN_SECONDS = 60 * 60 * 24
_PRIVATE_KEY_RESOURCE_PATH = 'credentials/server1.key'
_CERTIFICATE_CHAIN_RESOURCE_PATH = 'credentials/server1.pem'
-_METHODS = {
- '/grpc.testing.TestService/EmptyCall': methods.EMPTY_CALL,
- '/grpc.testing.TestService/UnaryCall': methods.UNARY_CALL,
- '/grpc.testing.TestService/StreamingOutputCall':
- methods.STREAMING_OUTPUT_CALL,
- '/grpc.testing.TestService/StreamingInputCall':
- methods.STREAMING_INPUT_CALL,
- '/grpc.testing.TestService/FullDuplexCall':
- methods.FULL_DUPLEX_CALL,
- '/grpc.testing.TestService/HalfDuplexCall':
- methods.HALF_DUPLEX_CALL,
-}
-
def serve():
parser = argparse.ArgumentParser()
@@ -72,10 +59,10 @@ def serve():
certificate_chain = pkg_resources.resource_string(
__name__, _CERTIFICATE_CHAIN_RESOURCE_PATH)
server = implementations.secure_server(
- _METHODS, args.port, private_key, certificate_chain)
+ methods.SERVER_METHODS, args.port, private_key, certificate_chain)
else:
server = implementations.insecure_server(
- _METHODS, args.port)
+ methods.SERVER_METHODS, args.port)
server.start()
logging.info('Server serving.')
diff --git a/src/python/src/grpc/_adapter/_c.c b/src/python/src/grpc/_adapter/_c.c
index 13eb93fe5a..55b9d0512c 100644
--- a/src/python/src/grpc/_adapter/_c.c
+++ b/src/python/src/grpc/_adapter/_c.c
@@ -40,19 +40,20 @@
#include "grpc/_adapter/_server.h"
#include "grpc/_adapter/_server_credentials.h"
-static PyObject *init(PyObject *self, PyObject *args) {
+static PyObject *init(PyObject *self) {
grpc_init();
Py_RETURN_NONE;
}
-static PyObject *shutdown(PyObject *self, PyObject *args) {
+static PyObject *shutdown(PyObject *self) {
grpc_shutdown();
Py_RETURN_NONE;
}
static PyMethodDef _c_methods[] = {
- {"init", init, METH_VARARGS, "Initialize the module's static state."},
- {"shut_down", shutdown, METH_VARARGS,
+ {"init", (PyCFunction)init, METH_NOARGS,
+ "Initialize the module's static state."},
+ {"shut_down", (PyCFunction)shutdown, METH_NOARGS,
"Shut down the module's static state."},
{NULL},
};
diff --git a/src/python/src/grpc/_adapter/_call.c b/src/python/src/grpc/_adapter/_call.c
index 7e62c1b7a3..325d3d5bbd 100644
--- a/src/python/src/grpc/_adapter/_call.c
+++ b/src/python/src/grpc/_adapter/_call.c
@@ -46,10 +46,11 @@ static int pygrpc_call_init(Call *self, PyObject *args, PyObject *kwds) {
const char *method;
const char *host;
const double deadline;
+ static char *kwlist[] = {"channel", "method", "host", "deadline", NULL};
- if (!PyArg_ParseTuple(args, "O!ssd", &pygrpc_ChannelType, &channel, &method,
- &host, &deadline)) {
- self->c_call = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!ssd:Call", kwlist,
+ &pygrpc_ChannelType, &channel, &method,
+ &host, &deadline)) {
return -1;
}
@@ -77,7 +78,7 @@ static const PyObject *pygrpc_call_invoke(Call *self, PyObject *args) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "O!OO", &pygrpc_CompletionQueueType,
+ if (!(PyArg_ParseTuple(args, "O!OO:invoke", &pygrpc_CompletionQueueType,
&completion_queue, &metadata_tag, &finish_tag))) {
return NULL;
}
@@ -103,7 +104,7 @@ static const PyObject *pygrpc_call_write(Call *self, PyObject *args) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "s#O", &bytes, &length, &tag))) {
+ if (!(PyArg_ParseTuple(args, "s#O:write", &bytes, &length, &tag))) {
return NULL;
}
@@ -123,15 +124,10 @@ static const PyObject *pygrpc_call_write(Call *self, PyObject *args) {
return result;
}
-static const PyObject *pygrpc_call_complete(Call *self, PyObject *args) {
- const PyObject *tag;
+static const PyObject *pygrpc_call_complete(Call *self, PyObject *tag) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "O", &tag))) {
- return NULL;
- }
-
call_error = grpc_call_writes_done_old(self->c_call, (void *)tag);
result = pygrpc_translate_call_error(call_error);
@@ -147,7 +143,7 @@ static const PyObject *pygrpc_call_accept(Call *self, PyObject *args) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "O!O", &pygrpc_CompletionQueueType,
+ if (!(PyArg_ParseTuple(args, "O!O:accept", &pygrpc_CompletionQueueType,
&completion_queue, &tag))) {
return NULL;
}
@@ -164,21 +160,16 @@ static const PyObject *pygrpc_call_accept(Call *self, PyObject *args) {
return result;
}
-static const PyObject *pygrpc_call_premetadata(Call *self, PyObject *args) {
+static const PyObject *pygrpc_call_premetadata(Call *self) {
/* TODO(b/18702680): Actually support metadata. */
return pygrpc_translate_call_error(
grpc_call_server_end_initial_metadata_old(self->c_call, 0));
}
-static const PyObject *pygrpc_call_read(Call *self, PyObject *args) {
- const PyObject *tag;
+static const PyObject *pygrpc_call_read(Call *self, PyObject *tag) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "O", &tag))) {
- return NULL;
- }
-
call_error = grpc_call_start_read_old(self->c_call, (void *)tag);
result = pygrpc_translate_call_error(call_error);
@@ -198,16 +189,30 @@ static const PyObject *pygrpc_call_status(Call *self, PyObject *args) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "OO", &status, &tag))) {
+ if (!(PyArg_ParseTuple(args, "OO:status", &status, &tag))) {
return NULL;
}
code = PyObject_GetAttrString(status, "code");
+ if (code == NULL) {
+ return NULL;
+ }
details = PyObject_GetAttrString(status, "details");
+ if (details == NULL) {
+ Py_DECREF(code);
+ return NULL;
+ }
c_code = PyInt_AsLong(code);
- c_message = PyBytes_AsString(details);
Py_DECREF(code);
+ if (c_code == -1 && PyErr_Occurred()) {
+ Py_DECREF(details);
+ return NULL;
+ }
+ c_message = PyBytes_AsString(details);
Py_DECREF(details);
+ if (c_message == NULL) {
+ return NULL;
+ }
call_error = grpc_call_start_write_status_old(self->c_call, c_code, c_message,
(void *)tag);
@@ -228,12 +233,12 @@ static PyMethodDef methods[] = {
"Invoke this call."},
{"write", (PyCFunction)pygrpc_call_write, METH_VARARGS,
"Write bytes to this call."},
- {"complete", (PyCFunction)pygrpc_call_complete, METH_VARARGS,
+ {"complete", (PyCFunction)pygrpc_call_complete, METH_O,
"Complete writes to this call."},
{"accept", (PyCFunction)pygrpc_call_accept, METH_VARARGS, "Accept an RPC."},
{"premetadata", (PyCFunction)pygrpc_call_premetadata, METH_VARARGS,
"Indicate the end of leading metadata in the response."},
- {"read", (PyCFunction)pygrpc_call_read, METH_VARARGS,
+ {"read", (PyCFunction)pygrpc_call_read, METH_O,
"Read bytes from this call."},
{"status", (PyCFunction)pygrpc_call_status, METH_VARARGS,
"Report this call's status."},
@@ -242,7 +247,7 @@ static PyMethodDef methods[] = {
{NULL}};
PyTypeObject pygrpc_CallType = {
- PyObject_HEAD_INIT(NULL)0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_grpc.Call", /*tp_name*/
sizeof(Call), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -278,16 +283,16 @@ PyTypeObject pygrpc_CallType = {
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pygrpc_call_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
int pygrpc_add_call(PyObject *module) {
- pygrpc_CallType.tp_new = PyType_GenericNew;
if (PyType_Ready(&pygrpc_CallType) < 0) {
- PyErr_SetString(PyExc_RuntimeError, "Error defining pygrpc_CallType!");
return -1;
}
if (PyModule_AddObject(module, "Call", (PyObject *)&pygrpc_CallType) == -1) {
- PyErr_SetString(PyExc_ImportError, "Couldn't add Call type to module!");
+ return -1;
}
return 0;
}
diff --git a/src/python/src/grpc/_adapter/_channel.c b/src/python/src/grpc/_adapter/_channel.c
index 6962722ed2..3ba943e4b2 100644
--- a/src/python/src/grpc/_adapter/_channel.c
+++ b/src/python/src/grpc/_adapter/_channel.c
@@ -38,9 +38,10 @@
static int pygrpc_channel_init(Channel *self, PyObject *args, PyObject *kwds) {
const char *hostport;
+ static char *kwlist[] = {"hostport", NULL};
- if (!(PyArg_ParseTuple(args, "s", &hostport))) {
- self->c_channel = NULL;
+ if (!(PyArg_ParseTupleAndKeywords(args, kwds, "s:Channel", kwlist,
+ &hostport))) {
return -1;
}
@@ -56,7 +57,7 @@ static void pygrpc_channel_dealloc(Channel *self) {
}
PyTypeObject pygrpc_ChannelType = {
- PyObject_HEAD_INIT(NULL)0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_grpc.Channel", /*tp_name*/
sizeof(Channel), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -92,17 +93,16 @@ PyTypeObject pygrpc_ChannelType = {
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pygrpc_channel_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
int pygrpc_add_channel(PyObject *module) {
- pygrpc_ChannelType.tp_new = PyType_GenericNew;
if (PyType_Ready(&pygrpc_ChannelType) < 0) {
- PyErr_SetString(PyExc_RuntimeError, "Error defining pygrpc_ChannelType!");
return -1;
}
if (PyModule_AddObject(module, "Channel", (PyObject *)&pygrpc_ChannelType) ==
-1) {
- PyErr_SetString(PyExc_ImportError, "Couldn't add Channel type to module!");
return -1;
}
return 0;
diff --git a/src/python/src/grpc/_adapter/_completion_queue.c b/src/python/src/grpc/_adapter/_completion_queue.c
index 1d593d0d14..b56ca1926e 100644
--- a/src/python/src/grpc/_adapter/_completion_queue.c
+++ b/src/python/src/grpc/_adapter/_completion_queue.c
@@ -70,7 +70,7 @@ static PyObject *metadata_event_kind;
static PyObject *finish_event_kind;
static PyObject *pygrpc_as_py_time(gpr_timespec *timespec) {
- return Py_BuildValue("f",
+ return PyFloat_FromDouble(
timespec->tv_sec + ((double)timespec->tv_nsec) / 1.0E9);
}
@@ -116,67 +116,82 @@ static PyObject *pygrpc_status_code(grpc_status_code c_status_code) {
}
static PyObject *pygrpc_stop_event_args(grpc_event *c_event) {
- return Py_BuildValue("(OOOOOOO)", stop_event_kind, Py_None, Py_None, Py_None,
- Py_None, Py_None, Py_None);
+ return PyTuple_Pack(7, stop_event_kind, Py_None, Py_None, Py_None,
+ Py_None, Py_None, Py_None);
}
static PyObject *pygrpc_write_event_args(grpc_event *c_event) {
PyObject *write_accepted =
c_event->data.write_accepted == GRPC_OP_OK ? Py_True : Py_False;
- return Py_BuildValue("(OOOOOOO)", write_event_kind, (PyObject *)c_event->tag,
- write_accepted, Py_None, Py_None, Py_None, Py_None);
+ return PyTuple_Pack(7, write_event_kind, (PyObject *)c_event->tag,
+ write_accepted, Py_None, Py_None, Py_None, Py_None);
}
static PyObject *pygrpc_complete_event_args(grpc_event *c_event) {
PyObject *complete_accepted =
c_event->data.finish_accepted == GRPC_OP_OK ? Py_True : Py_False;
- return Py_BuildValue("(OOOOOOO)", complete_event_kind,
- (PyObject *)c_event->tag, Py_None, complete_accepted,
- Py_None, Py_None, Py_None);
+ return PyTuple_Pack(7, complete_event_kind, (PyObject *)c_event->tag,
+ Py_None, complete_accepted, Py_None, Py_None, Py_None);
}
static PyObject *pygrpc_service_event_args(grpc_event *c_event) {
if (c_event->data.server_rpc_new.method == NULL) {
- return Py_BuildValue("(OOOOOOO)", service_event_kind, c_event->tag,
- Py_None, Py_None, Py_None, Py_None, Py_None);
+ return PyTuple_Pack(7, service_event_kind, c_event->tag,
+ Py_None, Py_None, Py_None, Py_None, Py_None);
} else {
- PyObject *method = PyBytes_FromString(c_event->data.server_rpc_new.method);
- PyObject *host = PyBytes_FromString(c_event->data.server_rpc_new.host);
- PyObject *service_deadline =
+ PyObject *method = NULL;
+ PyObject *host = NULL;
+ PyObject *service_deadline = NULL;
+ Call *call = NULL;
+ PyObject *service_acceptance = NULL;
+ PyObject *event_args = NULL;
+
+ method = PyBytes_FromString(c_event->data.server_rpc_new.method);
+ if (method == NULL) {
+ goto error;
+ }
+ host = PyBytes_FromString(c_event->data.server_rpc_new.host);
+ if (host == NULL) {
+ goto error;
+ }
+ service_deadline =
pygrpc_as_py_time(&c_event->data.server_rpc_new.deadline);
-
- Call *call;
- PyObject *service_acceptance_args;
- PyObject *service_acceptance;
- PyObject *event_args;
+ if (service_deadline == NULL) {
+ goto error;
+ }
call = PyObject_New(Call, &pygrpc_CallType);
+ if (call == NULL) {
+ goto error;
+ }
call->c_call = c_event->call;
- service_acceptance_args =
- Py_BuildValue("(OOOO)", call, method, host, service_deadline);
- Py_DECREF(call);
- Py_DECREF(method);
- Py_DECREF(host);
- Py_DECREF(service_deadline);
-
service_acceptance =
- PyObject_CallObject(service_acceptance_class, service_acceptance_args);
- Py_DECREF(service_acceptance_args);
+ PyObject_CallFunctionObjArgs(service_acceptance_class, call, method,
+ host, service_deadline, NULL);
+ if (service_acceptance == NULL) {
+ goto error;
+ }
+
+ event_args = PyTuple_Pack(7, service_event_kind,
+ (PyObject *)c_event->tag, Py_None, Py_None,
+ service_acceptance, Py_None, Py_None);
- event_args = Py_BuildValue("(OOOOOOO)", service_event_kind,
- (PyObject *)c_event->tag, Py_None, Py_None,
- service_acceptance, Py_None, Py_None);
Py_DECREF(service_acceptance);
+error:
+ Py_XDECREF(call);
+ Py_XDECREF(method);
+ Py_XDECREF(host);
+ Py_XDECREF(service_deadline);
+
return event_args;
}
}
static PyObject *pygrpc_read_event_args(grpc_event *c_event) {
if (c_event->data.read == NULL) {
- return Py_BuildValue("(OOOOOOO)", read_event_kind,
- (PyObject *)c_event->tag, Py_None, Py_None, Py_None,
- Py_None, Py_None);
+ return PyTuple_Pack(7, read_event_kind, (PyObject *)c_event->tag,
+ Py_None, Py_None, Py_None, Py_None, Py_None);
} else {
size_t length;
size_t offset;
@@ -198,9 +213,11 @@ static PyObject *pygrpc_read_event_args(grpc_event *c_event) {
grpc_byte_buffer_reader_destroy(reader);
bytes = PyBytes_FromStringAndSize(c_bytes, length);
gpr_free(c_bytes);
- event_args =
- Py_BuildValue("(OOOOOOO)", read_event_kind, (PyObject *)c_event->tag,
- Py_None, Py_None, Py_None, bytes, Py_None);
+ if (bytes == NULL) {
+ return NULL;
+ }
+ event_args = PyTuple_Pack(7, read_event_kind, (PyObject *)c_event->tag,
+ Py_None, Py_None, Py_None, bytes, Py_None);
Py_DECREF(bytes);
return event_args;
}
@@ -208,15 +225,13 @@ static PyObject *pygrpc_read_event_args(grpc_event *c_event) {
static PyObject *pygrpc_metadata_event_args(grpc_event *c_event) {
/* TODO(nathaniel): Actual transmission of metadata. */
- return Py_BuildValue("(OOOOOOO)", metadata_event_kind,
- (PyObject *)c_event->tag, Py_None, Py_None, Py_None,
- Py_None, Py_None);
+ return PyTuple_Pack(7, metadata_event_kind, (PyObject *)c_event->tag,
+ Py_None, Py_None, Py_None, Py_None, Py_None);
}
static PyObject *pygrpc_finished_event_args(grpc_event *c_event) {
PyObject *code;
PyObject *details;
- PyObject *status_args;
PyObject *status;
PyObject *event_args;
@@ -230,19 +245,26 @@ static PyObject *pygrpc_finished_event_args(grpc_event *c_event) {
} else {
details = PyBytes_FromString(c_event->data.finished.details);
}
- status_args = Py_BuildValue("(OO)", code, details);
+ if (details == NULL) {
+ return NULL;
+ }
+ status = PyObject_CallFunctionObjArgs(status_class, code, details, NULL);
Py_DECREF(details);
- status = PyObject_CallObject(status_class, status_args);
- Py_DECREF(status_args);
- event_args =
- Py_BuildValue("(OOOOOOO)", finish_event_kind, (PyObject *)c_event->tag,
- Py_None, Py_None, Py_None, Py_None, status);
+ if (status == NULL) {
+ return NULL;
+ }
+ event_args = PyTuple_Pack(7, finish_event_kind, (PyObject *)c_event->tag,
+ Py_None, Py_None, Py_None, Py_None, status);
Py_DECREF(status);
return event_args;
}
static int pygrpc_completion_queue_init(CompletionQueue *self, PyObject *args,
PyObject *kwds) {
+ static char *kwlist[] = {NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, ":CompletionQueue", kwlist)) {
+ return -1;
+ }
self->c_completion_queue = grpc_completion_queue_create();
return 0;
}
@@ -262,7 +284,7 @@ static PyObject *pygrpc_completion_queue_get(CompletionQueue *self,
PyObject *event_args;
PyObject *event;
- if (!(PyArg_ParseTuple(args, "O", &deadline))) {
+ if (!(PyArg_ParseTuple(args, "O:get", &deadline))) {
return NULL;
}
@@ -270,6 +292,9 @@ static PyObject *pygrpc_completion_queue_get(CompletionQueue *self,
deadline_timespec = gpr_inf_future;
} else {
double_deadline = PyFloat_AsDouble(deadline);
+ if (PyErr_Occurred()) {
+ return NULL;
+ }
deadline_timespec = gpr_time_from_nanos((long)(double_deadline * 1.0E9));
}
@@ -339,7 +364,7 @@ static PyMethodDef methods[] = {
{NULL}};
PyTypeObject pygrpc_CompletionQueueType = {
- PyObject_HEAD_INIT(NULL)0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_gprc.CompletionQueue", /*tp_name*/
sizeof(CompletionQueue), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -375,6 +400,8 @@ PyTypeObject pygrpc_CompletionQueueType = {
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pygrpc_completion_queue_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
static int pygrpc_get_status_codes(PyObject *datatypes_module) {
@@ -503,7 +530,6 @@ int pygrpc_add_completion_queue(PyObject *module) {
char *datatypes_module_path = "grpc._adapter._datatypes";
PyObject *datatypes_module = PyImport_ImportModule(datatypes_module_path);
if (datatypes_module == NULL) {
- PyErr_SetString(PyExc_ImportError, datatypes_module_path);
return -1;
}
status_class = PyObject_GetAttrString(datatypes_module, "Status");
@@ -512,29 +538,21 @@ int pygrpc_add_completion_queue(PyObject *module) {
event_class = PyObject_GetAttrString(datatypes_module, "Event");
if (status_class == NULL || service_acceptance_class == NULL ||
event_class == NULL) {
- PyErr_SetString(PyExc_ImportError, "Missing classes in _datatypes module!");
return -1;
}
if (pygrpc_get_status_codes(datatypes_module) == -1) {
- PyErr_SetString(PyExc_ImportError, "Status codes import broken!");
return -1;
}
if (pygrpc_get_event_kinds(event_class) == -1) {
- PyErr_SetString(PyExc_ImportError, "Event kinds import broken!");
return -1;
}
Py_DECREF(datatypes_module);
- pygrpc_CompletionQueueType.tp_new = PyType_GenericNew;
if (PyType_Ready(&pygrpc_CompletionQueueType) < 0) {
- PyErr_SetString(PyExc_RuntimeError,
- "Error defining pygrpc_CompletionQueueType!");
return -1;
}
if (PyModule_AddObject(module, "CompletionQueue",
(PyObject *)&pygrpc_CompletionQueueType) == -1) {
- PyErr_SetString(PyExc_ImportError,
- "Couldn't add CompletionQueue type to module!");
return -1;
}
return 0;
diff --git a/src/python/src/grpc/_adapter/_server.c b/src/python/src/grpc/_adapter/_server.c
index d4bf5fb8f6..ae7ae5b5d2 100644
--- a/src/python/src/grpc/_adapter/_server.c
+++ b/src/python/src/grpc/_adapter/_server.c
@@ -43,9 +43,11 @@
static int pygrpc_server_init(Server *self, PyObject *args, PyObject *kwds) {
const PyObject *completion_queue;
PyObject *server_credentials;
- if (!(PyArg_ParseTuple(args, "O!O", &pygrpc_CompletionQueueType,
- &completion_queue, &server_credentials))) {
- self->c_server = NULL;
+ static char *kwlist[] = {"completion_queue", "server_credentials", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O:Server", kwlist,
+ &pygrpc_CompletionQueueType,
+ &completion_queue, &server_credentials)) {
return -1;
}
if (server_credentials == Py_None) {
@@ -59,7 +61,9 @@ static int pygrpc_server_init(Server *self, PyObject *args, PyObject *kwds) {
((CompletionQueue *)completion_queue)->c_completion_queue, NULL);
return 0;
} else {
- self->c_server = NULL;
+ PyErr_Format(PyExc_TypeError,
+ "server_credentials must be _grpc.ServerCredentials, not %s",
+ Py_TYPE(server_credentials)->tp_name);
return -1;
}
}
@@ -74,7 +78,9 @@ static void pygrpc_server_dealloc(Server *self) {
static PyObject *pygrpc_server_add_http2_addr(Server *self, PyObject *args) {
const char *addr;
int port;
- PyArg_ParseTuple(args, "s", &addr);
+ if (!PyArg_ParseTuple(args, "s:add_http2_addr", &addr)) {
+ return NULL;
+ }
port = grpc_server_add_http2_port(self->c_server, addr);
if (port == 0) {
@@ -89,7 +95,9 @@ static PyObject *pygrpc_server_add_secure_http2_addr(Server *self,
PyObject *args) {
const char *addr;
int port;
- PyArg_ParseTuple(args, "s", &addr);
+ if (!PyArg_ParseTuple(args, "s:add_secure_http2_addr", &addr)) {
+ return NULL;
+ }
port = grpc_server_add_secure_http2_port(self->c_server, addr);
if (port == 0) {
PyErr_SetString(PyExc_RuntimeError, "Couldn't add port to server!");
@@ -104,15 +112,10 @@ static PyObject *pygrpc_server_start(Server *self) {
Py_RETURN_NONE;
}
-static const PyObject *pygrpc_server_service(Server *self, PyObject *args) {
- const PyObject *tag;
+static const PyObject *pygrpc_server_service(Server *self, PyObject *tag) {
grpc_call_error call_error;
const PyObject *result;
- if (!(PyArg_ParseTuple(args, "O", &tag))) {
- return NULL;
- }
-
call_error = grpc_server_request_call_old(self->c_server, (void *)tag);
result = pygrpc_translate_call_error(call_error);
@@ -135,13 +138,13 @@ static PyMethodDef methods[] = {
METH_VARARGS, "Add a secure HTTP2 address."},
{"start", (PyCFunction)pygrpc_server_start, METH_NOARGS,
"Starts the server."},
- {"service", (PyCFunction)pygrpc_server_service, METH_VARARGS,
+ {"service", (PyCFunction)pygrpc_server_service, METH_O,
"Services a call."},
{"stop", (PyCFunction)pygrpc_server_stop, METH_NOARGS, "Stops the server."},
{NULL}};
static PyTypeObject pygrpc_ServerType = {
- PyObject_HEAD_INIT(NULL)0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_gprc.Server", /*tp_name*/
sizeof(Server), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -177,17 +180,16 @@ static PyTypeObject pygrpc_ServerType = {
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pygrpc_server_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
int pygrpc_add_server(PyObject *module) {
- pygrpc_ServerType.tp_new = PyType_GenericNew;
if (PyType_Ready(&pygrpc_ServerType) < 0) {
- PyErr_SetString(PyExc_RuntimeError, "Error defining pygrpc_ServerType!");
return -1;
}
if (PyModule_AddObject(module, "Server", (PyObject *)&pygrpc_ServerType) ==
-1) {
- PyErr_SetString(PyExc_ImportError, "Couldn't add Server type to module!");
return -1;
}
return 0;
diff --git a/src/python/src/grpc/_adapter/_server_credentials.c b/src/python/src/grpc/_adapter/_server_credentials.c
index ae85fd3eb7..06e6b94974 100644
--- a/src/python/src/grpc/_adapter/_server_credentials.c
+++ b/src/python/src/grpc/_adapter/_server_credentials.c
@@ -47,21 +47,20 @@ static int pygrpc_server_credentials_init(ServerCredentials *self,
PyObject *iterator;
int i;
PyObject *pair;
+ static char *kwlist[] = {"root_credentials", "pair_sequence", NULL};
- if (!(PyArg_ParseTuple(args, "zO", &root_certificates, &pair_sequence))) {
- self->c_server_credentials = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "zO:ServerCredentials", kwlist,
+ &root_certificates, &pair_sequence)) {
return -1;
}
pair_count = PySequence_Length(pair_sequence);
if (pair_count == -1) {
- self->c_server_credentials = NULL;
return -1;
}
iterator = PyObject_GetIter(pair_sequence);
if (iterator == NULL) {
- self->c_server_credentials = NULL;
return -1;
}
pairs = gpr_malloc(pair_count * sizeof(grpc_ssl_pem_key_cert_pair));
@@ -72,8 +71,8 @@ static int pygrpc_server_credentials_init(ServerCredentials *self,
error = 1;
break;
}
- if (!(PyArg_ParseTuple(pair, "ss", &pairs[i].private_key,
- &pairs[i].cert_chain))) {
+ if (!PyArg_ParseTuple(pair, "ss", &pairs[i].private_key,
+ &pairs[i].cert_chain)) {
error = 1;
Py_DECREF(pair);
break;
@@ -83,7 +82,6 @@ static int pygrpc_server_credentials_init(ServerCredentials *self,
Py_DECREF(iterator);
if (error) {
- self->c_server_credentials = NULL;
gpr_free(pairs);
return -1;
} else {
@@ -102,7 +100,7 @@ static void pygrpc_server_credentials_dealloc(ServerCredentials *self) {
}
PyTypeObject pygrpc_ServerCredentialsType = {
- PyObject_HEAD_INIT(NULL)0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"_grpc.ServerCredencials", /*tp_name*/
sizeof(ServerCredentials), /*tp_basicsize*/
0, /*tp_itemsize*/
@@ -138,19 +136,16 @@ PyTypeObject pygrpc_ServerCredentialsType = {
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pygrpc_server_credentials_init, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
int pygrpc_add_server_credentials(PyObject *module) {
- pygrpc_ServerCredentialsType.tp_new = PyType_GenericNew;
if (PyType_Ready(&pygrpc_ServerCredentialsType) < 0) {
- PyErr_SetString(PyExc_RuntimeError,
- "Error defining pygrpc_ServerCredentialsType!");
return -1;
}
if (PyModule_AddObject(module, "ServerCredentials",
(PyObject *)&pygrpc_ServerCredentialsType) == -1) {
- PyErr_SetString(PyExc_ImportError,
- "Couldn't add ServerCredentials type to module!");
return -1;
}
return 0;
diff --git a/src/python/src/grpc/early_adopter/_face_utilities.py b/src/python/src/grpc/early_adopter/_face_utilities.py
index 714f2bb79c..3e37b08752 100644
--- a/src/python/src/grpc/early_adopter/_face_utilities.py
+++ b/src/python/src/grpc/early_adopter/_face_utilities.py
@@ -37,8 +37,8 @@ from grpc.early_adopter import interfaces
class _InlineUnaryUnaryMethod(face_interfaces.InlineValueInValueOutMethod):
- def __init__(self, unary_unary_rpc_method):
- self._method = unary_unary_rpc_method
+ def __init__(self, unary_unary_server_rpc_method):
+ self._method = unary_unary_server_rpc_method
def service(self, request, context):
"""See face_interfaces.InlineValueInValueOutMethod.service for spec."""
@@ -47,8 +47,8 @@ class _InlineUnaryUnaryMethod(face_interfaces.InlineValueInValueOutMethod):
class _InlineUnaryStreamMethod(face_interfaces.InlineValueInStreamOutMethod):
- def __init__(self, unary_stream_rpc_method):
- self._method = unary_stream_rpc_method
+ def __init__(self, unary_stream_server_rpc_method):
+ self._method = unary_stream_server_rpc_method
def service(self, request, context):
"""See face_interfaces.InlineValueInStreamOutMethod.service for spec."""
@@ -57,8 +57,8 @@ class _InlineUnaryStreamMethod(face_interfaces.InlineValueInStreamOutMethod):
class _InlineStreamUnaryMethod(face_interfaces.InlineStreamInValueOutMethod):
- def __init__(self, stream_unary_rpc_method):
- self._method = stream_unary_rpc_method
+ def __init__(self, stream_unary_server_rpc_method):
+ self._method = stream_unary_server_rpc_method
def service(self, request_iterator, context):
"""See face_interfaces.InlineStreamInValueOutMethod.service for spec."""
@@ -67,61 +67,99 @@ class _InlineStreamUnaryMethod(face_interfaces.InlineStreamInValueOutMethod):
class _InlineStreamStreamMethod(face_interfaces.InlineStreamInStreamOutMethod):
- def __init__(self, stream_stream_rpc_method):
- self._method = stream_stream_rpc_method
+ def __init__(self, stream_stream_server_rpc_method):
+ self._method = stream_stream_server_rpc_method
def service(self, request_iterator, context):
"""See face_interfaces.InlineStreamInStreamOutMethod.service for spec."""
return self._method.service_stream_stream(request_iterator)
-class Breakdown(object):
+class ClientBreakdown(object):
+ """An intermediate representation of invocation-side views of RPC methods.
+
+ Attributes:
+ request_serializers: A dictionary from RPC method name to callable
+ behavior to be used serializing request values for the RPC.
+ response_deserializers: A dictionary from RPC method name to callable
+ behavior to be used deserializing response values for the RPC.
+ """
+ __metaclass__ = abc.ABCMeta
+
+
+class _EasyClientBreakdown(
+ ClientBreakdown,
+ collections.namedtuple(
+ '_EasyClientBreakdown',
+ ('request_serializers', 'response_deserializers'))):
+ pass
+
+
+class ServerBreakdown(object):
"""An intermediate representation of implementations of RPC methods.
Attributes:
- unary_unary_methods:
- unary_stream_methods:
- stream_unary_methods:
- stream_stream_methods:
- request_serializers:
- request_deserializers:
- response_serializers:
- response_deserializers:
+ unary_unary_methods: A dictionary from RPC method name to callable
+ behavior implementing the RPC method for unary-unary RPC methods.
+ unary_stream_methods: A dictionary from RPC method name to callable
+ behavior implementing the RPC method for unary-stream RPC methods.
+ stream_unary_methods: A dictionary from RPC method name to callable
+ behavior implementing the RPC method for stream-unary RPC methods.
+ stream_stream_methods: A dictionary from RPC method name to callable
+ behavior implementing the RPC method for stream-stream RPC methods.
+ request_deserializers: A dictionary from RPC method name to callable
+ behavior to be used deserializing request values for the RPC.
+ response_serializers: A dictionary from RPC method name to callable
+ behavior to be used serializing response values for the RPC.
"""
__metaclass__ = abc.ABCMeta
-class _EasyBreakdown(
- Breakdown,
+class _EasyServerBreakdown(
+ ServerBreakdown,
collections.namedtuple(
- '_EasyBreakdown',
- ['unary_unary_methods', 'unary_stream_methods', 'stream_unary_methods',
- 'stream_stream_methods', 'request_serializers',
- 'request_deserializers', 'response_serializers',
- 'response_deserializers'])):
+ '_EasyServerBreakdown',
+ ('unary_unary_methods', 'unary_stream_methods', 'stream_unary_methods',
+ 'stream_stream_methods', 'request_deserializers',
+ 'response_serializers'))):
pass
-def break_down(methods):
- """Breaks down RPC methods.
+def client_break_down(methods):
+ """Derives a ClientBreakdown from several interfaces.ClientRpcMethods.
+
+ Args:
+ methods: A dictionary from RPC mthod name to
+ interfaces.ClientRpcMethod object describing the RPCs.
+
+ Returns:
+ A ClientBreakdown corresponding to the given methods.
+ """
+ request_serializers = {}
+ response_deserializers = {}
+ for name, method in methods.iteritems():
+ request_serializers[name] = method.serialize_request
+ response_deserializers[name] = method.deserialize_response
+ return _EasyClientBreakdown(request_serializers, response_deserializers)
+
+
+def server_break_down(methods):
+ """Derives a ServerBreakdown from several interfaces.ServerRpcMethods.
Args:
methods: A dictionary from RPC mthod name to
- interfaces.RpcMethod object describing the RPCs.
+ interfaces.ServerRpcMethod object describing the RPCs.
Returns:
- A Breakdown corresponding to the given methods.
+ A ServerBreakdown corresponding to the given methods.
"""
unary_unary = {}
unary_stream = {}
stream_unary = {}
stream_stream = {}
- request_serializers = {}
request_deserializers = {}
response_serializers = {}
- response_deserializers = {}
-
for name, method in methods.iteritems():
cardinality = method.cardinality()
if cardinality is interfaces.Cardinality.UNARY_UNARY:
@@ -132,12 +170,9 @@ def break_down(methods):
stream_unary[name] = _InlineStreamUnaryMethod(method)
elif cardinality is interfaces.Cardinality.STREAM_STREAM:
stream_stream[name] = _InlineStreamStreamMethod(method)
- request_serializers[name] = method.serialize_request
request_deserializers[name] = method.deserialize_request
response_serializers[name] = method.serialize_response
- response_deserializers[name] = method.deserialize_response
- return _EasyBreakdown(
+ return _EasyServerBreakdown(
unary_unary, unary_stream, stream_unary, stream_stream,
- request_serializers, request_deserializers, response_serializers,
- response_deserializers)
+ request_deserializers, response_serializers)
diff --git a/src/python/src/grpc/early_adopter/implementations.py b/src/python/src/grpc/early_adopter/implementations.py
index cd9dd5a57d..c549317d15 100644
--- a/src/python/src/grpc/early_adopter/implementations.py
+++ b/src/python/src/grpc/early_adopter/implementations.py
@@ -92,7 +92,7 @@ class _Server(interfaces.Server):
def _build_server(methods, port, private_key, certificate_chain):
- breakdown = _face_utilities.break_down(methods)
+ breakdown = _face_utilities.server_break_down(methods)
return _Server(breakdown, port, private_key, certificate_chain)
@@ -101,8 +101,8 @@ def insecure_server(methods, port):
Args:
methods: A dictionary from RPC method name to
- interfaces.RpcMethod object describing the RPCs to be
- serviced by the created server.
+ interfaces.ServerRpcMethod object describing the RPCs to
+ be serviced by the created server.
port: The port on which to serve.
Returns:
@@ -117,8 +117,8 @@ def secure_server(methods, port, private_key, certificate_chain):
Args:
methods: A dictionary from RPC method name to
- interfaces.RpcMethod object describing the RPCs to be
- serviced by the created server.
+ interfaces.ServerRpcMethod object describing the RPCs to
+ be serviced by the created server.
port: The port on which to serve.
private_key: A pem-encoded private key.
certificate_chain: A pem-encoded certificate chain.
diff --git a/src/python/src/grpc/early_adopter/interfaces.py b/src/python/src/grpc/early_adopter/interfaces.py
index 8d9a312133..0ec371f8e8 100644
--- a/src/python/src/grpc/early_adopter/interfaces.py
+++ b/src/python/src/grpc/early_adopter/interfaces.py
@@ -44,7 +44,7 @@ class Cardinality(enum.Enum):
class RpcMethod(object):
- """A sum type for the implementation of an RPC method."""
+ """A type for the common aspects of RPC method specifications."""
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
@@ -59,6 +59,11 @@ class RpcMethod(object):
"""
raise NotImplementedError()
+
+class ClientRpcMethod(RpcMethod):
+ """Invocation-side description of an RPC method."""
+ __metaclass__ = abc.ABCMeta
+
@abc.abstractmethod
def serialize_request(self, request):
"""Serializes a request value.
@@ -73,6 +78,25 @@ class RpcMethod(object):
raise NotImplementedError()
@abc.abstractmethod
+ def deserialize_response(self, serialized_response):
+ """Deserializes a response value.
+
+ Args:
+ serialized_response: A bytestring that is the
+ serialization of a response value appropriate for this
+ RpcMethod.
+
+ Returns:
+ A response value corresponding to the given bytestring.
+ """
+ raise NotImplementedError()
+
+
+class ServerRpcMethod(RpcMethod):
+ """Service-side description of an RPC method."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
def deserialize_request(self, serialized_request):
"""Deserializes a request value.
@@ -100,20 +124,6 @@ class RpcMethod(object):
raise NotImplementedError()
@abc.abstractmethod
- def deserialize_response(self, serialized_response):
- """Deserializes a response value.
-
- Args:
- serialized_response: A bytestring that is the
- serialization of a response value appropriate for this
- RpcMethod.
-
- Returns:
- A response value corresponding to the given bytestring.
- """
- raise NotImplementedError()
-
- @abc.abstractmethod
def service_unary_unary(self, request):
"""Carries out this RPC.
@@ -182,7 +192,6 @@ class Server(object):
"""A GRPC Server."""
__metaclass__ = abc.ABCMeta
-
@abc.abstractmethod
def start(self):
"""Instructs this server to commence service of RPCs."""
diff --git a/src/python/src/grpc/early_adopter/utilities.py b/src/python/src/grpc/early_adopter/utilities.py
index a4ee253d83..9277d3f6ad 100644
--- a/src/python/src/grpc/early_adopter/utilities.py
+++ b/src/python/src/grpc/early_adopter/utilities.py
@@ -32,7 +32,7 @@
from grpc.early_adopter import interfaces
-class _RpcMethod(interfaces.RpcMethod):
+class _RpcMethod(interfaces.ClientRpcMethod, interfaces.ServerRpcMethod):
def __init__(
self, cardinality, unary_unary, unary_stream, stream_unary,
@@ -85,129 +85,181 @@ class _RpcMethod(interfaces.RpcMethod):
return self._stream_stream(request_iterator)
-def unary_unary_rpc_method(
- behavior, request_serializer, request_deserializer, response_serializer,
- response_deserializer):
- """Constructs an interfaces.RpcMethod for the given behavior.
+def unary_unary_client_rpc_method(request_serializer, response_deserializer):
+ """Constructs an interfaces.ClientRpcMethod for a unary-unary RPC method.
+
+ Args:
+ request_serializer: A callable that when called on a request
+ value returns a bytestring corresponding to that value.
+ response_deserializer: A callable that when called on a
+ bytestring returns the response value corresponding to
+ that bytestring.
+
+ Returns:
+ An interfaces.ClientRpcMethod constructed from the given
+ arguments representing a unary-request/unary-response RPC
+ method.
+ """
+ return _RpcMethod(
+ interfaces.Cardinality.UNARY_UNARY, None, None, None, None,
+ request_serializer, None, None, response_deserializer)
+
+
+def unary_stream_client_rpc_method(request_serializer, response_deserializer):
+ """Constructs an interfaces.ClientRpcMethod for a unary-stream RPC method.
+
+ Args:
+ request_serializer: A callable that when called on a request
+ value returns a bytestring corresponding to that value.
+ response_deserializer: A callable that when called on a
+ bytestring returns the response value corresponding to
+ that bytestring.
+
+ Returns:
+ An interfaces.ClientRpcMethod constructed from the given
+ arguments representing a unary-request/streaming-response
+ RPC method.
+ """
+ return _RpcMethod(
+ interfaces.Cardinality.UNARY_STREAM, None, None, None, None,
+ request_serializer, None, None, response_deserializer)
+
+
+def stream_unary_client_rpc_method(request_serializer, response_deserializer):
+ """Constructs an interfaces.ClientRpcMethod for a stream-unary RPC method.
+
+ Args:
+ request_serializer: A callable that when called on a request
+ value returns a bytestring corresponding to that value.
+ response_deserializer: A callable that when called on a
+ bytestring returns the response value corresponding to
+ that bytestring.
+
+ Returns:
+ An interfaces.ClientRpcMethod constructed from the given
+ arguments representing a streaming-request/unary-response
+ RPC method.
+ """
+ return _RpcMethod(
+ interfaces.Cardinality.STREAM_UNARY, None, None, None, None,
+ request_serializer, None, None, response_deserializer)
+
+
+def stream_stream_client_rpc_method(request_serializer, response_deserializer):
+ """Constructs an interfaces.ClientRpcMethod for a stream-stream RPC method.
+
+ Args:
+ request_serializer: A callable that when called on a request
+ value returns a bytestring corresponding to that value.
+ response_deserializer: A callable that when called on a
+ bytestring returns the response value corresponding to
+ that bytestring.
+
+ Returns:
+ An interfaces.ClientRpcMethod constructed from the given
+ arguments representing a
+ streaming-request/streaming-response RPC method.
+ """
+ return _RpcMethod(
+ interfaces.Cardinality.STREAM_STREAM, None, None, None, None,
+ request_serializer, None, None, response_deserializer)
+
+
+def unary_unary_server_rpc_method(
+ behavior, request_deserializer, response_serializer):
+ """Constructs an interfaces.ServerRpcMethod for the given behavior.
Args:
behavior: A callable that implements a unary-unary RPC
method that accepts a single request and returns a single
response.
- request_serializer: A callable that when called on a request
- value returns a bytestring corresponding to that value.
request_deserializer: A callable that when called on a
bytestring returns the request value corresponding to that
bytestring.
response_serializer: A callable that when called on a
response value returns the bytestring corresponding to
that value.
- response_deserializer: A callable that when called on a
- bytestring returns the response value corresponding to
- that bytestring.
Returns:
- An interfaces.RpcMethod constructed from the given
+ An interfaces.ServerRpcMethod constructed from the given
arguments representing a unary-request/unary-response RPC
method.
"""
return _RpcMethod(
interfaces.Cardinality.UNARY_UNARY, behavior, None, None, None,
- request_serializer, request_deserializer, response_serializer,
- response_deserializer)
+ None, request_deserializer, response_serializer, None)
-def unary_stream_rpc_method(
- behavior, request_serializer, request_deserializer, response_serializer,
- response_deserializer):
- """Constructs an interfaces.RpcMethod for the given behavior.
+def unary_stream_server_rpc_method(
+ behavior, request_deserializer, response_serializer):
+ """Constructs an interfaces.ServerRpcMethod for the given behavior.
Args:
behavior: A callable that implements a unary-stream RPC
method that accepts a single request and returns an
iterator of zero or more responses.
- request_serializer: A callable that when called on a request
- value returns a bytestring corresponding to that value.
request_deserializer: A callable that when called on a
bytestring returns the request value corresponding to that
bytestring.
response_serializer: A callable that when called on a
response value returns the bytestring corresponding to
that value.
- response_deserializer: A callable that when called on a
- bytestring returns the response value corresponding to
- that bytestring.
Returns:
- An interfaces.RpcMethod constructed from the given
+ An interfaces.ServerRpcMethod constructed from the given
arguments representing a unary-request/streaming-response
RPC method.
"""
return _RpcMethod(
interfaces.Cardinality.UNARY_STREAM, None, behavior, None, None,
- request_serializer, request_deserializer, response_serializer,
- response_deserializer)
+ None, request_deserializer, response_serializer, None)
-def stream_unary_rpc_method(
- behavior, request_serializer, request_deserializer, response_serializer,
- response_deserializer):
- """Constructs an interfaces.RpcMethod for the given behavior.
+def stream_unary_server_rpc_method(
+ behavior, request_deserializer, response_serializer):
+ """Constructs an interfaces.ServerRpcMethod for the given behavior.
Args:
behavior: A callable that implements a stream-unary RPC
method that accepts an iterator of zero or more requests
and returns a single response.
- request_serializer: A callable that when called on a request
- value returns a bytestring corresponding to that value.
request_deserializer: A callable that when called on a
bytestring returns the request value corresponding to that
bytestring.
response_serializer: A callable that when called on a
response value returns the bytestring corresponding to
that value.
- response_deserializer: A callable that when called on a
- bytestring returns the response value corresponding to
- that bytestring.
Returns:
- An interfaces.RpcMethod constructed from the given
+ An interfaces.ServerRpcMethod constructed from the given
arguments representing a streaming-request/unary-response
RPC method.
"""
return _RpcMethod(
interfaces.Cardinality.STREAM_UNARY, None, None, behavior, None,
- request_serializer, request_deserializer, response_serializer,
- response_deserializer)
+ None, request_deserializer, response_serializer, None)
-def stream_stream_rpc_method(
- behavior, request_serializer, request_deserializer, response_serializer,
- response_deserializer):
- """Constructs an interfaces.RpcMethod for the given behavior.
+def stream_stream_server_rpc_method(
+ behavior, request_deserializer, response_serializer):
+ """Constructs an interfaces.ServerRpcMethod for the given behavior.
Args:
behavior: A callable that implements a stream-stream RPC
method that accepts an iterator of zero or more requests
and returns an iterator of zero or more responses.
- request_serializer: A callable that when called on a request
- value returns a bytestring corresponding to that value.
request_deserializer: A callable that when called on a
bytestring returns the request value corresponding to that
bytestring.
response_serializer: A callable that when called on a
response value returns the bytestring corresponding to
that value.
- response_deserializer: A callable that when called on a
- bytestring returns the response value corresponding to
- that bytestring.
Returns:
- An interfaces.RpcMethod constructed from the given
+ An interfaces.ServerRpcMethod constructed from the given
arguments representing a
streaming-request/streaming-response RPC method.
"""
return _RpcMethod(
interfaces.Cardinality.STREAM_STREAM, None, None, None, behavior,
- request_serializer, request_deserializer, response_serializer,
- response_deserializer)
+ None, request_deserializer, response_serializer, None)
diff --git a/src/python/src/grpc/framework/base/interfaces_test.py b/src/python/src/grpc/framework/base/interfaces_test_case.py
index b86011c449..b86011c449 100644
--- a/src/python/src/grpc/framework/base/interfaces_test.py
+++ b/src/python/src/grpc/framework/base/interfaces_test_case.py
diff --git a/src/python/src/grpc/framework/base/packets/implementations_test.py b/src/python/src/grpc/framework/base/packets/implementations_test.py
index 628f4b3909..e5855700c7 100644
--- a/src/python/src/grpc/framework/base/packets/implementations_test.py
+++ b/src/python/src/grpc/framework/base/packets/implementations_test.py
@@ -31,7 +31,7 @@
import unittest
-from grpc.framework.base import interfaces_test
+from grpc.framework.base import interfaces_test_case
from grpc.framework.base import util
from grpc.framework.base.packets import implementations
from grpc.framework.foundation import logging_pool
@@ -42,7 +42,7 @@ MAXIMUM_TIMEOUT = 60
class ImplementationsTest(
- interfaces_test.FrontAndBackTest, unittest.TestCase):
+ interfaces_test_case.FrontAndBackTest, unittest.TestCase):
def setUp(self):
self.memory_transmission_pool = logging_pool.pool(POOL_MAX_WORKERS)
@@ -53,7 +53,7 @@ class ImplementationsTest(
self.back_transmission_pool = logging_pool.pool(POOL_MAX_WORKERS)
self.back_utility_pool = logging_pool.pool(POOL_MAX_WORKERS)
self.test_pool = logging_pool.pool(POOL_MAX_WORKERS)
- self.test_servicer = interfaces_test.TestServicer(self.test_pool)
+ self.test_servicer = interfaces_test_case.TestServicer(self.test_pool)
self.front = implementations.front(
self.front_work_pool, self.front_transmission_pool,
self.front_utility_pool)
diff --git a/src/ruby/README.md b/src/ruby/README.md
index 7ece7e2706..6e0e9db4a3 100755
--- a/src/ruby/README.md
+++ b/src/ruby/README.md
@@ -1,38 +1,43 @@
gRPC Ruby
=========
-A Ruby implementation of gRPC, Google's RPC library.
+A Ruby implementation of gRPC.
+Status
+-------
+
+Alpha : Ready for early adopters
INSTALLATION PREREQUISITES
--------------------------
-This requires Ruby 2.x, as the rpc api surface uses keyword args.
+This requires Ruby 2.x, as the RPC API surface uses keyword args.
-INSTALLING
-----------
+QUICK - INSTALL
+---------------
-- Install the gRPC core library
- TODO: describe this, once the core distribution mechanism is defined.
-```
-$ gem install grpc
+- Clone this repository.
+- Follow the instructions in [INSTALL](../../INSTALL) to install the gRPC C core.
+- Use bundler to install
+```sh
+$ # from this directory
+$ gem install bundler && bundle install
```
-
Installing from source
----------------------
-- Build or Install the gRPC core
-E.g, from the root of the grpc [git repo](https://github.com/google/grpc)
-```
+- Build the gRPC C core
+E.g, from the root of the gRPC [git repo](https://github.com/google/grpc)
+```sh
$ cd ../..
$ make && sudo make install
```
- Install Ruby 2.x. Consider doing this with [RVM](http://rvm.io), it's a nice way of controlling
the exact ruby version that's used.
-```
+```sh
$ command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ \curl -sSL https://get.rvm.io | bash -s stable --ruby
$
@@ -45,8 +50,8 @@ $ # and that the rvm command is installed
$ gem install bundler
```
-- Finally, install grpc ruby locally.
-```
+- Finally, install the gRPC gem locally.
+```sh
$ cd <install_dir>
$ bundle install
$ rake # compiles the extension, runs the unit tests, see rake -T for other options
@@ -60,7 +65,7 @@ Directory structure is the layout for [ruby extensions](http://guides.rubygems.o
- ext:
the gRPC ruby extension
- lib:
- the entrypoint grpc ruby library to be used in a 'require' statement
+ the entrypoint gRPC ruby library to be used in a 'require' statement
- spec:
Rspec unittest
- bin:
@@ -69,6 +74,6 @@ Directory structure is the layout for [ruby extensions](http://guides.rubygems.o
stub = Math::Math::Stub.new('my.test.math.server.com:8080')
req = Math::DivArgs.new(dividend: 7, divisor: 3)
logger.info("div(7/3): req=#{req.inspect}")
-resp = stub.div(req, INFINITE_FUTURE)
+resp = stub.div(req)
logger.info("Answer: #{resp.inspect}")
```
diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb
index ef31f68f83..50a14e3a96 100755
--- a/src/ruby/bin/interop/interop_client.rb
+++ b/src/ruby/bin/interop/interop_client.rb
@@ -211,10 +211,8 @@ class NamedTests
def compute_engine_creds
resp = perform_large_unary(fill_username: true,
fill_oauth_scope: true)
- assert(@args.oauth_scope.include?(resp.oauth_scope),
- 'service_account_creds: incorrect oauth_scope')
assert_equal(@args.default_service_account, resp.username,
- 'service_account_creds: incorrect username')
+ 'compute_engine_creds: incorrect username')
p 'OK: compute_engine_creds'
end
diff --git a/src/ruby/grpc.gemspec b/src/ruby/grpc.gemspec
index c479cc9616..bc59c234e5 100755
--- a/src/ruby/grpc.gemspec
+++ b/src/ruby/grpc.gemspec
@@ -5,12 +5,12 @@ require 'grpc/version'
Gem::Specification.new do |s|
s.name = 'grpc'
- s.version = Google::RPC::VERSION
+ s.version = GRPC::VERSION
s.authors = ['gRPC Authors']
- s.email = 'tbetbetbe@gmail.com'
+ s.email = 'temiola@google.com'
s.homepage = 'https://github.com/google/grpc/tree/master/src/ruby'
- s.summary = 'Google RPC system in Ruby'
- s.description = 'Send RPCs from Ruby using Google\'s RPC system'
+ s.summary = 'GRPC system in Ruby'
+ s.description = 'Send RPCs from Ruby using GRPC'
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- spec/*`.split("\n")
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 79ec95dd13..f1f1badc16 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -103,7 +103,6 @@ CXX_tsan = clang++
LD_tsan = clang
LDXX_tsan = clang++
CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer
-OPENSSL_CONFIG_tsan = no-asm
LDFLAGS_tsan = -fsanitize=thread
DEFINES_tsan = NDEBUG
@@ -114,7 +113,6 @@ CXX_asan = clang++
LD_asan = clang
LDXX_asan = clang++
CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer
-OPENSSL_CONFIG_asan = no-asm
LDFLAGS_asan = -fsanitize=address
DEFINES_asan = NDEBUG
@@ -126,7 +124,6 @@ LD_msan = clang
LDXX_msan = clang++-libc++
CPPFLAGS_msan = -O1 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1
OPENSSL_CFLAGS_msan = -DPURIFY
-OPENSSL_CONFIG_msan = no-asm
LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1
DEFINES_msan = NDEBUG
@@ -138,7 +135,6 @@ LD_ubsan = clang
LDXX_ubsan = clang++
CPPFLAGS_ubsan = -O1 -fsanitize=undefined -fno-omit-frame-pointer
OPENSSL_CFLAGS_ubsan = -DPURIFY
-OPENSSL_CONFIG_ubsan = no-asm
LDFLAGS_ubsan = -fsanitize=undefined
DEFINES_ubsan = NDEBUG
@@ -469,9 +465,9 @@ $(LIBDIR)/$(CONFIG)/zlib/libz.a:
$(LIBDIR)/$(CONFIG)/openssl/libssl.a:
$(E) "[MAKE] Building openssl for $(SYSTEM)"
ifeq ($(SYSTEM),Darwin)
- $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc $(OPENSSL_CONFIG_$(CONFIG)))
+ $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc)
else
- $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config $(OPENSSL_CONFIG_$(CONFIG)))
+ $(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config no-asm $(OPENSSL_CONFIG_$(CONFIG)))
endif
$(Q)$(MAKE) -C third_party/openssl clean
$(Q)$(MAKE) -C third_party/openssl build_crypto build_ssl
@@ -692,7 +688,7 @@ else
$(GENDIR)/${p}.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
$(E) "[PROTOC] Generating protobuf CC file from $<"
$(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
+ $(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
endif
% endfor
@@ -780,7 +776,7 @@ endif
% endfor
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
</%def>
@@ -800,7 +796,7 @@ ifneq ($(PROTOBUF_DEP),)
$(Q) $(MAKE) -C third_party/protobuf install prefix=$(prefix)
ifneq ($(SYSTEM),MINGW32)
ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
+ $(Q) ldconfig || true
endif
endif
endif
diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c
index 044802b802..0f81ba7734 100644
--- a/test/core/iomgr/tcp_posix_test.c
+++ b/test/core/iomgr/tcp_posix_test.c
@@ -250,7 +250,7 @@ struct write_socket_state {
static gpr_slice *allocate_blocks(ssize_t num_bytes, ssize_t slice_size,
size_t *num_blocks, int *current_data) {
- ssize_t nslices = num_bytes / slice_size + (num_bytes % slice_size ? 1 : 0);
+ size_t nslices = num_bytes / slice_size + (num_bytes % slice_size ? 1 : 0);
gpr_slice *slices = gpr_malloc(sizeof(gpr_slice) * nslices);
ssize_t num_bytes_left = num_bytes;
unsigned i, j;
diff --git a/test/core/security/fetch_oauth2.c b/test/core/security/fetch_oauth2.c
index 369c34a5a5..6315087448 100644
--- a/test/core/security/fetch_oauth2.c
+++ b/test/core/security/fetch_oauth2.c
@@ -95,7 +95,7 @@ static grpc_credentials *create_service_account_creds(
break;
}
current += bytes_read;
- } while (sizeof(json_key) > (current - json_key));
+ } while (sizeof(json_key) > (size_t)(current - json_key));
if ((current - json_key) == sizeof(json_key)) {
gpr_log(GPR_ERROR, "Json key file %s exceeds size limit (%d bytes).",
diff --git a/test/core/statistics/hash_table_test.c b/test/core/statistics/hash_table_test.c
index 9b7a712c18..2752d6d89d 100644
--- a/test/core/statistics/hash_table_test.c
+++ b/test/core/statistics/hash_table_test.c
@@ -97,7 +97,7 @@ static void test_table_with_int_key(void) {
for (i = 0; i < 20; ++i) {
census_ht_key key;
key.val = i;
- census_ht_insert(ht, key, (void*)i);
+ census_ht_insert(ht, key, (void*)(gpr_intptr)i);
GPR_ASSERT(census_ht_get_size(ht) == i + 1);
}
for (i = 0; i < 20; i++) {
@@ -105,7 +105,7 @@ static void test_table_with_int_key(void) {
census_ht_key key;
key.val = i;
val = census_ht_find(ht, key);
- GPR_ASSERT(val == (void*)i);
+ GPR_ASSERT(val == (void*)(gpr_intptr)i);
}
elements = census_ht_get_all_elements(ht, &num_elements);
GPR_ASSERT(elements != NULL);
diff --git a/test/cpp/client/channel_arguments_test.cc b/test/cpp/client/channel_arguments_test.cc
index d98b38ab68..01c56cb795 100644
--- a/test/cpp/client/channel_arguments_test.cc
+++ b/test/cpp/client/channel_arguments_test.cc
@@ -52,14 +52,14 @@ TEST_F(ChannelArgumentsTest, SetInt) {
ChannelArguments channel_args;
// Empty arguments.
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(0, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(0), args.num_args);
grpc::string key("key0");
channel_args.SetInt(key, 0);
// Clear key early to make sure channel_args takes a copy
key = "";
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(1, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(1), args.num_args);
EXPECT_EQ(GRPC_ARG_INTEGER, args.args[0].type);
EXPECT_STREQ("key0", args.args[0].key);
EXPECT_EQ(0, args.args[0].value.integer);
@@ -68,7 +68,7 @@ TEST_F(ChannelArgumentsTest, SetInt) {
channel_args.SetInt(key, 1);
key = "";
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(2, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(2), args.num_args);
// We do not enforce order on the arguments.
for (size_t i = 0; i < args.num_args; i++) {
EXPECT_EQ(GRPC_ARG_INTEGER, args.args[i].type);
@@ -85,7 +85,7 @@ TEST_F(ChannelArgumentsTest, SetString) {
ChannelArguments channel_args;
// Empty arguments.
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(0, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(0), args.num_args);
grpc::string key("key0");
grpc::string val("val0");
@@ -94,7 +94,7 @@ TEST_F(ChannelArgumentsTest, SetString) {
key = "";
val = "";
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(1, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(1), args.num_args);
EXPECT_EQ(GRPC_ARG_STRING, args.args[0].type);
EXPECT_STREQ("key0", args.args[0].key);
EXPECT_STREQ("val0", args.args[0].value.string);
@@ -103,7 +103,7 @@ TEST_F(ChannelArgumentsTest, SetString) {
val = "val1";
channel_args.SetString(key, val);
SetChannelArgs(channel_args, &args);
- EXPECT_EQ(2, args.num_args);
+ EXPECT_EQ(static_cast<size_t>(2), args.num_args);
// We do not enforce order on the arguments.
for (size_t i = 0; i < args.num_args; i++) {
EXPECT_EQ(GRPC_ARG_STRING, args.args[i].type);
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 79160bfaa5..248e054e49 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -364,7 +364,7 @@ TEST_F(AsyncEnd2endTest, ClientInitialMetadataRpc) {
auto client_initial_metadata = srv_ctx.client_metadata();
EXPECT_EQ(meta1.second, client_initial_metadata.find(meta1.first)->second);
EXPECT_EQ(meta2.second, client_initial_metadata.find(meta2.first)->second);
- EXPECT_EQ(2, client_initial_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), client_initial_metadata.size());
client_ok(1);
send_response.set_message(recv_request.message());
@@ -414,7 +414,7 @@ TEST_F(AsyncEnd2endTest, ServerInitialMetadataRpc) {
auto server_initial_metadata = cli_ctx.GetServerInitialMetadata();
EXPECT_EQ(meta1.second, server_initial_metadata.find(meta1.first)->second);
EXPECT_EQ(meta2.second, server_initial_metadata.find(meta2.first)->second);
- EXPECT_EQ(2, server_initial_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), server_initial_metadata.size());
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(5));
@@ -470,7 +470,7 @@ TEST_F(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
EXPECT_EQ(meta1.second, server_trailing_metadata.find(meta1.first)->second);
EXPECT_EQ(meta2.second, server_trailing_metadata.find(meta2.first)->second);
- EXPECT_EQ(2, server_trailing_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), server_trailing_metadata.size());
}
TEST_F(AsyncEnd2endTest, MetadataRpc) {
@@ -510,7 +510,7 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
auto client_initial_metadata = srv_ctx.client_metadata();
EXPECT_EQ(meta1.second, client_initial_metadata.find(meta1.first)->second);
EXPECT_EQ(meta2.second, client_initial_metadata.find(meta2.first)->second);
- EXPECT_EQ(2, client_initial_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), client_initial_metadata.size());
client_ok(1);
srv_ctx.AddInitialMetadata(meta3.first, meta3.second);
@@ -522,7 +522,7 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
auto server_initial_metadata = cli_ctx.GetServerInitialMetadata();
EXPECT_EQ(meta3.second, server_initial_metadata.find(meta3.first)->second);
EXPECT_EQ(meta4.second, server_initial_metadata.find(meta4.first)->second);
- EXPECT_EQ(2, server_initial_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), server_initial_metadata.size());
send_response.set_message(recv_request.message());
srv_ctx.AddTrailingMetadata(meta5.first, meta5.second);
@@ -539,7 +539,7 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
EXPECT_EQ(meta5.second, server_trailing_metadata.find(meta5.first)->second);
EXPECT_EQ(meta6.second, server_trailing_metadata.find(meta6.first)->second);
- EXPECT_EQ(2, server_trailing_metadata.size());
+ EXPECT_EQ(static_cast<size_t>(2), server_trailing_metadata.size());
}
} // namespace
} // namespace testing
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index ab69e1eefd..78f2063c45 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -40,7 +40,7 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include <google/gflags.h>
+#include <gflags/gflags.h>
#include <grpc++/channel_arguments.h>
#include <grpc++/channel_interface.h>
#include <grpc++/client_context.h>
@@ -92,6 +92,13 @@ using grpc::testing::StreamingOutputCallRequest;
using grpc::testing::StreamingOutputCallResponse;
using grpc::testing::TestService;
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google { }
+namespace gflags { }
+using namespace google;
+using namespace gflags;
+
namespace {
// The same value is defined by the Java client.
const std::vector<int> request_stream_sizes = {27182, 8, 1828, 45904};
@@ -386,7 +393,7 @@ void DoPingPong() {
int main(int argc, char** argv) {
grpc_init();
- google::ParseCommandLineFlags(&argc, &argv, true);
+ ParseCommandLineFlags(&argc, &argv, true);
if (FLAGS_test_case == "empty_unary") {
DoEmpty();
diff --git a/test/cpp/interop/interop_test.c b/test/cpp/interop/interop_test.c
new file mode 100644
index 0000000000..204aa6265e
--- /dev/null
+++ b/test/cpp/interop/interop_test.c
@@ -0,0 +1,135 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef _POSIX_SOURCE
+#define _POSIX_SOURCE
+#endif
+
+#include <unistd.h>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "src/core/iomgr/socket_utils_posix.h"
+#include "src/core/support/string.h"
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc/support/log.h>
+#include "test/core/util/port.h"
+
+int test_client(const char *root, const char *host, int port) {
+ int status;
+ pid_t cli;
+ cli = fork();
+ if (cli == 0) {
+ char *binary_path;
+ char *port_arg;
+ gpr_asprintf(&binary_path, "%s/interop_client", root);
+ gpr_asprintf(&port_arg, "--server_port=%d", port);
+
+ execl(binary_path, binary_path, port_arg, NULL);
+
+ gpr_free(binary_path);
+ gpr_free(port_arg);
+ return 1;
+ }
+ /* wait for client */
+ gpr_log(GPR_INFO, "Waiting for client: %s", host);
+ if (waitpid(cli, &status, 0) == -1) return 2;
+ if (!WIFEXITED(status)) return 4;
+ if (WEXITSTATUS(status)) return WEXITSTATUS(status);
+ return 0;
+}
+
+int main(int argc, char **argv) {
+ char *me = argv[0];
+ char *lslash = strrchr(me, '/');
+ char root[1024];
+ int port = grpc_pick_unused_port_or_die();
+ int status;
+ pid_t svr;
+ int ret;
+ int do_ipv6 = 1;
+ /* seed rng with pid, so we don't end up with the same random numbers as a
+ concurrently running test binary */
+ srand(getpid());
+ if (!grpc_ipv6_loopback_available()) {
+ gpr_log(GPR_INFO, "Can't bind to ::1. Skipping IPv6 tests.");
+ do_ipv6 = 0;
+ }
+ /* figure out where we are */
+ if (lslash) {
+ memcpy(root, me, lslash - me);
+ root[lslash - me] = 0;
+ } else {
+ strcpy(root, ".");
+ }
+ /* start the server */
+ svr = fork();
+ if (svr == 0) {
+ char *binary_path;
+ char *port_arg;
+ gpr_asprintf(&binary_path, "%s/interop_server", root);
+ gpr_asprintf(&port_arg, "--port=%d", port);
+
+ execl(binary_path, binary_path, port_arg, NULL);
+
+ gpr_free(binary_path);
+ gpr_free(port_arg);
+ return 1;
+ }
+ /* wait a little */
+ sleep(2);
+ /* start the clients */
+ ret = test_client(root, "127.0.0.1", port);
+ if (ret != 0) return ret;
+ ret = test_client(root, "::ffff:127.0.0.1", port);
+ if (ret != 0) return ret;
+ ret = test_client(root, "localhost", port);
+ if (ret != 0) return ret;
+ if (do_ipv6) {
+ ret = test_client(root, "::1", port);
+ if (ret != 0) return ret;
+ }
+ /* wait for server */
+ gpr_log(GPR_INFO, "Waiting for server");
+ kill(svr, SIGINT);
+ if (waitpid(svr, &status, 0) == -1) return 2;
+ if (!WIFEXITED(status)) return 4;
+ if (WEXITSTATUS(status)) return WEXITSTATUS(status);
+ return 0;
+}
diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc
index f4b9f04650..4869d4df52 100644
--- a/test/cpp/interop/server.cc
+++ b/test/cpp/interop/server.cc
@@ -35,7 +35,7 @@
#include <sstream>
#include <thread>
-#include <google/gflags.h>
+#include <gflags/gflags.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include "test/core/end2end/data/ssl_test_data.h"
@@ -73,6 +73,13 @@ using grpc::testing::StreamingOutputCallResponse;
using grpc::testing::TestService;
using grpc::Status;
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google { }
+namespace gflags { }
+using namespace google;
+using namespace gflags;
+
bool SetPayload(PayloadType type, int size, Payload* payload) {
PayloadType response_type = type;
// TODO(yangg): Support UNCOMPRESSABLE payload.
@@ -217,7 +224,7 @@ void RunServer() {
int main(int argc, char** argv) {
grpc_init();
- google::ParseCommandLineFlags(&argc, &argv, true);
+ ParseCommandLineFlags(&argc, &argv, true);
GPR_ASSERT(FLAGS_port != 0);
RunServer();
diff --git a/test/cpp/qps/client.cc b/test/cpp/qps/client.cc
index 8369ef6562..666f25054a 100644
--- a/test/cpp/qps/client.cc
+++ b/test/cpp/qps/client.cc
@@ -41,7 +41,7 @@
#include <grpc/grpc.h>
#include <grpc/support/histogram.h>
#include <grpc/support/log.h>
-#include <google/gflags.h>
+#include <gflags/gflags.h>
#include <grpc++/client_context.h>
#include <grpc++/status.h>
#include "test/core/util/grpc_profiler.h"
@@ -80,6 +80,13 @@ using grpc::testing::SimpleResponse;
using grpc::testing::StatsRequest;
using grpc::testing::TestService;
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google { }
+namespace gflags { }
+using namespace google;
+using namespace gflags;
+
static double now() {
gpr_timespec tv = gpr_now();
return 1e9 * tv.tv_sec + tv.tv_nsec;
@@ -221,7 +228,7 @@ void RunTest(const int client_threads, const int client_channels,
int main(int argc, char **argv) {
grpc_init();
- google::ParseCommandLineFlags(&argc, &argv, true);
+ ParseCommandLineFlags(&argc, &argv, true);
GPR_ASSERT(FLAGS_server_port);
diff --git a/test/cpp/qps/server.cc b/test/cpp/qps/server.cc
index 6a30d5d8d4..8e136349a1 100644
--- a/test/cpp/qps/server.cc
+++ b/test/cpp/qps/server.cc
@@ -36,7 +36,7 @@
#include <sys/signal.h>
#include <thread>
-#include <google/gflags.h>
+#include <gflags/gflags.h>
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
#include <grpc++/config.h>
@@ -68,6 +68,13 @@ using grpc::testing::StatsRequest;
using grpc::testing::TestService;
using grpc::Status;
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google { }
+namespace gflags { }
+using namespace google;
+using namespace gflags;
+
static bool got_sigint = false;
static void sigint_handler(int x) { got_sigint = 1; }
@@ -149,7 +156,7 @@ static void RunServer() {
int main(int argc, char** argv) {
grpc_init();
- google::ParseCommandLineFlags(&argc, &argv, true);
+ ParseCommandLineFlags(&argc, &argv, true);
signal(SIGINT, sigint_handler);
diff --git a/tools/distrib/check_copyright.py b/tools/distrib/check_copyright.py
index c81a1ea55b..ce66dcc22e 100755
--- a/tools/distrib/check_copyright.py
+++ b/tools/distrib/check_copyright.py
@@ -70,6 +70,7 @@ LICENSE_FMT = {
'.c': ' * %s',
'.cc': ' * %s',
'.h': ' * %s',
+ '.m': ' * %s',
'.php': ' * %s',
'.py': '# %s',
'.rb': '# %s',
diff --git a/tools/dockerfile/grpc_base/README.md b/tools/dockerfile/grpc_base/README.md
index e3b5f2ef37..5c81b02425 100644
--- a/tools/dockerfile/grpc_base/README.md
+++ b/tools/dockerfile/grpc_base/README.md
@@ -2,7 +2,8 @@ Base GRPC Dockerfile
====================
Dockerfile for creating the base gRPC development Docker instance.
-For now, this assumes that the development will be done on GCE instances, with source code on Git-on-Borg.
+For now, this assumes that the development will be done on GCE instances,
+with source code on GitHub.
As of 2015/02/02, it includes
- git
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index b5d61595c2..d2b125fc01 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -195,6 +195,10 @@
},
{
"language": "c",
+ "name": "interop_test"
+ },
+ {
+ "language": "c",
"name": "json_rewrite_test"
},
{
diff --git a/vsprojects/vs2013/Grpc.mak b/vsprojects/vs2013/Grpc.mak
index f4e9f46b68..a629ef425e 100644
--- a/vsprojects/vs2013/Grpc.mak
+++ b/vsprojects/vs2013/Grpc.mak
@@ -25,10 +25,10 @@ grpc_test_util:
$(OUT_DIR):
mkdir $(OUT_DIR)
-buildtests: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stats_store_test.exe census_stub_test.exe census_trace_store_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe dualstack_socket_test.exe echo_test.exe fd_posix_test.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe transport_metadata_test.exe
+buildtests: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe census_hash_table_test.exe census_statistics_multiple_writers_circular_buffer_test.exe census_statistics_multiple_writers_test.exe census_statistics_performance_test.exe census_statistics_quick_test.exe census_statistics_small_log_test.exe census_stats_store_test.exe census_stub_test.exe census_trace_store_test.exe census_window_stats_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe chttp2_transport_end2end_test.exe dualstack_socket_test.exe echo_test.exe fd_posix_test.exe fling_stream_test.exe fling_test.exe gpr_cancellable_test.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_useful_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe httpcli_test.exe interop_test.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe metadata_buffer_test.exe multi_init_test.exe murmur_hash_test.exe no_server_test.exe poll_kick_posix_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe tcp_client_posix_test.exe tcp_posix_test.exe tcp_server_posix_test.exe time_averaged_stats_test.exe time_test.exe timeout_encoding_test.exe transport_metadata_test.exe
echo All tests built.
-test: alarm_heap_test alarm_list_test alarm_test alpn_test bin_encoder_test census_hash_table_test census_statistics_multiple_writers_circular_buffer_test census_statistics_multiple_writers_test census_statistics_performance_test census_statistics_quick_test census_statistics_small_log_test census_stats_store_test census_stub_test census_trace_store_test census_window_stats_test chttp2_status_conversion_test chttp2_stream_encoder_test chttp2_stream_map_test chttp2_transport_end2end_test dualstack_socket_test echo_test fd_posix_test fling_stream_test fling_test gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_useful_test grpc_base64_test grpc_byte_buffer_reader_test grpc_channel_stack_test grpc_completion_queue_test grpc_credentials_test grpc_json_token_test grpc_stream_op_test hpack_parser_test hpack_table_test httpcli_format_request_test httpcli_parser_test httpcli_test json_rewrite_test json_test lame_client_test message_compress_test metadata_buffer_test multi_init_test murmur_hash_test no_server_test poll_kick_posix_test resolve_address_test secure_endpoint_test sockaddr_utils_test tcp_client_posix_test tcp_posix_test tcp_server_posix_test time_averaged_stats_test time_test timeout_encoding_test transport_metadata_test
+test: alarm_heap_test alarm_list_test alarm_test alpn_test bin_encoder_test census_hash_table_test census_statistics_multiple_writers_circular_buffer_test census_statistics_multiple_writers_test census_statistics_performance_test census_statistics_quick_test census_statistics_small_log_test census_stats_store_test census_stub_test census_trace_store_test census_window_stats_test chttp2_status_conversion_test chttp2_stream_encoder_test chttp2_stream_map_test chttp2_transport_end2end_test dualstack_socket_test echo_test fd_posix_test fling_stream_test fling_test gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_useful_test grpc_base64_test grpc_byte_buffer_reader_test grpc_channel_stack_test grpc_completion_queue_test grpc_credentials_test grpc_json_token_test grpc_stream_op_test hpack_parser_test hpack_table_test httpcli_format_request_test httpcli_parser_test httpcli_test interop_test json_rewrite_test json_test lame_client_test message_compress_test metadata_buffer_test multi_init_test murmur_hash_test no_server_test poll_kick_posix_test resolve_address_test secure_endpoint_test sockaddr_utils_test tcp_client_posix_test tcp_posix_test tcp_server_posix_test time_averaged_stats_test time_test timeout_encoding_test transport_metadata_test
echo All tests ran.
test_gpr: gpr_cancellable_test gpr_cmdline_test gpr_env_test gpr_file_test gpr_histogram_test gpr_host_port_test gpr_log_test gpr_slice_buffer_test gpr_slice_test gpr_string_test gpr_sync_test gpr_thd_test gpr_time_test gpr_useful_test
@@ -490,6 +490,14 @@ httpcli_test: httpcli_test.exe
echo Running httpcli_test
$(OUT_DIR)\httpcli_test.exe
+interop_test.exe: grpc_test_util
+ echo Building interop_test
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\cpp\interop\interop_test.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\interop_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\interop_test.obj
+interop_test: interop_test.exe
+ echo Running interop_test
+ $(OUT_DIR)\interop_test.exe
+
json_rewrite.exe: grpc_test_util
echo Building json_rewrite
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\json\json_rewrite.c
diff --git a/vsprojects/vs2013/gpr.vcxproj b/vsprojects/vs2013/gpr.vcxproj
index f6516b8953..3d970079a4 100644
--- a/vsprojects/vs2013/gpr.vcxproj
+++ b/vsprojects/vs2013/gpr.vcxproj
@@ -101,7 +101,6 @@
<ClInclude Include="..\..\include\grpc\support\useful.h" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\support\cpu.h" />
<ClInclude Include="..\..\src\core\support\env.h" />
<ClInclude Include="..\..\src\core\support\file.h" />
<ClInclude Include="..\..\src\core\support\murmur_hash.h" />
diff --git a/vsprojects/vs2013/gpr.vcxproj.filters b/vsprojects/vs2013/gpr.vcxproj.filters
index 1e908a5ba5..9b78c3a390 100644
--- a/vsprojects/vs2013/gpr.vcxproj.filters
+++ b/vsprojects/vs2013/gpr.vcxproj.filters
@@ -167,9 +167,6 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\support\cpu.h">
- <Filter>src\core\support</Filter>
- </ClInclude>
<ClInclude Include="..\..\src\core\support\env.h">
<Filter>src\core\support</Filter>
</ClInclude>
diff --git a/vsprojects/vs2013/gpr_shared.vcxproj b/vsprojects/vs2013/gpr_shared.vcxproj
index b9131e381c..892490e324 100644
--- a/vsprojects/vs2013/gpr_shared.vcxproj
+++ b/vsprojects/vs2013/gpr_shared.vcxproj
@@ -101,7 +101,6 @@
<ClInclude Include="..\..\include\grpc\support\useful.h" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\support\cpu.h" />
<ClInclude Include="..\..\src\core\support\env.h" />
<ClInclude Include="..\..\src\core\support\file.h" />
<ClInclude Include="..\..\src\core\support\murmur_hash.h" />
diff --git a/vsprojects/vs2013/gpr_shared.vcxproj.filters b/vsprojects/vs2013/gpr_shared.vcxproj.filters
index 1e908a5ba5..9b78c3a390 100644
--- a/vsprojects/vs2013/gpr_shared.vcxproj.filters
+++ b/vsprojects/vs2013/gpr_shared.vcxproj.filters
@@ -167,9 +167,6 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\support\cpu.h">
- <Filter>src\core\support</Filter>
- </ClInclude>
<ClInclude Include="..\..\src\core\support\env.h">
<Filter>src\core\support</Filter>
</ClInclude>
diff --git a/vsprojects/vs2013/grpc.sln b/vsprojects/vs2013/grpc.sln
index f34d360fdf..fd21ea782e 100644
--- a/vsprojects/vs2013/grpc.sln
+++ b/vsprojects/vs2013/grpc.sln
@@ -15,21 +15,21 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "grpc.vcxproj", "{29
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_csharp_ext", "grpc_csharp_ext.vcxproj", "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
ProjectSection(ProjectDependencies) = postProject
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
{29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_unsecure", "grpc_unsecure.vcxproj", "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}"
ProjectSection(ProjectDependencies) = postProject
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
- {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_unsecure", "grpc_unsecure.vcxproj", "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_csharp_ext", "grpc_csharp_ext.vcxproj", "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
ProjectSection(ProjectDependencies) = postProject
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpr_shared", "gpr_shared.vcxproj", "{3D304D6B-AAF8-428B-AC7D-A698DDDE93C0}"
@@ -60,10 +60,6 @@ Global
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Debug|Win32.Build.0 = Debug|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.ActiveCfg = Release|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release|Win32.Build.0 = Release|Win32
- {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.ActiveCfg = Debug|Win32
- {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.Build.0 = Debug|Win32
- {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.ActiveCfg = Release|Win32
- {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.Build.0 = Release|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.Build.0 = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32
@@ -72,6 +68,10 @@ Global
{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Debug|Win32.Build.0 = Debug|Win32
{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.ActiveCfg = Release|Win32
{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}.Release|Win32.Build.0 = Release|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Debug|Win32.Build.0 = Debug|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.ActiveCfg = Release|Win32
+ {D64C6D63-4458-4A88-AB38-35678384A7E4}.Release|Win32.Build.0 = Release|Win32
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32