Merge branch 'master' of github.com:grpc/grpc into alarm_cpp

pull/5293/head
David Garcia Quintas 9 years ago
commit ef02fb9d6f
  1. 155
      BUILD
  2. 183
      Makefile
  3. 44
      binding.gyp
  4. 106
      build.yaml
  5. 97
      doc/load-balancing.md
  6. 106
      gRPC.podspec
  7. 75
      grpc.gemspec
  8. 3
      include/grpc++/impl/codegen/call.h
  9. 11
      include/grpc++/support/channel_arguments.h
  10. 75
      package.json
  11. 2
      src/core/census/mlog.c
  12. 6
      src/core/census/mlog.h
  13. 2
      src/core/iomgr/iocp_windows.c
  14. 4
      src/core/iomgr/iomgr.c
  15. 11
      src/core/iomgr/pollset_posix.c
  16. 4
      src/core/iomgr/pollset_posix.h
  17. 4
      src/core/iomgr/pollset_windows.c
  18. 3
      src/core/iomgr/timer.c
  19. 22
      src/core/iomgr/timer.h
  20. 30
      src/core/surface/completion_queue.c
  21. 13
      src/cpp/common/channel_arguments.cc
  22. 4
      src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs
  23. 6
      src/csharp/Grpc.Core/AsyncAuthInterceptor.cs
  24. 6
      src/csharp/Grpc.Core/CallCredentials.cs
  25. 10
      src/csharp/Grpc.Core/CallInvocationDetails.cs
  26. 6
      src/csharp/Grpc.Core/CallOptions.cs
  27. 10
      src/csharp/Grpc.Core/Channel.cs
  28. 8
      src/csharp/Grpc.Core/ChannelCredentials.cs
  29. 12
      src/csharp/Grpc.Core/ChannelOptions.cs
  30. 4
      src/csharp/Grpc.Core/ContextPropagationToken.cs
  31. 5
      src/csharp/Grpc.Core/Grpc.Core.csproj
  32. 4
      src/csharp/Grpc.Core/GrpcEnvironment.cs
  33. 16
      src/csharp/Grpc.Core/Internal/AsyncCall.cs
  34. 30
      src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
  35. 18
      src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
  36. 2
      src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs
  37. 6
      src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
  38. 4
      src/csharp/Grpc.Core/Internal/Enums.cs
  39. 2
      src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs
  40. 10
      src/csharp/Grpc.Core/Internal/ServerCallHandler.cs
  41. 2
      src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs
  42. 6
      src/csharp/Grpc.Core/Internal/Timespec.cs
  43. 2
      src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs
  44. 6
      src/csharp/Grpc.Core/KeyCertificatePair.cs
  45. 6
      src/csharp/Grpc.Core/Marshaller.cs
  46. 18
      src/csharp/Grpc.Core/Metadata.cs
  47. 10
      src/csharp/Grpc.Core/Method.cs
  48. 20
      src/csharp/Grpc.Core/Server.cs
  49. 6
      src/csharp/Grpc.Core/ServerCredentials.cs
  50. 6
      src/csharp/Grpc.Core/ServerPort.cs
  51. 4
      src/csharp/Grpc.Core/Utils/GrpcPreconditions.cs
  52. 6
      src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs
  53. 6
      src/csharp/Grpc.IntegrationTesting/ClientRunners.cs
  54. 6
      src/csharp/Grpc.IntegrationTesting/Histogram.cs
  55. 6
      src/csharp/Grpc.IntegrationTesting/ServerRunners.cs
  56. 6
      src/csharp/Grpc.IntegrationTesting/WorkerServiceImpl.cs
  57. 5
      src/node/ext/call_credentials.cc
  58. 9
      src/node/ext/node_grpc.cc
  59. 32
      src/node/index.js
  60. 11
      src/node/src/client.js
  61. 32
      src/node/src/common.js
  62. 5
      src/node/src/credentials.js
  63. 5
      src/node/src/metadata.js
  64. 7
      src/node/src/server.js
  65. 52
      src/node/test/common_test.js
  66. 5
      src/node/test/test_messages.proto
  67. 44
      src/python/grpcio/grpc_core_dependencies.py
  68. 4
      summerofcode/ideas.md
  69. 50
      templates/Makefile.template
  70. 5
      templates/vsprojects/vcxproj.filters_defs.include
  71. 14
      templates/vsprojects/vcxproj_defs.include
  72. 2
      test/core/census/mlog_test.c
  73. 26
      test/core/iomgr/tcp_client_posix_test.c
  74. 23
      test/core/iomgr/timer_list_test.c
  75. 16
      test/cpp/common/channel_arguments_test.cc
  76. 36
      test/cpp/end2end/async_end2end_test.cc
  77. 69
      test/cpp/end2end/end2end_test.cc
  78. 8
      test/cpp/interop/client.cc
  79. 72
      test/cpp/interop/interop_client.cc
  80. 3
      test/cpp/interop/interop_client.h
  81. 35
      test/cpp/interop/server.cc
  82. 82
      test/cpp/util/test_credentials_provider.cc
  83. 46
      test/cpp/util/test_credentials_provider.h
  84. 75
      tools/doxygen/Doxyfile.core.internal
  85. 82
      tools/jenkins/run_performance.sh
  86. 17
      tools/run_tests/artifact_targets.py
  87. 61
      tools/run_tests/build_artifact_python.bat
  88. 2
      tools/run_tests/run_node.bat
  89. 9
      tools/run_tests/run_node.sh
  90. 4
      tools/run_tests/run_tests.py
  91. 35
      tools/run_tests/sources_and_headers.json
  92. 25
      vsprojects/buildtests_c.sln
  93. 25
      vsprojects/grpc.sln
  94. 3
      vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj
  95. 6
      vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj.filters
  96. 117
      vsprojects/vcxproj/grpc/grpc.vcxproj
  97. 217
      vsprojects/vcxproj/grpc/grpc.vcxproj.filters
  98. 200
      vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj
  99. 10
      vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj.filters
  100. 5
      vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
  101. Some files were not shown because too many files have changed in this diff Show More

155
BUILD

@ -154,20 +154,6 @@ cc_library(
cc_library( cc_library(
name = "grpc", name = "grpc",
srcs = [ srcs = [
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h", "src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h", "src/core/channel/channel_stack.h",
@ -232,7 +218,6 @@ cc_library(
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -282,30 +267,23 @@ cc_library(
"src/core/transport/static_metadata.h", "src/core/transport/static_metadata.h",
"src/core/transport/transport.h", "src/core/transport/transport.h",
"src/core/transport/transport_impl.h", "src/core/transport/transport_impl.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/grpc_context.c", "src/core/census/grpc_context.c",
"src/core/census/grpc_filter.c", "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c", "src/core/channel/channel_args.c",
@ -434,9 +412,30 @@ cc_library(
"src/core/transport/static_metadata.c", "src/core/transport/static_metadata.c",
"src/core/transport/transport.c", "src/core/transport/transport.c",
"src/core/transport/transport_op_string.c", "src/core/transport/transport_op_string.c",
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/context.c", "src/core/census/context.c",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/tracing.c", "src/core/census/tracing.c",
@ -538,7 +537,6 @@ cc_library(
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -589,7 +587,7 @@ cc_library(
"src/core/transport/transport.h", "src/core/transport/transport.h",
"src/core/transport/transport_impl.h", "src/core/transport/transport_impl.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
"src/core/surface/init_unsecure.c", "src/core/surface/init_unsecure.c",
"src/core/census/grpc_context.c", "src/core/census/grpc_context.c",
@ -722,7 +720,7 @@ cc_library(
"src/core/transport/transport_op_string.c", "src/core/transport/transport_op_string.c",
"src/core/census/context.c", "src/core/census/context.c",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/tracing.c", "src/core/census/tracing.c",
@ -1249,27 +1247,6 @@ objc_library(
objc_library( objc_library(
name = "grpc_objc", name = "grpc_objc",
srcs = [ srcs = [
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/grpc_context.c", "src/core/census/grpc_context.c",
"src/core/census/grpc_filter.c", "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c", "src/core/channel/channel_args.c",
@ -1398,9 +1375,30 @@ objc_library(
"src/core/transport/static_metadata.c", "src/core/transport/static_metadata.c",
"src/core/transport/transport.c", "src/core/transport/transport.c",
"src/core/transport/transport_op_string.c", "src/core/transport/transport_op_string.c",
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/context.c", "src/core/census/context.c",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/tracing.c", "src/core/census/tracing.c",
@ -1419,20 +1417,6 @@ objc_library(
"include/grpc/grpc.h", "include/grpc/grpc.h",
"include/grpc/status.h", "include/grpc/status.h",
"include/grpc/census.h", "include/grpc/census.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h", "src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h", "src/core/channel/channel_stack.h",
@ -1497,7 +1481,6 @@ objc_library(
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -1547,8 +1530,22 @@ objc_library(
"src/core/transport/static_metadata.h", "src/core/transport/static_metadata.h",
"src/core/transport/transport.h", "src/core/transport/transport.h",
"src/core/transport/transport_impl.h", "src/core/transport/transport_impl.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
], ],
includes = [ includes = [

@ -247,7 +247,7 @@ STRIP ?= strip --strip-unneeded
else else
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
ifeq ($(origin AR), default) ifeq ($(origin AR), default)
AR = libtool -o AR = libtool -no_warning_for_no_symbols -o
endif endif
STRIP ?= strip -x STRIP ?= strip -x
else else
@ -2265,7 +2265,7 @@ $(LIBDIR)/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(LIBGPR_OBJS)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBGPR_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBGPR_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgpr.a
endif endif
@ -2306,7 +2306,7 @@ $(LIBDIR)/$(CONFIG)/libgpr_test_util.a: $(ZLIB_DEP) $(LIBGPR_TEST_UTIL_OBJS)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr_test_util.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgpr_test_util.a
endif endif
@ -2318,27 +2318,6 @@ endif
LIBGRPC_SRC = \ LIBGRPC_SRC = \
src/core/httpcli/httpcli_security_connector.c \
src/core/security/base64.c \
src/core/security/client_auth_filter.c \
src/core/security/credentials.c \
src/core/security/credentials_metadata.c \
src/core/security/credentials_posix.c \
src/core/security/credentials_win32.c \
src/core/security/google_default_credentials.c \
src/core/security/handshake.c \
src/core/security/json_token.c \
src/core/security/jwt_verifier.c \
src/core/security/secure_endpoint.c \
src/core/security/security_connector.c \
src/core/security/security_context.c \
src/core/security/server_auth_filter.c \
src/core/security/server_secure_chttp2.c \
src/core/surface/init_secure.c \
src/core/surface/secure_channel_create.c \
src/core/tsi/fake_transport_security.c \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/grpc_context.c \ src/core/census/grpc_context.c \
src/core/census/grpc_filter.c \ src/core/census/grpc_filter.c \
src/core/channel/channel_args.c \ src/core/channel/channel_args.c \
@ -2467,9 +2446,30 @@ LIBGRPC_SRC = \
src/core/transport/static_metadata.c \ src/core/transport/static_metadata.c \
src/core/transport/transport.c \ src/core/transport/transport.c \
src/core/transport/transport_op_string.c \ src/core/transport/transport_op_string.c \
src/core/httpcli/httpcli_security_connector.c \
src/core/security/base64.c \
src/core/security/client_auth_filter.c \
src/core/security/credentials.c \
src/core/security/credentials_metadata.c \
src/core/security/credentials_posix.c \
src/core/security/credentials_win32.c \
src/core/security/google_default_credentials.c \
src/core/security/handshake.c \
src/core/security/json_token.c \
src/core/security/jwt_verifier.c \
src/core/security/secure_endpoint.c \
src/core/security/security_connector.c \
src/core/security/security_context.c \
src/core/security/server_auth_filter.c \
src/core/security/server_secure_chttp2.c \
src/core/surface/init_secure.c \
src/core/surface/secure_channel_create.c \
src/core/tsi/fake_transport_security.c \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/context.c \ src/core/census/context.c \
src/core/census/initialize.c \ src/core/census/initialize.c \
src/core/census/log.c \ src/core/census/mlog.c \
src/core/census/operation.c \ src/core/census/operation.c \
src/core/census/placeholders.c \ src/core/census/placeholders.c \
src/core/census/tracing.c \ src/core/census/tracing.c \
@ -2509,7 +2509,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS) $(LIB
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc.a
endif endif
@ -2576,7 +2576,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_TE
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a
endif endif
@ -2612,7 +2612,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_TEST_UT
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a
endif endif
@ -2755,7 +2755,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/transport/transport_op_string.c \ src/core/transport/transport_op_string.c \
src/core/census/context.c \ src/core/census/context.c \
src/core/census/initialize.c \ src/core/census/initialize.c \
src/core/census/log.c \ src/core/census/mlog.c \
src/core/census/operation.c \ src/core/census/operation.c \
src/core/census/placeholders.c \ src/core/census/placeholders.c \
src/core/census/tracing.c \ src/core/census/tracing.c \
@ -2783,7 +2783,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_UNSECURE_OBJS) $
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
endif endif
@ -2826,7 +2826,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a: $(ZLIB_DEP) $(LIBGRPC_ZOOKEEPER_OBJS)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a
endif endif
@ -2877,7 +2877,7 @@ $(LIBDIR)/$(CONFIG)/libreconnect_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBRECON
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libreconnect_server.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBRECONNECT_SERVER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBRECONNECT_SERVER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libreconnect_server.a
endif endif
@ -2915,7 +2915,7 @@ $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTEST_T
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a
endif endif
@ -3070,7 +3070,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LI
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++.a
endif endif
@ -3135,7 +3135,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOB
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
endif endif
@ -3162,6 +3162,7 @@ LIBGRPC++_TEST_UTIL_SRC = \
test/cpp/util/create_test_channel.cc \ test/cpp/util/create_test_channel.cc \
test/cpp/util/string_ref_helper.cc \ test/cpp/util/string_ref_helper.cc \
test/cpp/util/subprocess.cc \ test/cpp/util/subprocess.cc \
test/cpp/util/test_credentials_provider.cc \
LIBGRPC++_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_UTIL_SRC)))) LIBGRPC++_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_UTIL_SRC))))
@ -3191,7 +3192,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a
endif endif
@ -3212,6 +3213,7 @@ $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/testing/e
$(OBJDIR)/$(CONFIG)/test/cpp/util/create_test_channel.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/create_test_channel.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/util/test_credentials_provider.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc
LIBGRPC++_UNSECURE_SRC = \ LIBGRPC++_UNSECURE_SRC = \
@ -3339,7 +3341,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a
endif endif
@ -3447,7 +3449,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIB
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a
endif endif
@ -3492,7 +3494,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PRO
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBINTEROP_CLIENT_HELPER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBINTEROP_CLIENT_HELPER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a
endif endif
@ -3545,7 +3547,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTO
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_main.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBINTEROP_CLIENT_MAIN_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBINTEROP_CLIENT_MAIN_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_client_main.a
endif endif
@ -3595,7 +3597,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PRO
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBINTEROP_SERVER_HELPER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBINTEROP_SERVER_HELPER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a
endif endif
@ -3646,7 +3648,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTO
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_main.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBINTEROP_SERVER_MAIN_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBINTEROP_SERVER_MAIN_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_server_main.a
endif endif
@ -3711,7 +3713,7 @@ $(LIBDIR)/$(CONFIG)/libqps.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBQP
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libqps.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libqps.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libqps.a $(LIBQPS_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libqps.a $(LIBQPS_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libqps.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libqps.a
endif endif
@ -3763,7 +3765,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_C
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
endif endif
@ -4103,7 +4105,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(LIBBORINGSSL_OBJS)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl.a
endif endif
@ -4140,7 +4142,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIB
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a
endif endif
@ -4177,7 +4179,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBBORINGSSL_AES_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBBORINGSSL_AES_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a
endif endif
@ -4214,7 +4216,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a
endif endif
@ -4251,7 +4253,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBBORINGSSL_BIO_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a
endif endif
@ -4288,7 +4290,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBBORINGSSL_BN_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBBORINGSSL_BN_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a
endif endif
@ -4325,7 +4327,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a
endif endif
@ -4362,7 +4364,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a
endif endif
@ -4399,7 +4401,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a
endif endif
@ -4436,7 +4438,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a
endif endif
@ -4464,7 +4466,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP) $(LIBBOR
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a
endif endif
@ -4499,7 +4501,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a
endif endif
@ -4536,7 +4538,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBBORINGSSL_X25519_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a
endif endif
@ -4573,7 +4575,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBBORINGSSL_DH_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBBORINGSSL_DH_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a
endif endif
@ -4610,7 +4612,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a
endif endif
@ -4638,7 +4640,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_DSA
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(LIBBORINGSSL_DSA_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a
endif endif
@ -4673,7 +4675,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBBORINGSSL_EC_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBBORINGSSL_EC_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a
endif endif
@ -4701,7 +4703,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a
endif endif
@ -4736,7 +4738,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a
endif endif
@ -4773,7 +4775,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBBORINGSSL_ERR_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a
endif endif
@ -4810,7 +4812,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_D
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a
endif endif
@ -4847,7 +4849,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBBORINGSSL_EVP_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a
endif endif
@ -4884,7 +4886,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a
endif endif
@ -4912,7 +4914,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_HK
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a
endif endif
@ -4947,7 +4949,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a
endif endif
@ -4975,7 +4977,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_L
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a
endif endif
@ -5001,7 +5003,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_GCM
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(LIBBORINGSSL_GCM_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a
endif endif
@ -5036,7 +5038,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a
endif endif
@ -5073,7 +5075,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a
endif endif
@ -5110,7 +5112,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DE
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a
endif endif
@ -5138,7 +5140,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSS
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a
endif endif
@ -5173,7 +5175,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBBORINGSSL_RSA_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a
endif endif
@ -5201,7 +5203,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a
endif endif
@ -5227,7 +5229,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_P
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a
endif endif
@ -5253,7 +5255,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_TAB
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(LIBBORINGSSL_TAB_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a
endif endif
@ -5279,7 +5281,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a
endif endif
@ -5305,7 +5307,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a
endif endif
@ -5340,7 +5342,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(LIBBORINGSSL_SSL_TEST_LIB_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a
endif endif
@ -5381,7 +5383,7 @@ $(LIBDIR)/$(CONFIG)/libz.a: $(LIBZ_OBJS)
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libz.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libz.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libz.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libz.a
endif endif
@ -5415,7 +5417,7 @@ $(LIBDIR)/$(CONFIG)/libbad_client_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_CL
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_client_test.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBBAD_CLIENT_TEST_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBBAD_CLIENT_TEST_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbad_client_test.a
endif endif
@ -5453,7 +5455,7 @@ $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBA
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBBAD_SSL_TEST_SERVER_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBBAD_SSL_TEST_SERVER_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a
endif endif
@ -5527,7 +5529,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_tests.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_tests.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_tests.a
endif endif
@ -5590,7 +5592,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(LIBEND2END_NOSEC_TE
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a
endif endif
@ -5626,7 +5628,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_certs.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_
$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_certs.a
$(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS) $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS)
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_certs.a
endif endif
@ -5838,7 +5840,7 @@ endif
CENSUS_LOG_TEST_SRC = \ CENSUS_LOG_TEST_SRC = \
test/core/census/log_test.c \ test/core/census/mlog_test.c \
CENSUS_LOG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_LOG_TEST_SRC)))) CENSUS_LOG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_LOG_TEST_SRC))))
ifeq ($(NO_SECURE),true) ifeq ($(NO_SECURE),true)
@ -5858,7 +5860,7 @@ $(BINDIR)/$(CONFIG)/census_log_test: $(CENSUS_LOG_TEST_OBJS) $(LIBDIR)/$(CONFIG)
endif endif
$(OBJDIR)/$(CONFIG)/test/core/census/log_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OBJDIR)/$(CONFIG)/test/core/census/mlog_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_census_log_test: $(CENSUS_LOG_TEST_OBJS:.o=.dep) deps_census_log_test: $(CENSUS_LOG_TEST_OBJS:.o=.dep)
@ -13015,6 +13017,7 @@ test/cpp/util/create_test_channel.cc: $(OPENSSL_DEP)
test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP) test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP)
test/cpp/util/subprocess.cc: $(OPENSSL_DEP) test/cpp/util/subprocess.cc: $(OPENSSL_DEP)
test/cpp/util/test_config.cc: $(OPENSSL_DEP) test/cpp/util/test_config.cc: $(OPENSSL_DEP)
test/cpp/util/test_credentials_provider.cc: $(OPENSSL_DEP)
endif endif
.PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean .PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean

@ -557,27 +557,6 @@
'gpr', 'gpr',
], ],
'sources': [ 'sources': [
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/grpc_context.c', 'src/core/census/grpc_context.c',
'src/core/census/grpc_filter.c', 'src/core/census/grpc_filter.c',
'src/core/channel/channel_args.c', 'src/core/channel/channel_args.c',
@ -706,9 +685,30 @@
'src/core/transport/static_metadata.c', 'src/core/transport/static_metadata.c',
'src/core/transport/transport.c', 'src/core/transport/transport.c',
'src/core/transport/transport_op_string.c', 'src/core/transport/transport_op_string.c',
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/context.c', 'src/core/census/context.c',
'src/core/census/initialize.c', 'src/core/census/initialize.c',
'src/core/census/log.c', 'src/core/census/mlog.c',
'src/core/census/operation.c', 'src/core/census/operation.c',
'src/core/census/placeholders.c', 'src/core/census/placeholders.c',
'src/core/census/tracing.c', 'src/core/census/tracing.c',

@ -14,12 +14,12 @@ filegroups:
- include/grpc/census.h - include/grpc/census.h
headers: headers:
- src/core/census/aggregation.h - src/core/census/aggregation.h
- src/core/census/log.h - src/core/census/mlog.h
- src/core/census/rpc_metric_id.h - src/core/census/rpc_metric_id.h
src: src:
- src/core/census/context.c - src/core/census/context.c
- src/core/census/initialize.c - src/core/census/initialize.c
- src/core/census/log.c - src/core/census/mlog.c
- src/core/census/operation.c - src/core/census/operation.c
- src/core/census/placeholders.c - src/core/census/placeholders.c
- src/core/census/tracing.c - src/core/census/tracing.c
@ -308,7 +308,6 @@ filegroups:
- src/core/iomgr/time_averaged_stats.h - src/core/iomgr/time_averaged_stats.h
- src/core/iomgr/timer.h - src/core/iomgr/timer.h
- src/core/iomgr/timer_heap.h - src/core/iomgr/timer_heap.h
- src/core/iomgr/timer_internal.h
- src/core/iomgr/udp_server.h - src/core/iomgr/udp_server.h
- src/core/iomgr/wakeup_fd_pipe.h - src/core/iomgr/wakeup_fd_pipe.h
- src/core/iomgr/wakeup_fd_posix.h - src/core/iomgr/wakeup_fd_posix.h
@ -495,6 +494,44 @@ filegroups:
- include/grpc/impl/codegen/grpc_types.h - include/grpc/impl/codegen/grpc_types.h
- include/grpc/impl/codegen/propagation_bits.h - include/grpc/impl/codegen/propagation_bits.h
- include/grpc/impl/codegen/status.h - include/grpc/impl/codegen/status.h
- name: grpc_secure
headers:
- src/core/security/auth_filters.h
- src/core/security/base64.h
- src/core/security/credentials.h
- src/core/security/handshake.h
- src/core/security/json_token.h
- src/core/security/jwt_verifier.h
- src/core/security/secure_endpoint.h
- src/core/security/security_connector.h
- src/core/security/security_context.h
- src/core/tsi/fake_transport_security.h
- src/core/tsi/ssl_transport_security.h
- src/core/tsi/ssl_types.h
- src/core/tsi/transport_security.h
- src/core/tsi/transport_security_interface.h
src:
- src/core/httpcli/httpcli_security_connector.c
- src/core/security/base64.c
- src/core/security/client_auth_filter.c
- src/core/security/credentials.c
- src/core/security/credentials_metadata.c
- src/core/security/credentials_posix.c
- src/core/security/credentials_win32.c
- src/core/security/google_default_credentials.c
- src/core/security/handshake.c
- src/core/security/json_token.c
- src/core/security/jwt_verifier.c
- src/core/security/secure_endpoint.c
- src/core/security/security_connector.c
- src/core/security/security_context.c
- src/core/security/server_auth_filter.c
- src/core/security/server_secure_chttp2.c
- src/core/surface/init_secure.c
- src/core/surface/secure_channel_create.c
- src/core/tsi/fake_transport_security.c
- src/core/tsi/ssl_transport_security.c
- src/core/tsi/transport_security.c
- name: grpc_test_util_base - name: grpc_test_util_base
headers: headers:
- test/core/end2end/cq_verifier.h - test/core/end2end/cq_verifier.h
@ -538,43 +575,6 @@ libs:
language: c language: c
public_headers: public_headers:
- include/grpc/grpc_security.h - include/grpc/grpc_security.h
headers:
- src/core/security/auth_filters.h
- src/core/security/base64.h
- src/core/security/credentials.h
- src/core/security/handshake.h
- src/core/security/json_token.h
- src/core/security/jwt_verifier.h
- src/core/security/secure_endpoint.h
- src/core/security/security_connector.h
- src/core/security/security_context.h
- src/core/tsi/fake_transport_security.h
- src/core/tsi/ssl_transport_security.h
- src/core/tsi/ssl_types.h
- src/core/tsi/transport_security.h
- src/core/tsi/transport_security_interface.h
src:
- src/core/httpcli/httpcli_security_connector.c
- src/core/security/base64.c
- src/core/security/client_auth_filter.c
- src/core/security/credentials.c
- src/core/security/credentials_metadata.c
- src/core/security/credentials_posix.c
- src/core/security/credentials_win32.c
- src/core/security/google_default_credentials.c
- src/core/security/handshake.c
- src/core/security/json_token.c
- src/core/security/jwt_verifier.c
- src/core/security/secure_endpoint.c
- src/core/security/security_connector.c
- src/core/security/security_context.c
- src/core/security/server_auth_filter.c
- src/core/security/server_secure_chttp2.c
- src/core/surface/init_secure.c
- src/core/surface/secure_channel_create.c
- src/core/tsi/fake_transport_security.c
- src/core/tsi/ssl_transport_security.c
- src/core/tsi/transport_security.c
deps: deps:
- gpr - gpr
baselib: true baselib: true
@ -583,12 +583,34 @@ libs:
filegroups: filegroups:
- grpc_codegen - grpc_codegen
- grpc_base - grpc_base
- grpc_secure
- census - census
secure: true secure: true
vs_packages: vs_packages:
- grpc.dependencies.openssl - grpc.dependencies.openssl
- grpc.dependencies.zlib - grpc.dependencies.zlib
vs_project_guid: '{29D16885-7228-4C31-81ED-5F9187C7F2A9}' vs_project_guid: '{29D16885-7228-4C31-81ED-5F9187C7F2A9}'
- name: grpc_dll
build: private
language: c
src: []
deps:
- gpr
- grpc
build_system:
- visual_studio
deps_linkage: static
dll_def: grpc.def
vs_config_type: DynamicLibrary
vs_packages:
- grpc.dependencies.openssl
- grpc.dependencies.zlib
vs_project_guid: '{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}'
vs_props:
- zlib
- openssl
- winsock
- global
- name: grpc_test_util - name: grpc_test_util
build: private build: private
language: c language: c
@ -716,6 +738,7 @@ libs:
- test/cpp/util/create_test_channel.h - test/cpp/util/create_test_channel.h
- test/cpp/util/string_ref_helper.h - test/cpp/util/string_ref_helper.h
- test/cpp/util/subprocess.h - test/cpp/util/subprocess.h
- test/cpp/util/test_credentials_provider.h
src: src:
- src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/echo_messages.proto
- src/proto/grpc/testing/echo.proto - src/proto/grpc/testing/echo.proto
@ -726,6 +749,7 @@ libs:
- test/cpp/util/create_test_channel.cc - test/cpp/util/create_test_channel.cc
- test/cpp/util/string_ref_helper.cc - test/cpp/util/string_ref_helper.cc
- test/cpp/util/subprocess.cc - test/cpp/util/subprocess.cc
- test/cpp/util/test_credentials_provider.cc
deps: deps:
- grpc++ - grpc++
- grpc_test_util - grpc_test_util
@ -959,7 +983,7 @@ targets:
build: test build: test
language: c language: c
src: src:
- test/core/census/log_test.c - test/core/census/mlog_test.c
deps: deps:
- grpc_test_util - grpc_test_util
- grpc - grpc

@ -0,0 +1,97 @@
Load Balancing in gRPC
=======================
# Objective
To design a load balancing API between a gRPC client and a Load Balancer to
instruct the client how to send load to multiple backend servers.
# Background
Prior to any gRPC specifics, we explore some usual ways to approach load
balancing.
### Proxy Model
Using a proxy provides a solid trustable client that can report load to the load
balancing system. Proxies typically require more resources to operate since they
have temporary copies of the RPC request and response. This model also increases
latency to the RPCs.
The proxy model was deemed inefficient when considering request heavy services
like storage.
### Balancing-aware Client
This thicker client places more of the load balancing logic in the client. For
example, the client could contain many load balancing policies (Round Robin,
Random, etc) used to select servers from a list. In this model, a list of
servers would be either statically configured in the client, provided by the
name resolution system, an external load balancer, etc. In any case, the client
is responsible for choosing the preferred server from the list.
One of the drawbacks of this approach is writing and maintaining the load
balancing policies in multiple languages and/or versions of the clients. These
policies can be fairly complicated. Some of the algorithms also require client
to server communication so the client would need to get thicker to support
additional RPCs to get health or load information in addition to sending RPCs
for user requests.
It would also significantly complicate the client's code: the new design hides
the load balancing complexity of multiple layers and presents it as a simple
list of servers to the client.
### External Load Balancing Service
The client load balancing code is kept simple and portable, implementing
well-known algorithms (ie, Round Robin) for server selection.
Complex load balancing algorithms are instead provided by the load balancer. The
client relies on the load balancer to provide _load balancing configuration_ and
_the list of servers_ to which the client should send requests. The balancer
updates the server list as needed to balance the load as well as handle server
unavailability or health issues. The load balancer will make any necessary
complex decisions and inform the client. The load balancer may communicate with
the backend servers to collect load and health information.
# Proposed Architecture
The gRPC load balancing approach follows the third approach, by having an
external load balancer which provides simple clients with a list of servers.
## Client
When establishing a gRPC stream to the balancer, the client will send an initial
request to the load balancer (via a regular gRPC message). The load balancer
will respond with client config (including, for example, settings for flow
control, RPC deadlines, etc.) or a redirect to another load balancer. If the
balancer did not redirect the client, it will then send a list of servers to the
client. The client will contain simple load balancing logic for choosing the
next server when it needs to send a request.
## Load Balancer
The Load Balancer is responsible for providing the client with a list of servers
and client RPC parameters. The balancer chooses when to update the list of
servers and can decide whether to provide a complete list, a subset, or a
specific list of “picked” servers in a particular order. The balancer can
optionally provide an expiration interval after which the server list should no
longer be trusted and should be updated by the balancer.
The load balancer may open reporting streams to each server contained in the
server list. These streams are primarily used for load reporting. For example,
Weighted Round Robin requires that the servers report utilization to the load
balancer in order to compute the next list of servers.
## Server
The gRPC Server is responsible for answering RPC requests and providing
responses to the client. The server will also report load to the load balancer
if a reporting stream was opened for this purpose.
### Security
The load balancer may be separate from the actual server backends and a
compromise of the load balancer should only lead to a compromise of the
loadbalancing functionality. In other words, a compromised load balancer should
not be able to cause a client to trust a (potentially malicious) backend server
any more than in a comparable situation without loadbalancing.

@ -158,20 +158,6 @@ Pod::Spec.new do |s|
'src/core/support/time_win32.c', 'src/core/support/time_win32.c',
'src/core/support/tls_pthread.c', 'src/core/support/tls_pthread.c',
'src/core/support/wrap_memcpy.c', 'src/core/support/wrap_memcpy.c',
'src/core/security/auth_filters.h',
'src/core/security/base64.h',
'src/core/security/credentials.h',
'src/core/security/handshake.h',
'src/core/security/json_token.h',
'src/core/security/jwt_verifier.h',
'src/core/security/secure_endpoint.h',
'src/core/security/security_connector.h',
'src/core/security/security_context.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/census/grpc_filter.h', 'src/core/census/grpc_filter.h',
'src/core/channel/channel_args.h', 'src/core/channel/channel_args.h',
'src/core/channel/channel_stack.h', 'src/core/channel/channel_stack.h',
@ -236,7 +222,6 @@ Pod::Spec.new do |s|
'src/core/iomgr/time_averaged_stats.h', 'src/core/iomgr/time_averaged_stats.h',
'src/core/iomgr/timer.h', 'src/core/iomgr/timer.h',
'src/core/iomgr/timer_heap.h', 'src/core/iomgr/timer_heap.h',
'src/core/iomgr/timer_internal.h',
'src/core/iomgr/udp_server.h', 'src/core/iomgr/udp_server.h',
'src/core/iomgr/wakeup_fd_pipe.h', 'src/core/iomgr/wakeup_fd_pipe.h',
'src/core/iomgr/wakeup_fd_posix.h', 'src/core/iomgr/wakeup_fd_posix.h',
@ -286,8 +271,22 @@ Pod::Spec.new do |s|
'src/core/transport/static_metadata.h', 'src/core/transport/static_metadata.h',
'src/core/transport/transport.h', 'src/core/transport/transport.h',
'src/core/transport/transport_impl.h', 'src/core/transport/transport_impl.h',
'src/core/security/auth_filters.h',
'src/core/security/base64.h',
'src/core/security/credentials.h',
'src/core/security/handshake.h',
'src/core/security/json_token.h',
'src/core/security/jwt_verifier.h',
'src/core/security/secure_endpoint.h',
'src/core/security/security_connector.h',
'src/core/security/security_context.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/census/aggregation.h', 'src/core/census/aggregation.h',
'src/core/census/log.h', 'src/core/census/mlog.h',
'src/core/census/rpc_metric_id.h', 'src/core/census/rpc_metric_id.h',
'include/grpc/grpc_security.h', 'include/grpc/grpc_security.h',
'include/grpc/impl/codegen/byte_buffer.h', 'include/grpc/impl/codegen/byte_buffer.h',
@ -302,27 +301,6 @@ Pod::Spec.new do |s|
'include/grpc/grpc.h', 'include/grpc/grpc.h',
'include/grpc/status.h', 'include/grpc/status.h',
'include/grpc/census.h', 'include/grpc/census.h',
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/grpc_context.c', 'src/core/census/grpc_context.c',
'src/core/census/grpc_filter.c', 'src/core/census/grpc_filter.c',
'src/core/channel/channel_args.c', 'src/core/channel/channel_args.c',
@ -451,9 +429,30 @@ Pod::Spec.new do |s|
'src/core/transport/static_metadata.c', 'src/core/transport/static_metadata.c',
'src/core/transport/transport.c', 'src/core/transport/transport.c',
'src/core/transport/transport_op_string.c', 'src/core/transport/transport_op_string.c',
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/context.c', 'src/core/census/context.c',
'src/core/census/initialize.c', 'src/core/census/initialize.c',
'src/core/census/log.c', 'src/core/census/mlog.c',
'src/core/census/operation.c', 'src/core/census/operation.c',
'src/core/census/placeholders.c', 'src/core/census/placeholders.c',
'src/core/census/tracing.c' 'src/core/census/tracing.c'
@ -468,20 +467,6 @@ Pod::Spec.new do |s|
'src/core/support/string_win32.h', 'src/core/support/string_win32.h',
'src/core/support/thd_internal.h', 'src/core/support/thd_internal.h',
'src/core/support/time_precise.h', 'src/core/support/time_precise.h',
'src/core/security/auth_filters.h',
'src/core/security/base64.h',
'src/core/security/credentials.h',
'src/core/security/handshake.h',
'src/core/security/json_token.h',
'src/core/security/jwt_verifier.h',
'src/core/security/secure_endpoint.h',
'src/core/security/security_connector.h',
'src/core/security/security_context.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/census/grpc_filter.h', 'src/core/census/grpc_filter.h',
'src/core/channel/channel_args.h', 'src/core/channel/channel_args.h',
'src/core/channel/channel_stack.h', 'src/core/channel/channel_stack.h',
@ -546,7 +531,6 @@ Pod::Spec.new do |s|
'src/core/iomgr/time_averaged_stats.h', 'src/core/iomgr/time_averaged_stats.h',
'src/core/iomgr/timer.h', 'src/core/iomgr/timer.h',
'src/core/iomgr/timer_heap.h', 'src/core/iomgr/timer_heap.h',
'src/core/iomgr/timer_internal.h',
'src/core/iomgr/udp_server.h', 'src/core/iomgr/udp_server.h',
'src/core/iomgr/wakeup_fd_pipe.h', 'src/core/iomgr/wakeup_fd_pipe.h',
'src/core/iomgr/wakeup_fd_posix.h', 'src/core/iomgr/wakeup_fd_posix.h',
@ -596,8 +580,22 @@ Pod::Spec.new do |s|
'src/core/transport/static_metadata.h', 'src/core/transport/static_metadata.h',
'src/core/transport/transport.h', 'src/core/transport/transport.h',
'src/core/transport/transport_impl.h', 'src/core/transport/transport_impl.h',
'src/core/security/auth_filters.h',
'src/core/security/base64.h',
'src/core/security/credentials.h',
'src/core/security/handshake.h',
'src/core/security/json_token.h',
'src/core/security/jwt_verifier.h',
'src/core/security/secure_endpoint.h',
'src/core/security/security_connector.h',
'src/core/security/security_context.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
'src/core/census/aggregation.h', 'src/core/census/aggregation.h',
'src/core/census/log.h', 'src/core/census/mlog.h',
'src/core/census/rpc_metric_id.h' 'src/core/census/rpc_metric_id.h'
ss.header_mappings_dir = '.' ss.header_mappings_dir = '.'

@ -154,20 +154,6 @@ Gem::Specification.new do |s|
s.files += %w( include/grpc/grpc.h ) s.files += %w( include/grpc/grpc.h )
s.files += %w( include/grpc/status.h ) s.files += %w( include/grpc/status.h )
s.files += %w( include/grpc/census.h ) s.files += %w( include/grpc/census.h )
s.files += %w( src/core/security/auth_filters.h )
s.files += %w( src/core/security/base64.h )
s.files += %w( src/core/security/credentials.h )
s.files += %w( src/core/security/handshake.h )
s.files += %w( src/core/security/json_token.h )
s.files += %w( src/core/security/jwt_verifier.h )
s.files += %w( src/core/security/secure_endpoint.h )
s.files += %w( src/core/security/security_connector.h )
s.files += %w( src/core/security/security_context.h )
s.files += %w( src/core/tsi/fake_transport_security.h )
s.files += %w( src/core/tsi/ssl_transport_security.h )
s.files += %w( src/core/tsi/ssl_types.h )
s.files += %w( src/core/tsi/transport_security.h )
s.files += %w( src/core/tsi/transport_security_interface.h )
s.files += %w( src/core/census/grpc_filter.h ) s.files += %w( src/core/census/grpc_filter.h )
s.files += %w( src/core/channel/channel_args.h ) s.files += %w( src/core/channel/channel_args.h )
s.files += %w( src/core/channel/channel_stack.h ) s.files += %w( src/core/channel/channel_stack.h )
@ -232,7 +218,6 @@ Gem::Specification.new do |s|
s.files += %w( src/core/iomgr/time_averaged_stats.h ) s.files += %w( src/core/iomgr/time_averaged_stats.h )
s.files += %w( src/core/iomgr/timer.h ) s.files += %w( src/core/iomgr/timer.h )
s.files += %w( src/core/iomgr/timer_heap.h ) s.files += %w( src/core/iomgr/timer_heap.h )
s.files += %w( src/core/iomgr/timer_internal.h )
s.files += %w( src/core/iomgr/udp_server.h ) s.files += %w( src/core/iomgr/udp_server.h )
s.files += %w( src/core/iomgr/wakeup_fd_pipe.h ) s.files += %w( src/core/iomgr/wakeup_fd_pipe.h )
s.files += %w( src/core/iomgr/wakeup_fd_posix.h ) s.files += %w( src/core/iomgr/wakeup_fd_posix.h )
@ -282,30 +267,23 @@ Gem::Specification.new do |s|
s.files += %w( src/core/transport/static_metadata.h ) s.files += %w( src/core/transport/static_metadata.h )
s.files += %w( src/core/transport/transport.h ) s.files += %w( src/core/transport/transport.h )
s.files += %w( src/core/transport/transport_impl.h ) s.files += %w( src/core/transport/transport_impl.h )
s.files += %w( src/core/security/auth_filters.h )
s.files += %w( src/core/security/base64.h )
s.files += %w( src/core/security/credentials.h )
s.files += %w( src/core/security/handshake.h )
s.files += %w( src/core/security/json_token.h )
s.files += %w( src/core/security/jwt_verifier.h )
s.files += %w( src/core/security/secure_endpoint.h )
s.files += %w( src/core/security/security_connector.h )
s.files += %w( src/core/security/security_context.h )
s.files += %w( src/core/tsi/fake_transport_security.h )
s.files += %w( src/core/tsi/ssl_transport_security.h )
s.files += %w( src/core/tsi/ssl_types.h )
s.files += %w( src/core/tsi/transport_security.h )
s.files += %w( src/core/tsi/transport_security_interface.h )
s.files += %w( src/core/census/aggregation.h ) s.files += %w( src/core/census/aggregation.h )
s.files += %w( src/core/census/log.h ) s.files += %w( src/core/census/mlog.h )
s.files += %w( src/core/census/rpc_metric_id.h ) s.files += %w( src/core/census/rpc_metric_id.h )
s.files += %w( src/core/httpcli/httpcli_security_connector.c )
s.files += %w( src/core/security/base64.c )
s.files += %w( src/core/security/client_auth_filter.c )
s.files += %w( src/core/security/credentials.c )
s.files += %w( src/core/security/credentials_metadata.c )
s.files += %w( src/core/security/credentials_posix.c )
s.files += %w( src/core/security/credentials_win32.c )
s.files += %w( src/core/security/google_default_credentials.c )
s.files += %w( src/core/security/handshake.c )
s.files += %w( src/core/security/json_token.c )
s.files += %w( src/core/security/jwt_verifier.c )
s.files += %w( src/core/security/secure_endpoint.c )
s.files += %w( src/core/security/security_connector.c )
s.files += %w( src/core/security/security_context.c )
s.files += %w( src/core/security/server_auth_filter.c )
s.files += %w( src/core/security/server_secure_chttp2.c )
s.files += %w( src/core/surface/init_secure.c )
s.files += %w( src/core/surface/secure_channel_create.c )
s.files += %w( src/core/tsi/fake_transport_security.c )
s.files += %w( src/core/tsi/ssl_transport_security.c )
s.files += %w( src/core/tsi/transport_security.c )
s.files += %w( src/core/census/grpc_context.c ) s.files += %w( src/core/census/grpc_context.c )
s.files += %w( src/core/census/grpc_filter.c ) s.files += %w( src/core/census/grpc_filter.c )
s.files += %w( src/core/channel/channel_args.c ) s.files += %w( src/core/channel/channel_args.c )
@ -434,9 +412,30 @@ Gem::Specification.new do |s|
s.files += %w( src/core/transport/static_metadata.c ) s.files += %w( src/core/transport/static_metadata.c )
s.files += %w( src/core/transport/transport.c ) s.files += %w( src/core/transport/transport.c )
s.files += %w( src/core/transport/transport_op_string.c ) s.files += %w( src/core/transport/transport_op_string.c )
s.files += %w( src/core/httpcli/httpcli_security_connector.c )
s.files += %w( src/core/security/base64.c )
s.files += %w( src/core/security/client_auth_filter.c )
s.files += %w( src/core/security/credentials.c )
s.files += %w( src/core/security/credentials_metadata.c )
s.files += %w( src/core/security/credentials_posix.c )
s.files += %w( src/core/security/credentials_win32.c )
s.files += %w( src/core/security/google_default_credentials.c )
s.files += %w( src/core/security/handshake.c )
s.files += %w( src/core/security/json_token.c )
s.files += %w( src/core/security/jwt_verifier.c )
s.files += %w( src/core/security/secure_endpoint.c )
s.files += %w( src/core/security/security_connector.c )
s.files += %w( src/core/security/security_context.c )
s.files += %w( src/core/security/server_auth_filter.c )
s.files += %w( src/core/security/server_secure_chttp2.c )
s.files += %w( src/core/surface/init_secure.c )
s.files += %w( src/core/surface/secure_channel_create.c )
s.files += %w( src/core/tsi/fake_transport_security.c )
s.files += %w( src/core/tsi/ssl_transport_security.c )
s.files += %w( src/core/tsi/transport_security.c )
s.files += %w( src/core/census/context.c ) s.files += %w( src/core/census/context.c )
s.files += %w( src/core/census/initialize.c ) s.files += %w( src/core/census/initialize.c )
s.files += %w( src/core/census/log.c ) s.files += %w( src/core/census/mlog.c )
s.files += %w( src/core/census/operation.c ) s.files += %w( src/core/census/operation.c )
s.files += %w( src/core/census/placeholders.c ) s.files += %w( src/core/census/placeholders.c )
s.files += %w( src/core/census/tracing.c ) s.files += %w( src/core/census/tracing.c )

@ -272,6 +272,7 @@ namespace CallOpGenericRecvMessageHelper {
class DeserializeFunc { class DeserializeFunc {
public: public:
virtual Status Deserialize(grpc_byte_buffer* buf, int max_message_size) = 0; virtual Status Deserialize(grpc_byte_buffer* buf, int max_message_size) = 0;
virtual ~DeserializeFunc() {}
}; };
template <class R> template <class R>
@ -283,6 +284,8 @@ class DeserializeFuncType GRPC_FINAL : public DeserializeFunc {
return SerializationTraits<R>::Deserialize(buf, message_, max_message_size); return SerializationTraits<R>::Deserialize(buf, message_, max_message_size);
} }
~DeserializeFuncType() override {}
private: private:
R* message_; // Not a managed pointer because management is external to this R* message_; // Not a managed pointer because management is external to this
}; };

@ -95,6 +95,17 @@ class ChannelArguments {
friend class SecureChannelCredentials; friend class SecureChannelCredentials;
friend class testing::ChannelArgumentsTest; friend class testing::ChannelArgumentsTest;
/// Default pointer argument operations.
struct PointerVtableMembers {
static void* Copy(void* in) { return in; }
static void Destroy(void* in) {}
static int Compare(void* a, void* b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
};
// Returns empty string when it is not set. // Returns empty string when it is not set.
grpc::string GetSslTargetNameOverride() const; grpc::string GetSslTargetNameOverride() const;

@ -99,20 +99,6 @@
"include/grpc/grpc.h", "include/grpc/grpc.h",
"include/grpc/status.h", "include/grpc/status.h",
"include/grpc/census.h", "include/grpc/census.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h", "src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h", "src/core/channel/channel_stack.h",
@ -177,7 +163,6 @@
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -227,30 +212,23 @@
"src/core/transport/static_metadata.h", "src/core/transport/static_metadata.h",
"src/core/transport/transport.h", "src/core/transport/transport.h",
"src/core/transport/transport_impl.h", "src/core/transport/transport_impl.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
"src/core/security/handshake.h",
"src/core/security/json_token.h",
"src/core/security/jwt_verifier.h",
"src/core/security/secure_endpoint.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
"src/core/tsi/fake_transport_security.h",
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/grpc_context.c", "src/core/census/grpc_context.c",
"src/core/census/grpc_filter.c", "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c", "src/core/channel/channel_args.c",
@ -379,9 +357,30 @@
"src/core/transport/static_metadata.c", "src/core/transport/static_metadata.c",
"src/core/transport/transport.c", "src/core/transport/transport.c",
"src/core/transport/transport_op_string.c", "src/core/transport/transport_op_string.c",
"src/core/httpcli/httpcli_security_connector.c",
"src/core/security/base64.c",
"src/core/security/client_auth_filter.c",
"src/core/security/credentials.c",
"src/core/security/credentials_metadata.c",
"src/core/security/credentials_posix.c",
"src/core/security/credentials_win32.c",
"src/core/security/google_default_credentials.c",
"src/core/security/handshake.c",
"src/core/security/json_token.c",
"src/core/security/jwt_verifier.c",
"src/core/security/secure_endpoint.c",
"src/core/security/security_connector.c",
"src/core/security/security_context.c",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
"src/core/surface/init_secure.c",
"src/core/surface/secure_channel_create.c",
"src/core/tsi/fake_transport_security.c",
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/context.c", "src/core/census/context.c",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/tracing.c", "src/core/census/tracing.c",

@ -88,7 +88,7 @@
// include the name of the structure, which will be passed as the first // include the name of the structure, which will be passed as the first
// argument. E.g. cl_block_initialize() will initialize a cl_block. // argument. E.g. cl_block_initialize() will initialize a cl_block.
#include "src/core/census/log.h" #include "src/core/census/mlog.h"
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/atm.h> #include <grpc/support/atm.h>
#include <grpc/support/cpu.h> #include <grpc/support/cpu.h>

@ -31,8 +31,10 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_CENSUS_LOG_H /* A very fast in-memory log, optimized for multiple writers. */
#define GRPC_INTERNAL_CORE_CENSUS_LOG_H
#ifndef GRPC_INTERNAL_CORE_CENSUS_MLOG_H
#define GRPC_INTERNAL_CORE_CENSUS_MLOG_H
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h> #include <stddef.h>

@ -42,7 +42,7 @@
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#include "src/core/iomgr/timer_internal.h" #include "src/core/iomgr/timer.h"
#include "src/core/iomgr/iocp_windows.h" #include "src/core/iomgr/iocp_windows.h"
#include "src/core/iomgr/iomgr_internal.h" #include "src/core/iomgr/iomgr_internal.h"
#include "src/core/iomgr/socket_windows.h" #include "src/core/iomgr/socket_windows.h"

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -43,7 +43,7 @@
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#include "src/core/iomgr/iomgr_internal.h" #include "src/core/iomgr/iomgr_internal.h"
#include "src/core/iomgr/timer_internal.h" #include "src/core/iomgr/timer.h"
#include "src/core/support/string.h" #include "src/core/support/string.h"
static gpr_mu g_mu; static gpr_mu g_mu;

@ -42,7 +42,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include "src/core/iomgr/timer_internal.h"
#include "src/core/iomgr/fd_posix.h" #include "src/core/iomgr/fd_posix.h"
#include "src/core/iomgr/iomgr_internal.h" #include "src/core/iomgr/iomgr_internal.h"
#include "src/core/iomgr/socket_utils_posix.h" #include "src/core/iomgr/socket_utils_posix.h"
@ -274,16 +273,6 @@ void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL); grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
goto done; goto done;
} }
/* Check alarms - these are a global resource so we just ping
each time through on every pollset.
May update deadline to ensure timely wakeups.
TODO(ctiller): can this work be localized? */
if (grpc_timer_check(exec_ctx, now, &deadline)) {
GPR_TIMER_MARK("grpc_pollset_work.alarm_triggered", 0);
gpr_mu_unlock(&pollset->mu);
locked = 0;
goto done;
}
/* If we're shutting down then we don't execute any extended work */ /* If we're shutting down then we don't execute any extended work */
if (pollset->shutting_down) { if (pollset->shutting_down) {
GPR_TIMER_MARK("grpc_pollset_work.shutting_down", 0); GPR_TIMER_MARK("grpc_pollset_work.shutting_down", 0);

@ -142,6 +142,10 @@ int grpc_pollset_has_workers(grpc_pollset *pollset);
void grpc_remove_fd_from_all_epoll_sets(int fd); void grpc_remove_fd_from_all_epoll_sets(int fd);
/* override to allow tests to hook poll() usage */ /* override to allow tests to hook poll() usage */
/* NOTE: Any changes to grpc_poll_function must take place when the gRPC
is certainly not doing any polling anywhere.
Otherwise, there might be a race between changing the variable and actually
doing a polling operation */
typedef int (*grpc_poll_function_type)(struct pollfd *, nfds_t, int); typedef int (*grpc_poll_function_type)(struct pollfd *, nfds_t, int);
extern grpc_poll_function_type grpc_poll_function; extern grpc_poll_function_type grpc_poll_function;
extern grpc_wakeup_fd grpc_global_wakeup_fd; extern grpc_wakeup_fd grpc_global_wakeup_fd;

@ -38,7 +38,6 @@
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#include "src/core/iomgr/timer_internal.h"
#include "src/core/iomgr/iomgr_internal.h" #include "src/core/iomgr/iomgr_internal.h"
#include "src/core/iomgr/iocp_windows.h" #include "src/core/iomgr/iocp_windows.h"
#include "src/core/iomgr/pollset.h" #include "src/core/iomgr/pollset.h"
@ -136,9 +135,6 @@ void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
worker->kicked = 0; worker->kicked = 0;
worker->pollset = pollset; worker->pollset = pollset;
gpr_cv_init(&worker->cv); gpr_cv_init(&worker->cv);
if (grpc_timer_check(exec_ctx, now, &deadline)) {
goto done;
}
if (!pollset->kicked_without_pollers && !pollset->shutting_down) { if (!pollset->kicked_without_pollers && !pollset->shutting_down) {
if (g_active_poller == NULL) { if (g_active_poller == NULL) {
grpc_pollset_worker *next_worker; grpc_pollset_worker *next_worker;

@ -34,7 +34,6 @@
#include "src/core/iomgr/timer.h" #include "src/core/iomgr/timer.h"
#include "src/core/iomgr/timer_heap.h" #include "src/core/iomgr/timer_heap.h"
#include "src/core/iomgr/timer_internal.h"
#include "src/core/iomgr/time_averaged_stats.h" #include "src/core/iomgr/time_averaged_stats.h"
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/sync.h> #include <grpc/support/sync.h>
@ -336,7 +335,7 @@ static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now,
return (int)n; return (int)n;
} }
int grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now, bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
gpr_timespec *next) { gpr_timespec *next) {
GPR_ASSERT(now.clock_type == g_clock_type); GPR_ASSERT(now.clock_type == g_clock_type);
return run_some_expired_timers( return run_some_expired_timers(

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -86,4 +86,24 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
Requires: cancel() must happen after add() on a given timer */ Requires: cancel() must happen after add() on a given timer */
void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer); void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer);
/* iomgr internal api for dealing with timers */
/* Check for timers to be run, and run them.
Return true if timer callbacks were executed.
Drops drop_mu if it is non-null before executing callbacks.
If next is non-null, TRY to update *next with the next running timer
IF that timer occurs before *next current value.
*next is never guaranteed to be updated on any given execution; however,
with high probability at least one thread in the system will see an update
at any time slice. */
bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
gpr_timespec *next);
void grpc_timer_list_init(gpr_timespec now);
void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx);
/* the following must be implemented by each iomgr implementation */
void grpc_kick_poller(void);
#endif /* GRPC_INTERNAL_CORE_IOMGR_TIMER_H */ #endif /* GRPC_INTERNAL_CORE_IOMGR_TIMER_H */

@ -323,7 +323,20 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
break; break;
} }
first_loop = 0; first_loop = 0;
grpc_pollset_work(&exec_ctx, &cc->pollset, &worker, now, deadline); /* Check alarms - these are a global resource so we just ping
each time through on every pollset.
May update deadline to ensure timely wakeups.
TODO(ctiller): can this work be localized? */
gpr_timespec iteration_deadline = deadline;
if (grpc_timer_check(&exec_ctx, now, &iteration_deadline)) {
GPR_TIMER_MARK("alarm_triggered", 0);
gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
} else {
grpc_pollset_work(&exec_ctx, &cc->pollset, &worker, now,
iteration_deadline);
}
} }
GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret); GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
GRPC_CQ_INTERNAL_UNREF(cc, "next"); GRPC_CQ_INTERNAL_UNREF(cc, "next");
@ -427,7 +440,20 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
break; break;
} }
first_loop = 0; first_loop = 0;
grpc_pollset_work(&exec_ctx, &cc->pollset, &worker, now, deadline); /* Check alarms - these are a global resource so we just ping
each time through on every pollset.
May update deadline to ensure timely wakeups.
TODO(ctiller): can this work be localized? */
gpr_timespec iteration_deadline = deadline;
if (grpc_timer_check(&exec_ctx, now, &iteration_deadline)) {
GPR_TIMER_MARK("alarm_triggered", 0);
gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
} else {
grpc_pollset_work(&exec_ctx, &cc->pollset, &worker, now,
iteration_deadline);
}
del_plucker(cc, tag, &worker); del_plucker(cc, tag, &worker);
} }
done: done:

@ -124,18 +124,9 @@ void ChannelArguments::SetInt(const grpc::string& key, int value) {
} }
void ChannelArguments::SetPointer(const grpc::string& key, void* value) { void ChannelArguments::SetPointer(const grpc::string& key, void* value) {
struct VtableMembers {
static void* Copy(void* in) { return in; }
static void Destroy(void* in) {}
static int Compare(void* a, void* b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
};
static const grpc_arg_pointer_vtable vtable = { static const grpc_arg_pointer_vtable vtable = {
&VtableMembers::Copy, &VtableMembers::Destroy, &VtableMembers::Compare}; &PointerVtableMembers::Copy, &PointerVtableMembers::Destroy,
&PointerVtableMembers::Compare};
grpc_arg arg; grpc_arg arg;
arg.type = GRPC_ARG_POINTER; arg.type = GRPC_ARG_POINTER;
strings_.push_back(key); strings_.push_back(key);

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -71,7 +71,7 @@ namespace Grpc.Auth
/// <returns>The interceptor.</returns> /// <returns>The interceptor.</returns>
public static AsyncAuthInterceptor FromAccessToken(string accessToken) public static AsyncAuthInterceptor FromAccessToken(string accessToken)
{ {
Preconditions.CheckNotNull(accessToken); GrpcPreconditions.CheckNotNull(accessToken);
return new AsyncAuthInterceptor(async (context, metadata) => return new AsyncAuthInterceptor(async (context, metadata) =>
{ {
metadata.Add(CreateBearerTokenHeader(accessToken)); metadata.Add(CreateBearerTokenHeader(accessToken));

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -61,8 +61,8 @@ namespace Grpc.Core
/// </summary> /// </summary>
public AuthInterceptorContext(string serviceUrl, string methodName) public AuthInterceptorContext(string serviceUrl, string methodName)
{ {
this.serviceUrl = Preconditions.CheckNotNull(serviceUrl); this.serviceUrl = GrpcPreconditions.CheckNotNull(serviceUrl);
this.methodName = Preconditions.CheckNotNull(methodName); this.methodName = GrpcPreconditions.CheckNotNull(methodName);
} }
/// <summary> /// <summary>

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -87,7 +87,7 @@ namespace Grpc.Core
/// <param name="interceptor">authentication interceptor</param> /// <param name="interceptor">authentication interceptor</param>
public MetadataCredentials(AsyncAuthInterceptor interceptor) public MetadataCredentials(AsyncAuthInterceptor interceptor)
{ {
this.interceptor = Preconditions.CheckNotNull(interceptor); this.interceptor = GrpcPreconditions.CheckNotNull(interceptor);
} }
internal override CallCredentialsSafeHandle ToNativeCredentials() internal override CallCredentialsSafeHandle ToNativeCredentials()
@ -111,7 +111,7 @@ namespace Grpc.Core
/// <param name="credentials">credentials to compose</param> /// <param name="credentials">credentials to compose</param>
public CompositeCallCredentials(params CallCredentials[] credentials) public CompositeCallCredentials(params CallCredentials[] credentials)
{ {
Preconditions.CheckArgument(credentials.Length >= 2, "Composite credentials object can only be created from 2 or more credentials."); GrpcPreconditions.CheckArgument(credentials.Length >= 2, "Composite credentials object can only be created from 2 or more credentials.");
this.credentials = new List<CallCredentials>(credentials); this.credentials = new List<CallCredentials>(credentials);
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -85,11 +85,11 @@ namespace Grpc.Core
/// <param name="options">Call options.</param> /// <param name="options">Call options.</param>
public CallInvocationDetails(Channel channel, string method, string host, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller, CallOptions options) public CallInvocationDetails(Channel channel, string method, string host, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller, CallOptions options)
{ {
this.channel = Preconditions.CheckNotNull(channel, "channel"); this.channel = GrpcPreconditions.CheckNotNull(channel, "channel");
this.method = Preconditions.CheckNotNull(method, "method"); this.method = GrpcPreconditions.CheckNotNull(method, "method");
this.host = host; this.host = host;
this.requestMarshaller = Preconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); this.requestMarshaller = GrpcPreconditions.CheckNotNull(requestMarshaller, "requestMarshaller");
this.responseMarshaller = Preconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); this.responseMarshaller = GrpcPreconditions.CheckNotNull(responseMarshaller, "responseMarshaller");
this.options = options; this.options = options;
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -176,13 +176,13 @@ namespace Grpc.Core
{ {
if (propagationToken.Options.IsPropagateDeadline) if (propagationToken.Options.IsPropagateDeadline)
{ {
Preconditions.CheckArgument(!newOptions.deadline.HasValue, GrpcPreconditions.CheckArgument(!newOptions.deadline.HasValue,
"Cannot propagate deadline from parent call. The deadline has already been set explicitly."); "Cannot propagate deadline from parent call. The deadline has already been set explicitly.");
newOptions.deadline = propagationToken.ParentDeadline; newOptions.deadline = propagationToken.ParentDeadline;
} }
if (propagationToken.Options.IsPropagateCancellation) if (propagationToken.Options.IsPropagateCancellation)
{ {
Preconditions.CheckArgument(!newOptions.cancellationToken.CanBeCanceled, GrpcPreconditions.CheckArgument(!newOptions.cancellationToken.CanBeCanceled,
"Cannot propagate cancellation token from parent call. The cancellation token has already been set to a non-default value."); "Cannot propagate cancellation token from parent call. The cancellation token has already been set to a non-default value.");
newOptions.cancellationToken = propagationToken.ParentCancellationToken; newOptions.cancellationToken = propagationToken.ParentCancellationToken;
} }

@ -1,5 +1,5 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -68,7 +68,7 @@ namespace Grpc.Core
/// <param name="options">Channel options.</param> /// <param name="options">Channel options.</param>
public Channel(string target, ChannelCredentials credentials, IEnumerable<ChannelOption> options = null) public Channel(string target, ChannelCredentials credentials, IEnumerable<ChannelOption> options = null)
{ {
this.target = Preconditions.CheckNotNull(target, "target"); this.target = GrpcPreconditions.CheckNotNull(target, "target");
this.options = CreateOptionsDictionary(options); this.options = CreateOptionsDictionary(options);
EnsureUserAgentChannelOption(this.options); EnsureUserAgentChannelOption(this.options);
this.environment = GrpcEnvironment.AddRef(); this.environment = GrpcEnvironment.AddRef();
@ -117,7 +117,7 @@ namespace Grpc.Core
/// </summary> /// </summary>
public Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null) public Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null)
{ {
Preconditions.CheckArgument(lastObservedState != ChannelState.FatalFailure, GrpcPreconditions.CheckArgument(lastObservedState != ChannelState.FatalFailure,
"FatalFailure is a terminal state. No further state changes can occur."); "FatalFailure is a terminal state. No further state changes can occur.");
var tcs = new TaskCompletionSource<object>(); var tcs = new TaskCompletionSource<object>();
var deadlineTimespec = deadline.HasValue ? Timespec.FromDateTime(deadline.Value) : Timespec.InfFuture; var deadlineTimespec = deadline.HasValue ? Timespec.FromDateTime(deadline.Value) : Timespec.InfFuture;
@ -184,7 +184,7 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!shutdownRequested); GrpcPreconditions.CheckState(!shutdownRequested);
shutdownRequested = true; shutdownRequested = true;
} }
@ -221,7 +221,7 @@ namespace Grpc.Core
bool success = false; bool success = false;
handle.DangerousAddRef(ref success); handle.DangerousAddRef(ref success);
Preconditions.CheckState(success); GrpcPreconditions.CheckState(success);
} }
internal void RemoveCallReference(object call) internal void RemoveCallReference(object call)

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -183,9 +183,9 @@ namespace Grpc.Core
/// <param name="callCredentials">channelCredentials to compose</param> /// <param name="callCredentials">channelCredentials to compose</param>
public CompositeChannelCredentials(ChannelCredentials channelCredentials, CallCredentials callCredentials) public CompositeChannelCredentials(ChannelCredentials channelCredentials, CallCredentials callCredentials)
{ {
this.channelCredentials = Preconditions.CheckNotNull(channelCredentials); this.channelCredentials = GrpcPreconditions.CheckNotNull(channelCredentials);
this.callCredentials = Preconditions.CheckNotNull(callCredentials); this.callCredentials = GrpcPreconditions.CheckNotNull(callCredentials);
Preconditions.CheckArgument(channelCredentials.IsComposable, "Supplied channel credentials do not allow composition."); GrpcPreconditions.CheckArgument(channelCredentials.IsComposable, "Supplied channel credentials do not allow composition.");
} }
internal override ChannelCredentialsSafeHandle ToNativeCredentials() internal override ChannelCredentialsSafeHandle ToNativeCredentials()

@ -1,5 +1,5 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -73,8 +73,8 @@ namespace Grpc.Core
public ChannelOption(string name, string stringValue) public ChannelOption(string name, string stringValue)
{ {
this.type = OptionType.String; this.type = OptionType.String;
this.name = Preconditions.CheckNotNull(name, "name"); this.name = GrpcPreconditions.CheckNotNull(name, "name");
this.stringValue = Preconditions.CheckNotNull(stringValue, "stringValue"); this.stringValue = GrpcPreconditions.CheckNotNull(stringValue, "stringValue");
} }
/// <summary> /// <summary>
@ -85,7 +85,7 @@ namespace Grpc.Core
public ChannelOption(string name, int intValue) public ChannelOption(string name, int intValue)
{ {
this.type = OptionType.Integer; this.type = OptionType.Integer;
this.name = Preconditions.CheckNotNull(name, "name"); this.name = GrpcPreconditions.CheckNotNull(name, "name");
this.intValue = intValue; this.intValue = intValue;
} }
@ -118,7 +118,7 @@ namespace Grpc.Core
{ {
get get
{ {
Preconditions.CheckState(type == OptionType.Integer); GrpcPreconditions.CheckState(type == OptionType.Integer);
return intValue; return intValue;
} }
} }
@ -130,7 +130,7 @@ namespace Grpc.Core
{ {
get get
{ {
Preconditions.CheckState(type == OptionType.String); GrpcPreconditions.CheckState(type == OptionType.String);
return stringValue; return stringValue;
} }
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -68,7 +68,7 @@ namespace Grpc.Core
internal ContextPropagationToken(CallSafeHandle parentCall, DateTime deadline, CancellationToken cancellationToken, ContextPropagationOptions options) internal ContextPropagationToken(CallSafeHandle parentCall, DateTime deadline, CancellationToken cancellationToken, ContextPropagationOptions options)
{ {
this.parentCall = Preconditions.CheckNotNull(parentCall); this.parentCall = GrpcPreconditions.CheckNotNull(parentCall);
this.deadline = deadline; this.deadline = deadline;
this.cancellationToken = cancellationToken; this.cancellationToken = cancellationToken;
this.options = options ?? ContextPropagationOptions.Default; this.options = options ?? ContextPropagationOptions.Default;

@ -39,8 +39,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Interactive.Async">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll</HintPath> <HintPath>..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
@ -91,7 +90,6 @@
<Compile Include="Internal\AsyncCallBase.cs" /> <Compile Include="Internal\AsyncCallBase.cs" />
<Compile Include="Internal\AsyncCallServer.cs" /> <Compile Include="Internal\AsyncCallServer.cs" />
<Compile Include="Internal\AsyncCall.cs" /> <Compile Include="Internal\AsyncCall.cs" />
<Compile Include="Utils\Preconditions.cs" />
<Compile Include="Internal\ServerCredentialsSafeHandle.cs" /> <Compile Include="Internal\ServerCredentialsSafeHandle.cs" />
<Compile Include="ServerCredentials.cs" /> <Compile Include="ServerCredentials.cs" />
<Compile Include="Metadata.cs" /> <Compile Include="Metadata.cs" />
@ -130,6 +128,7 @@
<Compile Include="Profiling\IProfiler.cs" /> <Compile Include="Profiling\IProfiler.cs" />
<Compile Include="Profiling\Profilers.cs" /> <Compile Include="Profiling\Profilers.cs" />
<Compile Include="Internal\DefaultSslRootsOverride.cs" /> <Compile Include="Internal\DefaultSslRootsOverride.cs" />
<Compile Include="Utils\GrpcPreconditions.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Grpc.Core.nuspec" /> <None Include="Grpc.Core.nuspec" />

@ -83,7 +83,7 @@ namespace Grpc.Core
{ {
lock (staticLock) lock (staticLock)
{ {
Preconditions.CheckState(refCount > 0); GrpcPreconditions.CheckState(refCount > 0);
refCount--; refCount--;
if (refCount == 0) if (refCount == 0)
{ {
@ -118,7 +118,7 @@ namespace Grpc.Core
/// </summary> /// </summary>
public static void SetLogger(ILogger customLogger) public static void SetLogger(ILogger customLogger)
{ {
Preconditions.CheckNotNull(customLogger, "customLogger"); GrpcPreconditions.CheckNotNull(customLogger, "customLogger");
logger = customLogger; logger = customLogger;
} }

@ -99,7 +99,7 @@ namespace Grpc.Core.Internal
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!started); GrpcPreconditions.CheckState(!started);
started = true; started = true;
Initialize(cq); Initialize(cq);
@ -141,7 +141,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!started); GrpcPreconditions.CheckState(!started);
started = true; started = true;
Initialize(environment.CompletionQueue); Initialize(environment.CompletionQueue);
@ -168,7 +168,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!started); GrpcPreconditions.CheckState(!started);
started = true; started = true;
Initialize(environment.CompletionQueue); Initialize(environment.CompletionQueue);
@ -192,7 +192,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!started); GrpcPreconditions.CheckState(!started);
started = true; started = true;
Initialize(environment.CompletionQueue); Initialize(environment.CompletionQueue);
@ -217,7 +217,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!started); GrpcPreconditions.CheckState(!started);
started = true; started = true;
Initialize(environment.CompletionQueue); Initialize(environment.CompletionQueue);
@ -257,7 +257,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
CheckSendingAllowed(); CheckSendingAllowed();
call.StartSendCloseFromClient(HandleHalfclosed); call.StartSendCloseFromClient(HandleHalfclosed);
@ -297,7 +297,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(finishedStatus.HasValue, "Status can only be accessed once the call has finished."); GrpcPreconditions.CheckState(finishedStatus.HasValue, "Status can only be accessed once the call has finished.");
return finishedStatus.Value.Status; return finishedStatus.Value.Status;
} }
} }
@ -310,7 +310,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(finishedStatus.HasValue, "Trailers can only be accessed once the call has finished."); GrpcPreconditions.CheckState(finishedStatus.HasValue, "Trailers can only be accessed once the call has finished.");
return finishedStatus.Value.Trailers; return finishedStatus.Value.Trailers;
} }
} }

@ -79,9 +79,9 @@ namespace Grpc.Core.Internal
public AsyncCallBase(Func<TWrite, byte[]> serializer, Func<byte[], TRead> deserializer, GrpcEnvironment environment) public AsyncCallBase(Func<TWrite, byte[]> serializer, Func<byte[], TRead> deserializer, GrpcEnvironment environment)
{ {
this.serializer = Preconditions.CheckNotNull(serializer); this.serializer = GrpcPreconditions.CheckNotNull(serializer);
this.deserializer = Preconditions.CheckNotNull(deserializer); this.deserializer = GrpcPreconditions.CheckNotNull(deserializer);
this.environment = Preconditions.CheckNotNull(environment); this.environment = GrpcPreconditions.CheckNotNull(environment);
} }
/// <summary> /// <summary>
@ -91,7 +91,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(started); GrpcPreconditions.CheckState(started);
cancelRequested = true; cancelRequested = true;
if (!disposed) if (!disposed)
@ -135,7 +135,7 @@ namespace Grpc.Core.Internal
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
CheckSendingAllowed(); CheckSendingAllowed();
call.StartSendMessage(HandleSendFinished, payload, writeFlags, !initialMetadataSent); call.StartSendMessage(HandleSendFinished, payload, writeFlags, !initialMetadataSent);
@ -154,7 +154,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
CheckReadingAllowed(); CheckReadingAllowed();
call.StartReceiveMessage(HandleReadFinished); call.StartReceiveMessage(HandleReadFinished);
@ -204,22 +204,22 @@ namespace Grpc.Core.Internal
protected void CheckSendingAllowed() protected void CheckSendingAllowed()
{ {
Preconditions.CheckState(started); GrpcPreconditions.CheckState(started);
CheckNotCancelled(); CheckNotCancelled();
Preconditions.CheckState(!disposed); GrpcPreconditions.CheckState(!disposed);
Preconditions.CheckState(!halfcloseRequested, "Already halfclosed."); GrpcPreconditions.CheckState(!halfcloseRequested, "Already halfclosed.");
Preconditions.CheckState(!finished, "Already finished."); GrpcPreconditions.CheckState(!finished, "Already finished.");
Preconditions.CheckState(sendCompletionDelegate == null, "Only one write can be pending at a time"); GrpcPreconditions.CheckState(sendCompletionDelegate == null, "Only one write can be pending at a time");
} }
protected virtual void CheckReadingAllowed() protected virtual void CheckReadingAllowed()
{ {
Preconditions.CheckState(started); GrpcPreconditions.CheckState(started);
Preconditions.CheckState(!disposed); GrpcPreconditions.CheckState(!disposed);
Preconditions.CheckState(!readingDone, "Stream has already been closed."); GrpcPreconditions.CheckState(!readingDone, "Stream has already been closed.");
Preconditions.CheckState(readCompletionDelegate == null, "Only one read can be pending at a time"); GrpcPreconditions.CheckState(readCompletionDelegate == null, "Only one read can be pending at a time");
} }
protected void CheckNotCancelled() protected void CheckNotCancelled()

@ -53,7 +53,7 @@ namespace Grpc.Core.Internal
public AsyncCallServer(Func<TResponse, byte[]> serializer, Func<byte[], TRequest> deserializer, GrpcEnvironment environment, Server server) : base(serializer, deserializer, environment) public AsyncCallServer(Func<TResponse, byte[]> serializer, Func<byte[], TRequest> deserializer, GrpcEnvironment environment, Server server) : base(serializer, deserializer, environment)
{ {
this.server = Preconditions.CheckNotNull(server); this.server = GrpcPreconditions.CheckNotNull(server);
} }
public void Initialize(CallSafeHandle call) public void Initialize(CallSafeHandle call)
@ -71,7 +71,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(call); GrpcPreconditions.CheckNotNull(call);
started = true; started = true;
@ -108,14 +108,14 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(headers, "metadata"); GrpcPreconditions.CheckNotNull(headers, "metadata");
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
Preconditions.CheckState(!initialMetadataSent, "Response headers can only be sent once per call."); GrpcPreconditions.CheckState(!initialMetadataSent, "Response headers can only be sent once per call.");
Preconditions.CheckState(streamingWritesCounter == 0, "Response headers can only be sent before the first write starts."); GrpcPreconditions.CheckState(streamingWritesCounter == 0, "Response headers can only be sent before the first write starts.");
CheckSendingAllowed(); CheckSendingAllowed();
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
using (var metadataArray = MetadataArraySafeHandle.Create(headers)) using (var metadataArray = MetadataArraySafeHandle.Create(headers))
{ {
@ -136,7 +136,7 @@ namespace Grpc.Core.Internal
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null");
CheckSendingAllowed(); CheckSendingAllowed();
using (var metadataArray = MetadataArraySafeHandle.Create(trailers)) using (var metadataArray = MetadataArraySafeHandle.Create(trailers))
@ -177,7 +177,7 @@ namespace Grpc.Core.Internal
protected override void CheckReadingAllowed() protected override void CheckReadingAllowed()
{ {
base.CheckReadingAllowed(); base.CheckReadingAllowed();
Preconditions.CheckArgument(!cancelRequested); GrpcPreconditions.CheckArgument(!cancelRequested);
} }
protected override void OnAfterReleaseResources() protected override void OnAfterReleaseResources()

@ -101,7 +101,7 @@ namespace Grpc.Core.Internal
{ {
bool success = false; bool success = false;
shutdownRefcount.IncrementIfNonzero(ref success); shutdownRefcount.IncrementIfNonzero(ref success);
Preconditions.CheckState(success, "Shutdown has already been called"); GrpcPreconditions.CheckState(success, "Shutdown has already been called");
} }
private void EndOp() private void EndOp()

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -59,7 +59,7 @@ namespace Grpc.Core.Internal
public void Register(IntPtr key, OpCompletionDelegate callback) public void Register(IntPtr key, OpCompletionDelegate callback)
{ {
environment.DebugStats.PendingBatchCompletions.Increment(); environment.DebugStats.PendingBatchCompletions.Increment();
Preconditions.CheckState(dict.TryAdd(key, callback)); GrpcPreconditions.CheckState(dict.TryAdd(key, callback));
} }
public void RegisterBatchCompletion(BatchContextSafeHandle ctx, BatchCompletionDelegate callback) public void RegisterBatchCompletion(BatchContextSafeHandle ctx, BatchCompletionDelegate callback)
@ -71,7 +71,7 @@ namespace Grpc.Core.Internal
public OpCompletionDelegate Extract(IntPtr key) public OpCompletionDelegate Extract(IntPtr key)
{ {
OpCompletionDelegate value; OpCompletionDelegate value;
Preconditions.CheckState(dict.TryRemove(key, out value)); GrpcPreconditions.CheckState(dict.TryRemove(key, out value));
environment.DebugStats.PendingBatchCompletions.Decrement(); environment.DebugStats.PendingBatchCompletions.Decrement();
return value; return value;
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -72,7 +72,7 @@ namespace Grpc.Core.Internal
/// </summary> /// </summary>
public static void CheckOk(this GRPCCallError callError) public static void CheckOk(this GRPCCallError callError)
{ {
Preconditions.CheckState(callError == GRPCCallError.OK, "Call error: " + callError); GrpcPreconditions.CheckState(callError == GRPCCallError.OK, "Call error: " + callError);
} }
} }

@ -53,7 +53,7 @@ namespace Grpc.Core.Internal
public NativeMetadataCredentialsPlugin(AsyncAuthInterceptor interceptor) public NativeMetadataCredentialsPlugin(AsyncAuthInterceptor interceptor)
{ {
this.interceptor = Preconditions.CheckNotNull(interceptor, "interceptor"); this.interceptor = GrpcPreconditions.CheckNotNull(interceptor, "interceptor");
this.nativeInterceptor = NativeMetadataInterceptorHandler; this.nativeInterceptor = NativeMetadataInterceptorHandler;
// Make sure the callback doesn't get garbage collected until it is destroyed. // Make sure the callback doesn't get garbage collected until it is destroyed.

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -78,10 +78,10 @@ namespace Grpc.Core.Internal
var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken);
try try
{ {
Preconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false));
var request = requestStream.Current; var request = requestStream.Current;
// TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated.
Preconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); GrpcPreconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false));
var result = await handler(request, context).ConfigureAwait(false); var result = await handler(request, context).ConfigureAwait(false);
status = context.Status; status = context.Status;
await responseStream.WriteAsync(result).ConfigureAwait(false); await responseStream.WriteAsync(result).ConfigureAwait(false);
@ -134,10 +134,10 @@ namespace Grpc.Core.Internal
var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken);
try try
{ {
Preconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false));
var request = requestStream.Current; var request = requestStream.Current;
// TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated.
Preconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); GrpcPreconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false));
await handler(request, responseStream, context).ConfigureAwait(false); await handler(request, responseStream, context).ConfigureAwait(false);
status = context.Status; status = context.Status;
} }

@ -49,7 +49,7 @@ namespace Grpc.Core.Internal
public static ServerCredentialsSafeHandle CreateSslCredentials(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, bool forceClientAuth) public static ServerCredentialsSafeHandle CreateSslCredentials(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, bool forceClientAuth)
{ {
Preconditions.CheckArgument(keyCertPairCertChainArray.Length == keyCertPairPrivateKeyArray.Length); GrpcPreconditions.CheckArgument(keyCertPairCertChainArray.Length == keyCertPairPrivateKeyArray.Length);
return Native.grpcsharp_ssl_server_credentials_create(pemRootCerts, return Native.grpcsharp_ssl_server_credentials_create(pemRootCerts,
keyCertPairCertChainArray, keyCertPairPrivateKeyArray, keyCertPairCertChainArray, keyCertPairPrivateKeyArray,
new UIntPtr((ulong)keyCertPairCertChainArray.Length), new UIntPtr((ulong)keyCertPairCertChainArray.Length),

@ -141,8 +141,8 @@ namespace Grpc.Core.Internal
/// </summary> /// </summary>
public DateTime ToDateTime() public DateTime ToDateTime()
{ {
Preconditions.CheckState(tv_nsec >= 0 && tv_nsec < NanosPerSecond); GrpcPreconditions.CheckState(tv_nsec >= 0 && tv_nsec < NanosPerSecond);
Preconditions.CheckState(clock_type == GPRClockType.Realtime); GrpcPreconditions.CheckState(clock_type == GPRClockType.Realtime);
// fast path for InfFuture // fast path for InfFuture
if (this.Equals(InfFuture)) if (this.Equals(InfFuture))
@ -195,7 +195,7 @@ namespace Grpc.Core.Internal
return Timespec.InfPast; return Timespec.InfPast;
} }
Preconditions.CheckArgument(dateTime.Kind == DateTimeKind.Utc, "dateTime needs of kind DateTimeKind.Utc or be equal to DateTime.MaxValue or DateTime.MinValue."); GrpcPreconditions.CheckArgument(dateTime.Kind == DateTimeKind.Utc, "dateTime needs of kind DateTimeKind.Utc or be equal to DateTime.MaxValue or DateTime.MinValue.");
try try
{ {

@ -65,7 +65,7 @@ namespace Grpc.Core.Internal
public UnmanagedLibrary(string libraryPath) public UnmanagedLibrary(string libraryPath)
{ {
this.libraryPath = Preconditions.CheckNotNull(libraryPath); this.libraryPath = GrpcPreconditions.CheckNotNull(libraryPath);
if (!File.Exists(this.libraryPath)) if (!File.Exists(this.libraryPath))
{ {

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -54,8 +54,8 @@ namespace Grpc.Core
/// <param name="privateKey">PEM encoded private key.</param> /// <param name="privateKey">PEM encoded private key.</param>
public KeyCertificatePair(string certificateChain, string privateKey) public KeyCertificatePair(string certificateChain, string privateKey)
{ {
this.certificateChain = Preconditions.CheckNotNull(certificateChain, "certificateChain"); this.certificateChain = GrpcPreconditions.CheckNotNull(certificateChain, "certificateChain");
this.privateKey = Preconditions.CheckNotNull(privateKey, "privateKey"); this.privateKey = GrpcPreconditions.CheckNotNull(privateKey, "privateKey");
} }
/// <summary> /// <summary>

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -51,8 +51,8 @@ namespace Grpc.Core
/// <param name="deserializer">Function that will be used to deserialize messages.</param> /// <param name="deserializer">Function that will be used to deserialize messages.</param>
public Marshaller(Func<T, byte[]> serializer, Func<byte[], T> deserializer) public Marshaller(Func<T, byte[]> serializer, Func<byte[], T> deserializer)
{ {
this.serializer = Preconditions.CheckNotNull(serializer, "serializer"); this.serializer = GrpcPreconditions.CheckNotNull(serializer, "serializer");
this.deserializer = Preconditions.CheckNotNull(deserializer, "deserializer"); this.deserializer = GrpcPreconditions.CheckNotNull(deserializer, "deserializer");
} }
/// <summary> /// <summary>

@ -1,5 +1,5 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -179,7 +179,7 @@ namespace Grpc.Core
private void CheckWriteable() private void CheckWriteable()
{ {
Preconditions.CheckState(!readOnly, "Object is read only"); GrpcPreconditions.CheckState(!readOnly, "Object is read only");
} }
#endregion #endregion
@ -211,10 +211,10 @@ namespace Grpc.Core
public Entry(string key, byte[] valueBytes) public Entry(string key, byte[] valueBytes)
{ {
this.key = NormalizeKey(key); this.key = NormalizeKey(key);
Preconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix), GrpcPreconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix),
"Key for binary valued metadata entry needs to have suffix indicating binary value."); "Key for binary valued metadata entry needs to have suffix indicating binary value.");
this.value = null; this.value = null;
Preconditions.CheckNotNull(valueBytes, "valueBytes"); GrpcPreconditions.CheckNotNull(valueBytes, "valueBytes");
this.valueBytes = new byte[valueBytes.Length]; this.valueBytes = new byte[valueBytes.Length];
Buffer.BlockCopy(valueBytes, 0, this.valueBytes, 0, valueBytes.Length); // defensive copy to guarantee immutability Buffer.BlockCopy(valueBytes, 0, this.valueBytes, 0, valueBytes.Length); // defensive copy to guarantee immutability
} }
@ -227,9 +227,9 @@ namespace Grpc.Core
public Entry(string key, string value) public Entry(string key, string value)
{ {
this.key = NormalizeKey(key); this.key = NormalizeKey(key);
Preconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix), GrpcPreconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix),
"Key for ASCII valued metadata entry cannot have suffix indicating binary value."); "Key for ASCII valued metadata entry cannot have suffix indicating binary value.");
this.value = Preconditions.CheckNotNull(value, "value"); this.value = GrpcPreconditions.CheckNotNull(value, "value");
this.valueBytes = null; this.valueBytes = null;
} }
@ -270,7 +270,7 @@ namespace Grpc.Core
{ {
get get
{ {
Preconditions.CheckState(!IsBinary, "Cannot access string value of a binary metadata entry"); GrpcPreconditions.CheckState(!IsBinary, "Cannot access string value of a binary metadata entry");
return value ?? Encoding.GetString(valueBytes); return value ?? Encoding.GetString(valueBytes);
} }
} }
@ -323,8 +323,8 @@ namespace Grpc.Core
private static string NormalizeKey(string key) private static string NormalizeKey(string key)
{ {
var normalized = Preconditions.CheckNotNull(key, "key").ToLower(CultureInfo.InvariantCulture); var normalized = GrpcPreconditions.CheckNotNull(key, "key").ToLower(CultureInfo.InvariantCulture);
Preconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized), GrpcPreconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized),
"Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens."); "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens.");
return normalized; return normalized;
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -106,10 +106,10 @@ namespace Grpc.Core
public Method(MethodType type, string serviceName, string name, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller) public Method(MethodType type, string serviceName, string name, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller)
{ {
this.type = type; this.type = type;
this.serviceName = Preconditions.CheckNotNull(serviceName, "serviceName"); this.serviceName = GrpcPreconditions.CheckNotNull(serviceName, "serviceName");
this.name = Preconditions.CheckNotNull(name, "name"); this.name = GrpcPreconditions.CheckNotNull(name, "name");
this.requestMarshaller = Preconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); this.requestMarshaller = GrpcPreconditions.CheckNotNull(requestMarshaller, "requestMarshaller");
this.responseMarshaller = Preconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); this.responseMarshaller = GrpcPreconditions.CheckNotNull(responseMarshaller, "responseMarshaller");
this.fullName = GetFullName(serviceName, name); this.fullName = GetFullName(serviceName, name);
} }

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -125,7 +125,7 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!startRequested); GrpcPreconditions.CheckState(!startRequested);
startRequested = true; startRequested = true;
handle.Start(); handle.Start();
@ -142,8 +142,8 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(startRequested); GrpcPreconditions.CheckState(startRequested);
Preconditions.CheckState(!shutdownRequested); GrpcPreconditions.CheckState(!shutdownRequested);
shutdownRequested = true; shutdownRequested = true;
} }
@ -162,8 +162,8 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(startRequested); GrpcPreconditions.CheckState(startRequested);
Preconditions.CheckState(!shutdownRequested); GrpcPreconditions.CheckState(!shutdownRequested);
shutdownRequested = true; shutdownRequested = true;
} }
@ -181,7 +181,7 @@ namespace Grpc.Core
bool success = false; bool success = false;
handle.DangerousAddRef(ref success); handle.DangerousAddRef(ref success);
Preconditions.CheckState(success); GrpcPreconditions.CheckState(success);
} }
internal void RemoveCallReference(object call) internal void RemoveCallReference(object call)
@ -197,7 +197,7 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckState(!startRequested); GrpcPreconditions.CheckState(!startRequested);
foreach (var entry in serviceDefinition.CallHandlers) foreach (var entry in serviceDefinition.CallHandlers)
{ {
callHandlers.Add(entry.Key, entry.Value); callHandlers.Add(entry.Key, entry.Value);
@ -213,8 +213,8 @@ namespace Grpc.Core
{ {
lock (myLock) lock (myLock)
{ {
Preconditions.CheckNotNull(serverPort.Credentials, "serverPort"); GrpcPreconditions.CheckNotNull(serverPort.Credentials, "serverPort");
Preconditions.CheckState(!startRequested); GrpcPreconditions.CheckState(!startRequested);
var address = string.Format("{0}:{1}", serverPort.Host, serverPort.Port); var address = string.Format("{0}:{1}", serverPort.Host, serverPort.Port);
int boundPort; int boundPort;
using (var nativeCredentials = serverPort.Credentials.ToNativeCredentials()) using (var nativeCredentials = serverPort.Credentials.ToNativeCredentials())

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -90,11 +90,11 @@ namespace Grpc.Core
public SslServerCredentials(IEnumerable<KeyCertificatePair> keyCertificatePairs, string rootCertificates, bool forceClientAuth) public SslServerCredentials(IEnumerable<KeyCertificatePair> keyCertificatePairs, string rootCertificates, bool forceClientAuth)
{ {
this.keyCertificatePairs = new List<KeyCertificatePair>(keyCertificatePairs).AsReadOnly(); this.keyCertificatePairs = new List<KeyCertificatePair>(keyCertificatePairs).AsReadOnly();
Preconditions.CheckArgument(this.keyCertificatePairs.Count > 0, GrpcPreconditions.CheckArgument(this.keyCertificatePairs.Count > 0,
"At least one KeyCertificatePair needs to be provided."); "At least one KeyCertificatePair needs to be provided.");
if (forceClientAuth) if (forceClientAuth)
{ {
Preconditions.CheckNotNull(rootCertificates, GrpcPreconditions.CheckNotNull(rootCertificates,
"Cannot force client authentication unless you provide rootCertificates."); "Cannot force client authentication unless you provide rootCertificates.");
} }
this.rootCertificates = rootCertificates; this.rootCertificates = rootCertificates;

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -62,9 +62,9 @@ namespace Grpc.Core
/// <param name="credentials">credentials to use to secure this port.</param> /// <param name="credentials">credentials to use to secure this port.</param>
public ServerPort(string host, int port, ServerCredentials credentials) public ServerPort(string host, int port, ServerCredentials credentials)
{ {
this.host = Preconditions.CheckNotNull(host, "host"); this.host = GrpcPreconditions.CheckNotNull(host, "host");
this.port = port; this.port = port;
this.credentials = Preconditions.CheckNotNull(credentials, "credentials"); this.credentials = GrpcPreconditions.CheckNotNull(credentials, "credentials");
} }
/// <summary> /// <summary>

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -38,7 +38,7 @@ namespace Grpc.Core.Utils
/// <summary> /// <summary>
/// Utility methods to simplify checking preconditions in the code. /// Utility methods to simplify checking preconditions in the code.
/// </summary> /// </summary>
public static class Preconditions public static class GrpcPreconditions
{ {
/// <summary> /// <summary>
/// Throws <see cref="ArgumentException"/> if condition is false. /// Throws <see cref="ArgumentException"/> if condition is false.

@ -1,5 +1,5 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -127,8 +127,8 @@ namespace Grpc.HealthCheck
{ {
public Key(string host, string service) public Key(string host, string service)
{ {
this.Host = Preconditions.CheckNotNull(host); this.Host = GrpcPreconditions.CheckNotNull(host);
this.Service = Preconditions.CheckNotNull(service); this.Service = GrpcPreconditions.CheckNotNull(service);
} }
readonly string Host; readonly string Host;

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -58,7 +58,7 @@ namespace Grpc.IntegrationTesting
public static IClientRunner CreateStarted(ClientConfig config) public static IClientRunner CreateStarted(ClientConfig config)
{ {
string target = config.ServerTargets.Single(); string target = config.ServerTargets.Single();
Grpc.Core.Utils.Preconditions.CheckArgument(config.LoadParams.LoadCase == LoadParams.LoadOneofCase.ClosedLoop); GrpcPreconditions.CheckArgument(config.LoadParams.LoadCase == LoadParams.LoadOneofCase.ClosedLoop);
var credentials = config.SecurityParams != null ? TestCredentials.CreateSslCredentials() : ChannelCredentials.Insecure; var credentials = config.SecurityParams != null ? TestCredentials.CreateSslCredentials() : ChannelCredentials.Insecure;
var channel = new Channel(target, credentials); var channel = new Channel(target, credentials);
@ -95,7 +95,7 @@ namespace Grpc.IntegrationTesting
public SyncUnaryClientRunner(Channel channel, int payloadSize, HistogramParams histogramParams) public SyncUnaryClientRunner(Channel channel, int payloadSize, HistogramParams histogramParams)
{ {
this.channel = Grpc.Core.Utils.Preconditions.CheckNotNull(channel); this.channel = GrpcPreconditions.CheckNotNull(channel);
this.payloadSize = payloadSize; this.payloadSize = payloadSize;
this.histogram = new Histogram(histogramParams.Resolution, histogramParams.MaxPossible); this.histogram = new Histogram(histogramParams.Resolution, histogramParams.MaxPossible);

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -66,8 +66,8 @@ namespace Grpc.IntegrationTesting
public Histogram(double resolution, double maxPossible) public Histogram(double resolution, double maxPossible)
{ {
Grpc.Core.Utils.Preconditions.CheckArgument(resolution > 0); GrpcPreconditions.CheckArgument(resolution > 0);
Grpc.Core.Utils.Preconditions.CheckArgument(maxPossible > 0); GrpcPreconditions.CheckArgument(maxPossible > 0);
this.maxPossible = maxPossible; this.maxPossible = maxPossible;
this.multiplier = 1.0 + resolution; this.multiplier = 1.0 + resolution;
this.oneOnLogMultiplier = 1.0 / Math.Log(1.0 + resolution); this.oneOnLogMultiplier = 1.0 / Math.Log(1.0 + resolution);

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -57,7 +57,7 @@ namespace Grpc.IntegrationTesting
/// </summary> /// </summary>
public static IServerRunner CreateStarted(ServerConfig config) public static IServerRunner CreateStarted(ServerConfig config)
{ {
Grpc.Core.Utils.Preconditions.CheckArgument(config.ServerType == ServerType.ASYNC_SERVER); GrpcPreconditions.CheckArgument(config.ServerType == ServerType.ASYNC_SERVER);
var credentials = config.SecurityParams != null ? TestCredentials.CreateSslServerCredentials() : ServerCredentials.Insecure; var credentials = config.SecurityParams != null ? TestCredentials.CreateSslServerCredentials() : ServerCredentials.Insecure;
// TODO: qps_driver needs to setup payload properly... // TODO: qps_driver needs to setup payload properly...
@ -83,7 +83,7 @@ namespace Grpc.IntegrationTesting
public ServerRunnerImpl(Server server) public ServerRunnerImpl(Server server)
{ {
this.server = Grpc.Core.Utils.Preconditions.CheckNotNull(server); this.server = GrpcPreconditions.CheckNotNull(server);
} }
public int BoundPort public int BoundPort

@ -1,6 +1,6 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2015, Google Inc. // Copyright 2015-2016, Google Inc.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
@ -49,7 +49,7 @@ namespace Grpc.Testing
{ {
public async Task RunServer(IAsyncStreamReader<ServerArgs> requestStream, IServerStreamWriter<ServerStatus> responseStream, ServerCallContext context) public async Task RunServer(IAsyncStreamReader<ServerArgs> requestStream, IServerStreamWriter<ServerStatus> responseStream, ServerCallContext context)
{ {
Grpc.Core.Utils.Preconditions.CheckState(await requestStream.MoveNext()); GrpcPreconditions.CheckState(await requestStream.MoveNext());
var serverConfig = requestStream.Current.Setup; var serverConfig = requestStream.Current.Setup;
var runner = ServerRunners.CreateStarted(serverConfig); var runner = ServerRunners.CreateStarted(serverConfig);
@ -73,7 +73,7 @@ namespace Grpc.Testing
public async Task RunClient(IAsyncStreamReader<ClientArgs> requestStream, IServerStreamWriter<ClientStatus> responseStream, ServerCallContext context) public async Task RunClient(IAsyncStreamReader<ClientArgs> requestStream, IServerStreamWriter<ClientStatus> responseStream, ServerCallContext context)
{ {
Grpc.Core.Utils.Preconditions.CheckState(await requestStream.MoveNext()); GrpcPreconditions.CheckState(await requestStream.MoveNext());
var clientConfig = requestStream.Current.Setup; var clientConfig = requestStream.Current.Setup;
var runner = ClientRunners.CreateStarted(clientConfig); var runner = ClientRunners.CreateStarted(clientConfig);

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -187,7 +187,8 @@ NAN_METHOD(PluginCallback) {
shared_ptr<Resources> resources(new Resources); shared_ptr<Resources> resources(new Resources);
grpc_status_code code = static_cast<grpc_status_code>( grpc_status_code code = static_cast<grpc_status_code>(
Nan::To<uint32_t>(info[0]).FromJust()); Nan::To<uint32_t>(info[0]).FromJust());
char *details = *Utf8String(info[1]); Utf8String details_utf8_str(info[1]);
char *details = *details_utf8_str;
grpc_metadata_array array; grpc_metadata_array array;
if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(), if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(),
&array, resources)){ &array, resources)){

@ -237,7 +237,8 @@ NAN_METHOD(MetadataKeyIsLegal) {
"headerKeyIsLegal's argument must be a string"); "headerKeyIsLegal's argument must be a string");
} }
Local<String> key = Nan::To<String>(info[0]).ToLocalChecked(); Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
char *key_str = *Nan::Utf8String(key); Nan::Utf8String key_utf8_str(key);
char *key_str = *key_utf8_str;
info.GetReturnValue().Set(static_cast<bool>( info.GetReturnValue().Set(static_cast<bool>(
grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length())))); grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length()))));
} }
@ -248,7 +249,8 @@ NAN_METHOD(MetadataNonbinValueIsLegal) {
"metadataNonbinValueIsLegal's argument must be a string"); "metadataNonbinValueIsLegal's argument must be a string");
} }
Local<String> value = Nan::To<String>(info[0]).ToLocalChecked(); Local<String> value = Nan::To<String>(info[0]).ToLocalChecked();
char *value_str = *Nan::Utf8String(value); Nan::Utf8String value_utf8_str(value);
char *value_str = *value_utf8_str;
info.GetReturnValue().Set(static_cast<bool>( info.GetReturnValue().Set(static_cast<bool>(
grpc_header_nonbin_value_is_legal( grpc_header_nonbin_value_is_legal(
value_str, static_cast<size_t>(value->Length())))); value_str, static_cast<size_t>(value->Length()))));
@ -260,7 +262,8 @@ NAN_METHOD(MetadataKeyIsBinary) {
"metadataKeyIsLegal's argument must be a string"); "metadataKeyIsLegal's argument must be a string");
} }
Local<String> key = Nan::To<String>(info[0]).ToLocalChecked(); Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
char *key_str = *Nan::Utf8String(key); Nan::Utf8String key_utf8_str(key);
char *key_str = *key_utf8_str;
info.GetReturnValue().Set(static_cast<bool>( info.GetReturnValue().Set(static_cast<bool>(
grpc_is_binary_header(key_str, static_cast<size_t>(key->Length())))); grpc_is_binary_header(key_str, static_cast<size_t>(key->Length()))));
} }

@ -56,17 +56,18 @@ var grpc = require('./src/grpc_extension');
/** /**
* Load a gRPC object from an existing ProtoBuf.Reflect object. * Load a gRPC object from an existing ProtoBuf.Reflect object.
* @param {ProtoBuf.Reflect.Namespace} value The ProtoBuf object to load. * @param {ProtoBuf.Reflect.Namespace} value The ProtoBuf object to load.
* @param {Object=} options Options to apply to the loaded object
* @return {Object<string, *>} The resulting gRPC object * @return {Object<string, *>} The resulting gRPC object
*/ */
exports.loadObject = function loadObject(value) { exports.loadObject = function loadObject(value, options) {
var result = {}; var result = {};
if (value.className === 'Namespace') { if (value.className === 'Namespace') {
_.each(value.children, function(child) { _.each(value.children, function(child) {
result[child.name] = loadObject(child); result[child.name] = loadObject(child, options);
}); });
return result; return result;
} else if (value.className === 'Service') { } else if (value.className === 'Service') {
return client.makeProtobufClientConstructor(value); return client.makeProtobufClientConstructor(value, options);
} else if (value.className === 'Message' || value.className === 'Enum') { } else if (value.className === 'Message' || value.className === 'Enum') {
return value.build(); return value.build();
} else { } else {
@ -77,17 +78,31 @@ exports.loadObject = function loadObject(value) {
var loadObject = exports.loadObject; var loadObject = exports.loadObject;
/** /**
* Load a gRPC object from a .proto file. * Load a gRPC object from a .proto file. The options object can provide the
* @param {string} filename The file to load * following options:
* - convertFieldsToCamelCase: Loads this file with that option on protobuf.js
* set as specified. See
* https://github.com/dcodeIO/protobuf.js/wiki/Advanced-options for details
* - binaryAsBase64: deserialize bytes values as base64 strings instead of
* Buffers. Defaults to false
* - longsAsStrings: deserialize long values as strings instead of objects.
* Defaults to true
* @param {string|{root: string, file: string}} filename The file to load
* @param {string=} format The file format to expect. Must be either 'proto' or * @param {string=} format The file format to expect. Must be either 'proto' or
* 'json'. Defaults to 'proto' * 'json'. Defaults to 'proto'
* @param {Object=} options Options to apply to the loaded file
* @return {Object<string, *>} The resulting gRPC object * @return {Object<string, *>} The resulting gRPC object
*/ */
exports.load = function load(filename, format) { exports.load = function load(filename, format, options) {
if (!format) { if (!format) {
format = 'proto'; format = 'proto';
} }
var convertFieldsToCamelCaseOriginal = ProtoBuf.convertFieldsToCamelCase;
if(options && options.hasOwnProperty('convertFieldsToCamelCase')) {
ProtoBuf.convertFieldsToCamelCase = options.convertFieldsToCamelCase;
}
var builder; var builder;
try {
switch(format) { switch(format) {
case 'proto': case 'proto':
builder = ProtoBuf.loadProtoFile(filename); builder = ProtoBuf.loadProtoFile(filename);
@ -98,7 +113,10 @@ exports.load = function load(filename, format) {
default: default:
throw new Error('Unrecognized format "' + format + '"'); throw new Error('Unrecognized format "' + format + '"');
} }
return loadObject(builder.ns); } finally {
ProtoBuf.convertFieldsToCamelCase = convertFieldsToCamelCaseOriginal;
}
return loadObject(builder.ns, options);
}; };
/** /**

@ -648,8 +648,8 @@ exports.makeClientConstructor = function(methods, serviceName) {
var deserialize = attrs.responseDeserialize; var deserialize = attrs.responseDeserialize;
Client.prototype[name] = requester_makers[method_type]( Client.prototype[name] = requester_makers[method_type](
attrs.path, serialize, deserialize); attrs.path, serialize, deserialize);
Client.prototype[name].serialize = serialize; // Associate all provided attributes with the method
Client.prototype[name].deserialize = deserialize; _.assign(Client.prototype[name], attrs);
}); });
return Client; return Client;
@ -698,13 +698,16 @@ exports.waitForClientReady = function(client, deadline, callback) {
* Creates a constructor for clients for the given service * Creates a constructor for clients for the given service
* @param {ProtoBuf.Reflect.Service} service The service to generate a client * @param {ProtoBuf.Reflect.Service} service The service to generate a client
* for * for
* @param {Object=} options Options to apply to the client
* @return {function(string, Object)} New client constructor * @return {function(string, Object)} New client constructor
*/ */
exports.makeProtobufClientConstructor = function(service) { exports.makeProtobufClientConstructor = function(service, options) {
var method_attrs = common.getProtobufServiceAttrs(service, service.name); var method_attrs = common.getProtobufServiceAttrs(service, service.name,
options);
var Client = exports.makeClientConstructor( var Client = exports.makeClientConstructor(
method_attrs, common.fullyQualifiedName(service)); method_attrs, common.fullyQualifiedName(service));
Client.service = service; Client.service = service;
Client.service.grpc_options = options;
return Client; return Client;
}; };

@ -44,9 +44,20 @@ var _ = require('lodash');
/** /**
* Get a function that deserializes a specific type of protobuf. * Get a function that deserializes a specific type of protobuf.
* @param {function()} cls The constructor of the message type to deserialize * @param {function()} cls The constructor of the message type to deserialize
* @param {bool=} binaryAsBase64 Deserialize bytes fields as base64 strings
* instead of Buffers. Defaults to false
* @param {bool=} longsAsStrings Deserialize long values as strings instead of
* objects. Defaults to true
* @return {function(Buffer):cls} The deserialization function * @return {function(Buffer):cls} The deserialization function
*/ */
exports.deserializeCls = function deserializeCls(cls) { exports.deserializeCls = function deserializeCls(cls, binaryAsBase64,
longsAsStrings) {
if (binaryAsBase64 === undefined || binaryAsBase64 === null) {
binaryAsBase64 = false;
}
if (longsAsStrings === undefined || longsAsStrings === null) {
longsAsStrings = true;
}
/** /**
* Deserialize a buffer to a message object * Deserialize a buffer to a message object
* @param {Buffer} arg_buf The buffer to deserialize * @param {Buffer} arg_buf The buffer to deserialize
@ -55,7 +66,7 @@ exports.deserializeCls = function deserializeCls(cls) {
return function deserialize(arg_buf) { return function deserialize(arg_buf) {
// Convert to a native object with binary fields as Buffers (first argument) // Convert to a native object with binary fields as Buffers (first argument)
// and longs as strings (second argument) // and longs as strings (second argument)
return cls.decode(arg_buf).toRaw(false, true); return cls.decode(arg_buf).toRaw(binaryAsBase64, longsAsStrings);
}; };
}; };
@ -119,19 +130,30 @@ exports.wrapIgnoreNull = function wrapIgnoreNull(func) {
/** /**
* Return a map from method names to method attributes for the service. * Return a map from method names to method attributes for the service.
* @param {ProtoBuf.Reflect.Service} service The service to get attributes for * @param {ProtoBuf.Reflect.Service} service The service to get attributes for
* @param {Object=} options Options to apply to these attributes
* @return {Object} The attributes map * @return {Object} The attributes map
*/ */
exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service) { exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service,
options) {
var prefix = '/' + fullyQualifiedName(service) + '/'; var prefix = '/' + fullyQualifiedName(service) + '/';
var binaryAsBase64, longsAsStrings;
if (options) {
binaryAsBase64 = options.binaryAsBase64;
longsAsStrings = options.longsAsStrings;
}
return _.object(_.map(service.children, function(method) { return _.object(_.map(service.children, function(method) {
return [_.camelCase(method.name), { return [_.camelCase(method.name), {
path: prefix + method.name, path: prefix + method.name,
requestStream: method.requestStream, requestStream: method.requestStream,
responseStream: method.responseStream, responseStream: method.responseStream,
requestType: method.resolvedRequestType,
responseType: method.resolvedResponseType,
requestSerialize: serializeCls(method.resolvedRequestType.build()), requestSerialize: serializeCls(method.resolvedRequestType.build()),
requestDeserialize: deserializeCls(method.resolvedRequestType.build()), requestDeserialize: deserializeCls(method.resolvedRequestType.build(),
binaryAsBase64, longsAsStrings),
responseSerialize: serializeCls(method.resolvedResponseType.build()), responseSerialize: serializeCls(method.resolvedResponseType.build()),
responseDeserialize: deserializeCls(method.resolvedResponseType.build()) responseDeserialize: deserializeCls(method.resolvedResponseType.build(),
binaryAsBase64, longsAsStrings)
}]; }];
})); }));
}; };

@ -98,6 +98,8 @@ exports.createFromMetadataGenerator = function(metadata_generator) {
message = error.message; message = error.message;
if (error.hasOwnProperty('code')) { if (error.hasOwnProperty('code')) {
code = error.code; code = error.code;
} else {
code = grpc.status.UNAUTHENTICATED;
} }
if (!metadata) { if (!metadata) {
metadata = new Metadata(); metadata = new Metadata();
@ -116,13 +118,16 @@ exports.createFromMetadataGenerator = function(metadata_generator) {
exports.createFromGoogleCredential = function(google_credential) { exports.createFromGoogleCredential = function(google_credential) {
return exports.createFromMetadataGenerator(function(auth_context, callback) { return exports.createFromMetadataGenerator(function(auth_context, callback) {
var service_url = auth_context.service_url; var service_url = auth_context.service_url;
console.log('Service URL:', service_url);
google_credential.getRequestMetadata(service_url, function(err, header) { google_credential.getRequestMetadata(service_url, function(err, header) {
if (err) { if (err) {
console.log('Auth error:', err);
callback(err); callback(err);
return; return;
} }
var metadata = new Metadata(); var metadata = new Metadata();
metadata.add('authorization', header.Authorization); metadata.add('authorization', header.Authorization);
console.log(header.Authorization);
callback(null, metadata); callback(null, metadata);
}); });
}); });

@ -64,7 +64,7 @@ function normalizeKey(key) {
if (grpc.metadataKeyIsLegal(key)) { if (grpc.metadataKeyIsLegal(key)) {
return key; return key;
} else { } else {
throw new Error('Metadata key contains illegal characters'); throw new Error('Metadata key"' + key + '" contains illegal characters');
} }
} }
@ -79,7 +79,8 @@ function validate(key, value) {
'keys that don\'t end with \'-bin\' must have String values'); 'keys that don\'t end with \'-bin\' must have String values');
} }
if (!grpc.metadataNonbinValueIsLegal(value)) { if (!grpc.metadataNonbinValueIsLegal(value)) {
throw new Error('Metadata string value contains illegal characters'); throw new Error('Metadata string value "' + value +
'" contains illegal characters');
} }
} }
} }

@ -737,7 +737,12 @@ Server.prototype.addService = function(service, implementation) {
* method implementation for the provided service. * method implementation for the provided service.
*/ */
Server.prototype.addProtoService = function(service, implementation) { Server.prototype.addProtoService = function(service, implementation) {
this.addService(common.getProtobufServiceAttrs(service), implementation); var options;
if (service.grpc_options) {
options = service.grpc_options;
}
this.addService(common.getProtobufServiceAttrs(service, options),
implementation);
}; };
/** /**

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -42,7 +42,7 @@ var ProtoBuf = require('protobufjs');
var messages_proto = ProtoBuf.loadProtoFile( var messages_proto = ProtoBuf.loadProtoFile(
__dirname + '/test_messages.proto').build(); __dirname + '/test_messages.proto').build();
describe('Proto message serialize and deserialize', function() { describe('Proto message long int serialize and deserialize', function() {
var longSerialize = common.serializeCls(messages_proto.LongValues); var longSerialize = common.serializeCls(messages_proto.LongValues);
var longDeserialize = common.deserializeCls(messages_proto.LongValues); var longDeserialize = common.deserializeCls(messages_proto.LongValues);
var pos_value = '314159265358979'; var pos_value = '314159265358979';
@ -87,4 +87,52 @@ describe('Proto message serialize and deserialize', function() {
assert.strictEqual(longDeserialize(serialized).sfixed_64.toString(), assert.strictEqual(longDeserialize(serialized).sfixed_64.toString(),
neg_value); neg_value);
}); });
it('should deserialize as a number with the right option set', function() {
var longNumDeserialize = common.deserializeCls(messages_proto.LongValues,
false, false);
var serialized = longSerialize({int_64: pos_value});
assert.strictEqual(typeof longDeserialize(serialized).int_64, 'string');
/* With the longsAsStrings option disabled, long values are represented as
* objects with 3 keys: low, high, and unsigned */
assert.strictEqual(typeof longNumDeserialize(serialized).int_64, 'object');
});
});
describe('Proto message bytes serialize and deserialize', function() {
var sequenceSerialize = common.serializeCls(messages_proto.SequenceValues);
var sequenceDeserialize = common.deserializeCls(
messages_proto.SequenceValues);
var sequenceBase64Deserialize = common.deserializeCls(
messages_proto.SequenceValues, true);
var buffer_val = new Buffer([0x69, 0xb7]);
var base64_val = 'abc=';
it('should preserve a buffer', function() {
var serialized = sequenceSerialize({bytes_field: buffer_val});
var deserialized = sequenceDeserialize(serialized);
assert.strictEqual(deserialized.bytes_field.compare(buffer_val), 0);
});
it('should accept base64 encoded strings', function() {
var serialized = sequenceSerialize({bytes_field: base64_val});
var deserialized = sequenceDeserialize(serialized);
assert.strictEqual(deserialized.bytes_field.compare(buffer_val), 0);
});
it('should output base64 encoded strings with an option set', function() {
var serialized = sequenceSerialize({bytes_field: base64_val});
var deserialized = sequenceBase64Deserialize(serialized);
assert.strictEqual(deserialized.bytes_field, base64_val);
});
/* The next two tests are specific tests to verify that issue
* https://github.com/grpc/grpc/issues/5174 has been fixed. They are skipped
* because they will not pass until a protobuf.js release has been published
* with a fix for https://github.com/dcodeIO/protobuf.js/issues/390 */
it.skip('should serialize a repeated field as packed by default', function() {
var expected_serialize = new Buffer([0x12, 0x01, 0x01, 0x0a]);
var serialized = sequenceSerialize({repeated_field: [10]});
assert.strictEqual(expected_serialize.compare(serialized), 0);
});
it.skip('should deserialize packed or unpacked repeated', function() {
var serialized = new Buffer([0x12, 0x01, 0x01, 0x0a]);
assert.doesNotThrow(function() {
sequenceDeserialize(serialized);
});
});
}); });

@ -36,3 +36,8 @@ message LongValues {
fixed64 fixed_64 = 4; fixed64 fixed_64 = 4;
sfixed64 sfixed_64 = 5; sfixed64 sfixed_64 = 5;
} }
message SequenceValues {
bytes bytes_field = 1;
repeated int32 repeated_field = 2;
}

@ -73,27 +73,6 @@ CORE_SOURCE_FILES = [
'src/core/support/time_win32.c', 'src/core/support/time_win32.c',
'src/core/support/tls_pthread.c', 'src/core/support/tls_pthread.c',
'src/core/support/wrap_memcpy.c', 'src/core/support/wrap_memcpy.c',
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/grpc_context.c', 'src/core/census/grpc_context.c',
'src/core/census/grpc_filter.c', 'src/core/census/grpc_filter.c',
'src/core/channel/channel_args.c', 'src/core/channel/channel_args.c',
@ -222,9 +201,30 @@ CORE_SOURCE_FILES = [
'src/core/transport/static_metadata.c', 'src/core/transport/static_metadata.c',
'src/core/transport/transport.c', 'src/core/transport/transport.c',
'src/core/transport/transport_op_string.c', 'src/core/transport/transport_op_string.c',
'src/core/httpcli/httpcli_security_connector.c',
'src/core/security/base64.c',
'src/core/security/client_auth_filter.c',
'src/core/security/credentials.c',
'src/core/security/credentials_metadata.c',
'src/core/security/credentials_posix.c',
'src/core/security/credentials_win32.c',
'src/core/security/google_default_credentials.c',
'src/core/security/handshake.c',
'src/core/security/json_token.c',
'src/core/security/jwt_verifier.c',
'src/core/security/secure_endpoint.c',
'src/core/security/security_connector.c',
'src/core/security/security_context.c',
'src/core/security/server_auth_filter.c',
'src/core/security/server_secure_chttp2.c',
'src/core/surface/init_secure.c',
'src/core/surface/secure_channel_create.c',
'src/core/tsi/fake_transport_security.c',
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/context.c', 'src/core/census/context.c',
'src/core/census/initialize.c', 'src/core/census/initialize.c',
'src/core/census/log.c', 'src/core/census/mlog.c',
'src/core/census/operation.c', 'src/core/census/operation.c',
'src/core/census/placeholders.c', 'src/core/census/placeholders.c',
'src/core/census/tracing.c', 'src/core/census/tracing.c',

@ -0,0 +1,4 @@
Google Summer of Code 2016 gRPC Ideas
=====================================
(Skeleton for now.)

@ -159,7 +159,7 @@
else else
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
ifeq ($(origin AR), default) ifeq ($(origin AR), default)
AR = libtool -o AR = libtool -no_warning_for_no_symbols -o
endif endif
STRIP ?= strip -x STRIP ?= strip -x
else else
@ -790,18 +790,22 @@
static_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\ static_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None): % if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None):
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
static_zookeeper_libs static_zookeeper_libs
static_cxx: pc_cxx pc_cxx_unsecure cache.mk \ static_cxx: pc_cxx pc_cxx_unsecure cache.mk \
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c++': % if lib.build == 'all' and lib.language == 'c++':
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
@ -809,40 +813,50 @@
shared_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\ shared_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None): % if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None):
$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\
% endif % endif
% endif
% endfor % endfor
shared_zookeeper_libs shared_zookeeper_libs
shared_cxx: pc_cxx pc_cxx_unsecure cache.mk\ shared_cxx: pc_cxx pc_cxx_unsecure cache.mk\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c++': % if lib.build == 'all' and lib.language == 'c++':
$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\
% endif % endif
% endif
% endfor % endfor
shared_csharp: shared_c \ shared_csharp: shared_c \
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'csharp': % if lib.build == 'all' and lib.language == 'csharp':
$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
static_zookeeper_libs:\ static_zookeeper_libs:\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []): % if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []):
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
shared_zookeeper_libs:\ shared_zookeeper_libs:\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []): % if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []):
$(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\
% endif % endif
% endif
% endfor % endfor
else else
@ -861,9 +875,11 @@
privatelibs_c: \ privatelibs_c: \
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'private' and lib.language == 'c' and not lib.get('external_deps', None) and not lib.boringssl: % if lib.build == 'private' and lib.language == 'c' and not lib.get('external_deps', None) and not lib.boringssl:
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc
@ -882,18 +898,22 @@
privatelibs_cxx: \ privatelibs_cxx: \
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'private' and lib.language == 'c++' and not lib.get('external_deps', None): % if lib.build == 'private' and lib.language == 'c++' and not lib.get('external_deps', None):
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
privatelibs_zookeeper: \ privatelibs_zookeeper: \
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.build == 'private' and lib.language == 'c++' and zookeeper in lib.get('external_deps', []): % if lib.build == 'private' and lib.language == 'c++' and zookeeper in lib.get('external_deps', []):
$(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
% endif % endif
% endif
% endfor % endfor
else else
@ -1044,6 +1064,7 @@
strip-static_c: static_c strip-static_c: static_c
ifeq ($(CONFIG),opt) ifeq ($(CONFIG),opt)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if not lib.get('external_deps', None): % if not lib.get('external_deps', None):
@ -1052,9 +1073,11 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if 'zookeeper' in lib.get('external_deps', []): % if 'zookeeper' in lib.get('external_deps', []):
@ -1063,6 +1086,7 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
endif endif
@ -1070,18 +1094,21 @@
strip-static_cxx: static_cxx strip-static_cxx: static_cxx
ifeq ($(CONFIG),opt) ifeq ($(CONFIG),opt)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c++": % if lib.language == "c++":
% if lib.build == "all": % if lib.build == "all":
$(E) "[STRIP] Stripping lib${lib.name}.a" $(E) "[STRIP] Stripping lib${lib.name}.a"
$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
strip-shared_c: shared_c strip-shared_c: shared_c
ifeq ($(CONFIG),opt) ifeq ($(CONFIG),opt)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if not lib.get('external_deps', None): % if not lib.get('external_deps', None):
@ -1090,9 +1117,11 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if 'zookeeper' in lib.get('external_deps', []): % if 'zookeeper' in lib.get('external_deps', []):
@ -1101,6 +1130,7 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
endif endif
@ -1108,24 +1138,28 @@
strip-shared_cxx: shared_cxx strip-shared_cxx: shared_cxx
ifeq ($(CONFIG),opt) ifeq ($(CONFIG),opt)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c++": % if lib.language == "c++":
% if lib.build == "all": % if lib.build == "all":
$(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)" $(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)"
$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT) $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
strip-shared_csharp: shared_csharp strip-shared_csharp: shared_csharp
ifeq ($(CONFIG),opt) ifeq ($(CONFIG),opt)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "csharp": % if lib.language == "csharp":
% if lib.build == "all": % if lib.build == "all":
$(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)" $(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)"
$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT) $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
@ -1234,6 +1268,7 @@
install-static_c: static_c strip-static_c install-pkg-config_c install-static_c: static_c strip-static_c install-pkg-config_c
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if not lib.get('external_deps', None): % if not lib.get('external_deps', None):
@ -1243,9 +1278,11 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c": % if lib.language == "c":
% if lib.build == "all": % if lib.build == "all":
% if 'zookeeper' in lib.get('external_deps', []): % if 'zookeeper' in lib.get('external_deps', []):
@ -1255,11 +1292,13 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
install-static_cxx: static_cxx strip-static_cxx install-pkg-config_cxx install-static_cxx: static_cxx strip-static_cxx install-pkg-config_cxx
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == "c++": % if lib.language == "c++":
% if lib.build == "all": % if lib.build == "all":
$(E) "[INSTALL] Installing lib${lib.name}.a" $(E) "[INSTALL] Installing lib${lib.name}.a"
@ -1267,10 +1306,12 @@
$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a
% endif % endif
% endif % endif
% endif
% endfor % endfor
<%def name="install_shared(lang_filter)">\ <%def name="install_shared(lang_filter)">\
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == lang_filter: % if lib.language == lang_filter:
% if lib.build == "all": % if lib.build == "all":
% if not lib.get('external_deps', None): % if not lib.get('external_deps', None):
@ -1286,9 +1327,11 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
ifeq ($(HAS_ZOOKEEPER),true) ifeq ($(HAS_ZOOKEEPER),true)
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
% if lib.language == lang_filter: % if lib.language == lang_filter:
% if lib.build == "all": % if lib.build == "all":
% if 'zookeeper' in lib.get('external_deps', []): % if 'zookeeper' in lib.get('external_deps', []):
@ -1304,6 +1347,7 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
endif endif
ifneq ($(SYSTEM),MINGW32) ifneq ($(SYSTEM),MINGW32)
@ -1383,7 +1427,9 @@
# The various libraries # The various libraries
% for lib in libs: % for lib in libs:
% if 'Makefile' in lib.get('build_system', ['Makefile']):
${makelib(lib)} ${makelib(lib)}
% endif
% endfor % endfor
@ -1498,7 +1544,7 @@
% endif % endif
ifeq ($(SYSTEM),Darwin) ifeq ($(SYSTEM),Darwin)
$(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
endif endif
<% <%

@ -23,6 +23,11 @@
% endfor % endfor
</ItemGroup> </ItemGroup>
% endif % endif
% if project.get('dll_def', None):
<ItemGroup>
<None Include="${get_repo_root(project)}\${to_windows_path(project.dll_def)}" />
</ItemGroup>
% endif
% if project.get('public_headers',[]): % if project.get('public_headers',[]):
<ItemGroup> <ItemGroup>
% for public_header in project.public_headers: % for public_header in project.public_headers:

@ -2,6 +2,9 @@
<%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\ <%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\
<%def name="get_subsystem(is_library)">${'Windows' if is_library else 'Console'}</%def>\ <%def name="get_subsystem(is_library)">${'Windows' if is_library else 'Console'}</%def>\
<%def name="item_definition_group(project, target, debug, dll, _64bit)">\ <%def name="item_definition_group(project, target, debug, dll, _64bit)">\
<%
repo_root = '$(SolutionDir)\..'
%>\
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='${'%s%s|%s' % ('Debug' if debug else 'Release', '-DLL' if dll else '', 'x64' if _64bit else 'Win32')}'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='${'%s%s|%s' % ('Debug' if debug else 'Release', '-DLL' if dll else '', 'x64' if _64bit else 'Win32')}'">
<ClCompile> <ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader> <PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -23,6 +26,12 @@
<SubSystem>${get_subsystem(project.is_library)}</SubSystem> <SubSystem>${get_subsystem(project.is_library)}</SubSystem>
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
% if project.get("noentry", False):
<NoEntryPoint>true</NoEntryPoint>
% endif
% if project.get("dll_def", None):
<ModuleDefinitionFile>${repo_root}\${to_windows_path(project.dll_def)}</ModuleDefinitionFile>
% endif
% if not debug: % if not debug:
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
@ -194,6 +203,11 @@ ${gen_package_props(packages, repo_root)}\
% endfor % endfor
</ItemGroup> </ItemGroup>
% endif % endif
% if project.get('dll_def', None):
<ItemGroup>
<None Include="${repo_root}\${to_windows_path(project.dll_def)}" />
</ItemGroup>
% endif
% if project.get('src',[]): % if project.get('src',[]):
<ItemGroup> <ItemGroup>
% for src_name in project.src: % for src_name in project.src:

@ -31,7 +31,7 @@
* *
*/ */
#include "src/core/census/log.h" #include "src/core/census/mlog.h"
#include <grpc/support/cpu.h> #include <grpc/support/cpu.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>

@ -45,6 +45,7 @@
#include "src/core/iomgr/iomgr.h" #include "src/core/iomgr/iomgr.h"
#include "src/core/iomgr/socket_utils_posix.h" #include "src/core/iomgr/socket_utils_posix.h"
#include "src/core/iomgr/timer.h"
#include "test/core/util/test_config.h" #include "test/core/util/test_config.h"
static grpc_pollset_set g_pollset_set; static grpc_pollset_set g_pollset_set;
@ -125,11 +126,13 @@ void test_succeeds(void) {
gpr_now(GPR_CLOCK_MONOTONIC), gpr_now(GPR_CLOCK_MONOTONIC),
GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)); GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5));
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
} }
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx);
} }
void test_fails(void) { void test_fails(void) {
@ -159,14 +162,18 @@ void test_fails(void) {
/* wait for the connection callback to finish */ /* wait for the connection callback to finish */
while (g_connections_complete == connections_complete_before) { while (g_connections_complete == connections_complete_before) {
grpc_pollset_worker worker; grpc_pollset_worker worker;
grpc_pollset_work(&exec_ctx, &g_pollset, &worker, gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
gpr_now(GPR_CLOCK_MONOTONIC), test_deadline()); gpr_timespec polling_deadline = test_deadline();
if (!grpc_timer_check(&exec_ctx, now, &polling_deadline)) {
grpc_pollset_work(&exec_ctx, &g_pollset, &worker, now, polling_deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
} }
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx);
} }
void test_times_out(void) { void test_times_out(void) {
@ -243,15 +250,18 @@ void test_times_out(void) {
GPR_ASSERT(g_connections_complete == GPR_ASSERT(g_connections_complete ==
connections_complete_before + is_after_deadline); connections_complete_before + is_after_deadline);
} }
grpc_pollset_work(&exec_ctx, &g_pollset, &worker, gpr_timespec polling_deadline = GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10);
gpr_now(GPR_CLOCK_MONOTONIC), if (!grpc_timer_check(&exec_ctx, now, &polling_deadline)) {
GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10)); grpc_pollset_work(&exec_ctx, &g_pollset, &worker, now, polling_deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
} }
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset)); gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
grpc_exec_ctx_finish(&exec_ctx);
close(svr_fd); close(svr_fd);
for (i = 0; i < NUM_CLIENT_CONNECTS; ++i) { for (i = 0; i < NUM_CLIENT_CONNECTS; ++i) {
close(client_fd[i]); close(client_fd[i]);

@ -35,7 +35,6 @@
#include <string.h> #include <string.h>
#include "src/core/iomgr/timer_internal.h"
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include "test/core/util/test_config.h" #include "test/core/util/test_config.h"
@ -72,9 +71,8 @@ static void add_test(void) {
} }
/* collect timers. Only the first batch should be ready. */ /* collect timers. Only the first batch should be ready. */
GPR_ASSERT(10 == grpc_timer_check(&exec_ctx, GPR_ASSERT(grpc_timer_check(
gpr_time_add(start, gpr_time_from_millis( &exec_ctx, gpr_time_add(start, gpr_time_from_millis(500, GPR_TIMESPAN)),
500, GPR_TIMESPAN)),
NULL)); NULL));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx);
for (i = 0; i < 20; i++) { for (i = 0; i < 20; i++) {
@ -82,9 +80,9 @@ static void add_test(void) {
GPR_ASSERT(cb_called[i][0] == 0); GPR_ASSERT(cb_called[i][0] == 0);
} }
GPR_ASSERT(0 == grpc_timer_check(&exec_ctx, GPR_ASSERT(!grpc_timer_check(
gpr_time_add(start, gpr_time_from_millis( &exec_ctx,
600, GPR_TIMESPAN)), gpr_time_add(start, gpr_time_from_millis(600, GPR_TIMESPAN)),
NULL)); NULL));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx);
for (i = 0; i < 30; i++) { for (i = 0; i < 30; i++) {
@ -93,9 +91,8 @@ static void add_test(void) {
} }
/* collect the rest of the timers */ /* collect the rest of the timers */
GPR_ASSERT(10 == grpc_timer_check( GPR_ASSERT(grpc_timer_check(
&exec_ctx, gpr_time_add(start, gpr_time_from_millis( &exec_ctx, gpr_time_add(start, gpr_time_from_millis(1500, GPR_TIMESPAN)),
1500, GPR_TIMESPAN)),
NULL)); NULL));
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx);
for (i = 0; i < 30; i++) { for (i = 0; i < 30; i++) {
@ -103,9 +100,9 @@ static void add_test(void) {
GPR_ASSERT(cb_called[i][0] == 0); GPR_ASSERT(cb_called[i][0] == 0);
} }
GPR_ASSERT(0 == grpc_timer_check(&exec_ctx, GPR_ASSERT(!grpc_timer_check(
gpr_time_add(start, gpr_time_from_millis( &exec_ctx,
1600, GPR_TIMESPAN)), gpr_time_add(start, gpr_time_from_millis(1600, GPR_TIMESPAN)),
NULL)); NULL));
for (i = 0; i < 30; i++) { for (i = 0; i < 30; i++) {
GPR_ASSERT(cb_called[i][1] == (i < 20)); GPR_ASSERT(cb_called[i][1] == (i < 20));

@ -41,6 +41,11 @@ namespace testing {
class ChannelArgumentsTest : public ::testing::Test { class ChannelArgumentsTest : public ::testing::Test {
protected: protected:
ChannelArgumentsTest()
: pointer_vtable_({&ChannelArguments::PointerVtableMembers::Copy,
&ChannelArguments::PointerVtableMembers::Destroy,
&ChannelArguments::PointerVtableMembers::Compare}) {}
void SetChannelArgs(const ChannelArguments& channel_args, void SetChannelArgs(const ChannelArguments& channel_args,
grpc_channel_args* args) { grpc_channel_args* args) {
channel_args.SetChannelArgs(args); channel_args.SetChannelArgs(args);
@ -74,14 +79,16 @@ class ChannelArgumentsTest : public ::testing::Test {
return grpc::string(arg.value.string) == expected_arg.value.string; return grpc::string(arg.value.string) == expected_arg.value.string;
} else if (arg.type == GRPC_ARG_POINTER) { } else if (arg.type == GRPC_ARG_POINTER) {
return arg.value.pointer.p == expected_arg.value.pointer.p && return arg.value.pointer.p == expected_arg.value.pointer.p &&
arg.value.pointer.copy == expected_arg.value.pointer.copy && arg.value.pointer.vtable->copy ==
arg.value.pointer.destroy == expected_arg.value.pointer.vtable->copy &&
expected_arg.value.pointer.destroy; arg.value.pointer.vtable->destroy ==
expected_arg.value.pointer.vtable->destroy;
} }
} }
} }
return false; return false;
} }
grpc_arg_pointer_vtable pointer_vtable_;
ChannelArguments channel_args_; ChannelArguments channel_args_;
}; };
@ -151,8 +158,7 @@ TEST_F(ChannelArgumentsTest, SetPointer) {
arg0.type = GRPC_ARG_POINTER; arg0.type = GRPC_ARG_POINTER;
arg0.key = const_cast<char*>(key0.c_str()); arg0.key = const_cast<char*>(key0.c_str());
arg0.value.pointer.p = &key0; arg0.value.pointer.p = &key0;
arg0.value.pointer.copy = nullptr; arg0.value.pointer.vtable = &pointer_vtable_;
arg0.value.pointer.destroy = nullptr;
grpc::string key(key0); grpc::string key(key0);
channel_args_.SetPointer(key, arg0.value.pointer.p); channel_args_.SetPointer(key, arg0.value.pointer.p);

@ -43,6 +43,7 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include <grpc/support/tls.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h"
@ -59,6 +60,8 @@ using grpc::testing::EchoRequest;
using grpc::testing::EchoResponse; using grpc::testing::EchoResponse;
using std::chrono::system_clock; using std::chrono::system_clock;
GPR_TLS_DECL(g_is_async_end2end_test);
namespace grpc { namespace grpc {
namespace testing { namespace testing {
@ -67,9 +70,11 @@ namespace {
void* tag(int i) { return (void*)(intptr_t)i; } void* tag(int i) { return (void*)(intptr_t)i; }
#ifdef GPR_POSIX_SOCKET #ifdef GPR_POSIX_SOCKET
static int assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds, static int maybe_assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds,
int timeout) { int timeout) {
if (gpr_tls_get(&g_is_async_end2end_test)) {
GPR_ASSERT(timeout == 0); GPR_ASSERT(timeout == 0);
}
return poll(pfds, nfds, timeout); return poll(pfds, nfds, timeout);
} }
@ -86,21 +91,21 @@ class PollOverride {
grpc_poll_function_type prev_; grpc_poll_function_type prev_;
}; };
class PollingCheckRegion : public PollOverride { class PollingOverrider : public PollOverride {
public: public:
explicit PollingCheckRegion(bool allow_blocking) explicit PollingOverrider(bool allow_blocking)
: PollOverride(allow_blocking ? poll : assert_non_blocking_poll) {} : PollOverride(allow_blocking ? poll : maybe_assert_non_blocking_poll) {}
}; };
#else #else
class PollingCheckRegion { class PollingOverrider {
public: public:
explicit PollingCheckRegion(bool allow_blocking) {} explicit PollingOverrider(bool allow_blocking) {}
}; };
#endif #endif
class Verifier : public PollingCheckRegion { class Verifier {
public: public:
explicit Verifier(bool spin) : PollingCheckRegion(!spin), spin_(spin) {} explicit Verifier(bool spin) : spin_(spin) {}
Verifier& Expect(int i, bool expect_ok) { Verifier& Expect(int i, bool expect_ok) {
expectations_[tag(i)] = expect_ok; expectations_[tag(i)] = expect_ok;
return *this; return *this;
@ -183,6 +188,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> {
AsyncEnd2endTest() {} AsyncEnd2endTest() {}
void SetUp() GRPC_OVERRIDE { void SetUp() GRPC_OVERRIDE {
poll_overrider_.reset(new PollingOverrider(!GetParam()));
int port = grpc_pick_unused_port_or_die(); int port = grpc_pick_unused_port_or_die();
server_address_ << "localhost:" << port; server_address_ << "localhost:" << port;
@ -193,6 +200,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> {
builder.RegisterService(&service_); builder.RegisterService(&service_);
cq_ = builder.AddCompletionQueue(); cq_ = builder.AddCompletionQueue();
server_ = builder.BuildAndStart(); server_ = builder.BuildAndStart();
gpr_tls_set(&g_is_async_end2end_test, 1);
} }
void TearDown() GRPC_OVERRIDE { void TearDown() GRPC_OVERRIDE {
@ -202,6 +211,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> {
cq_->Shutdown(); cq_->Shutdown();
while (cq_->Next(&ignored_tag, &ignored_ok)) while (cq_->Next(&ignored_tag, &ignored_ok))
; ;
poll_overrider_.reset();
gpr_tls_set(&g_is_async_end2end_test, 0);
} }
void ResetStub() { void ResetStub() {
@ -249,6 +260,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> {
std::unique_ptr<Server> server_; std::unique_ptr<Server> server_;
grpc::testing::EchoTestService::AsyncService service_; grpc::testing::EchoTestService::AsyncService service_;
std::ostringstream server_address_; std::ostringstream server_address_;
std::unique_ptr<PollingOverrider> poll_overrider_;
}; };
TEST_P(AsyncEnd2endTest, SimpleRpc) { TEST_P(AsyncEnd2endTest, SimpleRpc) {
@ -1087,7 +1100,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest {
Verifier(GetParam()).Expect(7, true).Verify(cq_.get()); Verifier(GetParam()).Expect(7, true).Verify(cq_.get());
// This is expected to fail in all cases i.e for all values of // This is expected to fail in all cases i.e for all values of
// server_try_cancel. This is becasue at this point, either there are no // server_try_cancel. This is because at this point, either there are no
// more msgs from the client (because client called WritesDone) or the RPC // more msgs from the client (because client called WritesDone) or the RPC
// is cancelled on the server // is cancelled on the server
srv_stream.Read(&recv_request, tag(8)); srv_stream.Read(&recv_request, tag(8));
@ -1164,6 +1177,9 @@ INSTANTIATE_TEST_CASE_P(AsyncEnd2endServerTryCancel,
int main(int argc, char** argv) { int main(int argc, char** argv) {
grpc_test_init(argc, argv); grpc_test_init(argc, argv);
gpr_tls_init(&g_is_async_end2end_test);
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); int ret = RUN_ALL_TESTS();
gpr_tls_destroy(&g_is_async_end2end_test);
return ret;
} }

@ -51,11 +51,11 @@
#include "src/core/security/credentials.h" #include "src/core/security/credentials.h"
#include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h"
#include "src/proto/grpc/testing/echo.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h"
#include "test/core/end2end/data/ssl_test_data.h"
#include "test/core/util/port.h" #include "test/core/util/port.h"
#include "test/core/util/test_config.h" #include "test/core/util/test_config.h"
#include "test/cpp/end2end/test_service_impl.h" #include "test/cpp/end2end/test_service_impl.h"
#include "test/cpp/util/string_ref_helper.h" #include "test/cpp/util/string_ref_helper.h"
#include "test/cpp/util/test_credentials_provider.h"
using grpc::testing::EchoRequest; using grpc::testing::EchoRequest;
using grpc::testing::EchoResponse; using grpc::testing::EchoResponse;
@ -191,12 +191,14 @@ class TestServiceImplDupPkg
class TestScenario { class TestScenario {
public: public:
TestScenario(bool proxy, bool tls) : use_proxy(proxy), use_tls(tls) {} TestScenario(bool proxy, const grpc::string& creds_type)
: use_proxy(proxy), credentials_type(creds_type) {}
void Log() const { void Log() const {
gpr_log(GPR_INFO, "Scenario: proxy %d, tls %d", use_proxy, use_tls); gpr_log(GPR_INFO, "Scenario: proxy %d, credentials %s", use_proxy,
credentials_type.c_str());
} }
bool use_proxy; bool use_proxy;
bool use_tls; const grpc::string credentials_type;
}; };
class End2endTest : public ::testing::TestWithParam<TestScenario> { class End2endTest : public ::testing::TestWithParam<TestScenario> {
@ -220,14 +222,8 @@ class End2endTest : public ::testing::TestWithParam<TestScenario> {
server_address_ << "127.0.0.1:" << port; server_address_ << "127.0.0.1:" << port;
// Setup server // Setup server
ServerBuilder builder; ServerBuilder builder;
auto server_creds = InsecureServerCredentials(); auto server_creds = GetServerCredentials(GetParam().credentials_type);
if (GetParam().use_tls) { if (GetParam().credentials_type != kInsecureCredentialsType) {
SslServerCredentialsOptions::PemKeyCertPair pkcp = {test_server1_key,
test_server1_cert};
SslServerCredentialsOptions ssl_opts;
ssl_opts.pem_root_certs = "";
ssl_opts.pem_key_cert_pairs.push_back(pkcp);
server_creds = SslServerCredentials(ssl_opts);
server_creds->SetAuthMetadataProcessor(processor); server_creds->SetAuthMetadataProcessor(processor);
} }
builder.AddListeningPort(server_address_.str(), server_creds); builder.AddListeningPort(server_address_.str(), server_creds);
@ -246,12 +242,8 @@ class End2endTest : public ::testing::TestWithParam<TestScenario> {
} }
EXPECT_TRUE(is_server_started_); EXPECT_TRUE(is_server_started_);
ChannelArguments args; ChannelArguments args;
auto channel_creds = InsecureChannelCredentials(); auto channel_creds =
if (GetParam().use_tls) { GetChannelCredentials(GetParam().credentials_type, &args);
SslCredentialsOptions ssl_opts = {test_root_cert, "", ""};
args.SetSslTargetNameOverride("foo.test.google.fr");
channel_creds = SslCredentials(ssl_opts);
}
if (!user_agent_prefix_.empty()) { if (!user_agent_prefix_.empty()) {
args.SetUserAgentPrefix(user_agent_prefix_); args.SetUserAgentPrefix(user_agent_prefix_);
} }
@ -941,7 +933,7 @@ TEST_P(End2endTest, ChannelState) {
// Takes 10s. // Takes 10s.
TEST_P(End2endTest, ChannelStateTimeout) { TEST_P(End2endTest, ChannelStateTimeout) {
if (GetParam().use_tls) { if (GetParam().credentials_type != kInsecureCredentialsType) {
return; return;
} }
int port = grpc_pick_unused_port_or_die(); int port = grpc_pick_unused_port_or_die();
@ -1150,7 +1142,7 @@ class SecureEnd2endTest : public End2endTest {
protected: protected:
SecureEnd2endTest() { SecureEnd2endTest() {
GPR_ASSERT(!GetParam().use_proxy); GPR_ASSERT(!GetParam().use_proxy);
GPR_ASSERT(GetParam().use_tls); GPR_ASSERT(GetParam().credentials_type != kInsecureCredentialsType);
} }
}; };
@ -1373,21 +1365,42 @@ TEST_P(SecureEnd2endTest, ClientAuthContext) {
EXPECT_EQ("*.test.youtube.com", ToString(auth_ctx->GetPeerIdentity()[2])); EXPECT_EQ("*.test.youtube.com", ToString(auth_ctx->GetPeerIdentity()[2]));
} }
std::vector<TestScenario> CreateTestScenarios(bool use_proxy,
bool test_insecure,
bool test_secure) {
std::vector<TestScenario> scenarios;
std::vector<grpc::string> credentials_types;
if (test_secure) {
credentials_types = GetSecureCredentialsTypeList();
}
if (test_insecure) {
credentials_types.push_back(kInsecureCredentialsType);
}
for (auto it = credentials_types.begin(); it != credentials_types.end();
++it) {
scenarios.push_back(TestScenario(false, *it));
if (use_proxy) {
scenarios.push_back(TestScenario(true, *it));
}
}
return scenarios;
}
INSTANTIATE_TEST_CASE_P(End2end, End2endTest, INSTANTIATE_TEST_CASE_P(End2end, End2endTest,
::testing::Values(TestScenario(false, false), ::testing::ValuesIn(CreateTestScenarios(false, true,
TestScenario(false, true))); true)));
INSTANTIATE_TEST_CASE_P(End2endServerTryCancel, End2endServerTryCancelTest, INSTANTIATE_TEST_CASE_P(End2endServerTryCancel, End2endServerTryCancelTest,
::testing::Values(TestScenario(false, false))); ::testing::ValuesIn(CreateTestScenarios(false, true,
false)));
INSTANTIATE_TEST_CASE_P(ProxyEnd2end, ProxyEnd2endTest, INSTANTIATE_TEST_CASE_P(ProxyEnd2end, ProxyEnd2endTest,
::testing::Values(TestScenario(false, false), ::testing::ValuesIn(CreateTestScenarios(true, true,
TestScenario(false, true), true)));
TestScenario(true, false),
TestScenario(true, true)));
INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest, INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest,
::testing::Values(TestScenario(false, true))); ::testing::ValuesIn(CreateTestScenarios(false, false,
true)));
} // namespace } // namespace
} // namespace testing } // namespace testing

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -74,6 +74,7 @@ DEFINE_string(test_case, "large_unary",
"oauth2_auth_token: raw oauth2 access token auth; " "oauth2_auth_token: raw oauth2 access token auth; "
"per_rpc_creds: raw oauth2 access token on a single rpc; " "per_rpc_creds: raw oauth2 access token on a single rpc; "
"status_code_and_message: verify status code & message; " "status_code_and_message: verify status code & message; "
"custom_metadata: server will echo custom metadata;"
"all : all of above."); "all : all of above.");
DEFINE_string(default_service_account, "", DEFINE_string(default_service_account, "",
"Email of GCE default service account"); "Email of GCE default service account");
@ -129,6 +130,8 @@ int main(int argc, char** argv) {
client.DoPerRpcCreds(json_key); client.DoPerRpcCreds(json_key);
} else if (FLAGS_test_case == "status_code_and_message") { } else if (FLAGS_test_case == "status_code_and_message") {
client.DoStatusWithMessage(); client.DoStatusWithMessage();
} else if (FLAGS_test_case == "custom_metadata") {
client.DoCustomMetadata();
} else if (FLAGS_test_case == "all") { } else if (FLAGS_test_case == "all") {
client.DoEmpty(); client.DoEmpty();
client.DoLargeUnary(); client.DoLargeUnary();
@ -142,6 +145,7 @@ int main(int argc, char** argv) {
client.DoTimeoutOnSleepingServer(); client.DoTimeoutOnSleepingServer();
client.DoEmptyStream(); client.DoEmptyStream();
client.DoStatusWithMessage(); client.DoStatusWithMessage();
client.DoCustomMetadata();
// service_account_creds and jwt_token_creds can only run with ssl. // service_account_creds and jwt_token_creds can only run with ssl.
if (FLAGS_use_tls) { if (FLAGS_use_tls) {
grpc::string json_key = GetServiceAccountJsonKey(); grpc::string json_key = GetServiceAccountJsonKey();
@ -159,7 +163,7 @@ int main(int argc, char** argv) {
"server_compressed_streaming|half_duplex|ping_pong|cancel_after_begin|" "server_compressed_streaming|half_duplex|ping_pong|cancel_after_begin|"
"cancel_after_first_response|timeout_on_sleeping_server|empty_stream|" "cancel_after_first_response|timeout_on_sleeping_server|empty_stream|"
"compute_engine_creds|jwt_token_creds|oauth2_auth_token|per_rpc_creds", "compute_engine_creds|jwt_token_creds|oauth2_auth_token|per_rpc_creds",
FLAGS_test_case.c_str()); "status_code_and_message|custom_metadata", FLAGS_test_case.c_str());
ret = 1; ret = 1;
} }

@ -625,5 +625,77 @@ void InteropClient::DoStatusWithMessage() {
gpr_log(GPR_DEBUG, "Done testing Status and Message"); gpr_log(GPR_DEBUG, "Done testing Status and Message");
} }
void InteropClient::DoCustomMetadata() {
const grpc::string kEchoInitialMetadataKey("x-grpc-test-echo-initial");
const grpc::string kInitialMetadataValue("test_initial_metadata_value");
const grpc::string kEchoTrailingBinMetadataKey(
"x-grpc-test-echo-trailing-bin");
const grpc::string kTrailingBinValue("\x0a\x0b\x0a\x0b\x0a\x0b");
;
{
gpr_log(GPR_DEBUG, "Sending RPC with custom metadata");
ClientContext context;
context.AddMetadata(kEchoInitialMetadataKey, kInitialMetadataValue);
context.AddMetadata(kEchoTrailingBinMetadataKey, kTrailingBinValue);
SimpleRequest request;
SimpleResponse response;
request.set_response_size(kLargeResponseSize);
grpc::string payload(kLargeRequestSize, '\0');
request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
Status s = serviceStub_.Get()->UnaryCall(&context, request, &response);
AssertOkOrPrintErrorStatus(s);
const auto& server_initial_metadata = context.GetServerInitialMetadata();
auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
GPR_ASSERT(iter != server_initial_metadata.end());
GPR_ASSERT(iter->second.data() == kInitialMetadataValue);
const auto& server_trailing_metadata = context.GetServerTrailingMetadata();
iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey);
GPR_ASSERT(iter != server_trailing_metadata.end());
GPR_ASSERT(grpc::string(iter->second.begin(), iter->second.end()) ==
kTrailingBinValue);
gpr_log(GPR_DEBUG, "Done testing RPC with custom metadata");
}
{
gpr_log(GPR_DEBUG, "Sending stream with custom metadata");
ClientContext context;
context.AddMetadata(kEchoInitialMetadataKey, kInitialMetadataValue);
context.AddMetadata(kEchoTrailingBinMetadataKey, kTrailingBinValue);
std::unique_ptr<ClientReaderWriter<StreamingOutputCallRequest,
StreamingOutputCallResponse>>
stream(serviceStub_.Get()->FullDuplexCall(&context));
StreamingOutputCallRequest request;
request.set_response_type(PayloadType::COMPRESSABLE);
ResponseParameters* response_parameter = request.add_response_parameters();
response_parameter->set_size(kLargeResponseSize);
grpc::string payload(kLargeRequestSize, '\0');
request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
StreamingOutputCallResponse response;
GPR_ASSERT(stream->Write(request));
stream->WritesDone();
GPR_ASSERT(stream->Read(&response));
GPR_ASSERT(response.payload().body() ==
grpc::string(kLargeResponseSize, '\0'));
GPR_ASSERT(!stream->Read(&response));
Status s = stream->Finish();
AssertOkOrPrintErrorStatus(s);
const auto& server_initial_metadata = context.GetServerInitialMetadata();
auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
GPR_ASSERT(iter != server_initial_metadata.end());
GPR_ASSERT(iter->second.data() == kInitialMetadataValue);
const auto& server_trailing_metadata = context.GetServerTrailingMetadata();
iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey);
GPR_ASSERT(iter != server_trailing_metadata.end());
GPR_ASSERT(grpc::string(iter->second.begin(), iter->second.end()) ==
kTrailingBinValue);
gpr_log(GPR_DEBUG, "Done testing stream with custom metadata");
}
}
} // namespace testing } // namespace testing
} // namespace grpc } // namespace grpc

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -75,6 +75,7 @@ class InteropClient {
void DoTimeoutOnSleepingServer(); void DoTimeoutOnSleepingServer();
void DoEmptyStream(); void DoEmptyStream();
void DoStatusWithMessage(); void DoStatusWithMessage();
void DoCustomMetadata();
// Auth tests. // Auth tests.
// username is a string containing the user email // username is a string containing the user email
void DoJwtTokenCreds(const grpc::string& username); void DoJwtTokenCreds(const grpc::string& username);

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2015-2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -80,6 +80,36 @@ using grpc::Status;
static bool got_sigint = false; static bool got_sigint = false;
static const char* kRandomFile = "test/cpp/interop/rnd.dat"; static const char* kRandomFile = "test/cpp/interop/rnd.dat";
const char kEchoInitialMetadataKey[] = "x-grpc-test-echo-initial";
const char kEchoTrailingBinMetadataKey[] = "x-grpc-test-echo-trailing-bin";
const char kEchoUserAgentKey[] = "x-grpc-test-echo-useragent";
void MaybeEchoMetadata(ServerContext* context) {
const auto& client_metadata = context->client_metadata();
GPR_ASSERT(client_metadata.count(kEchoInitialMetadataKey) <= 1);
GPR_ASSERT(client_metadata.count(kEchoTrailingBinMetadataKey) <= 1);
auto iter = client_metadata.find(kEchoInitialMetadataKey);
if (iter != client_metadata.end()) {
context->AddInitialMetadata(kEchoInitialMetadataKey, iter->second.data());
}
iter = client_metadata.find(kEchoTrailingBinMetadataKey);
if (iter != client_metadata.end()) {
context->AddTrailingMetadata(
kEchoTrailingBinMetadataKey,
grpc::string(iter->second.begin(), iter->second.end()));
}
// Check if client sent a magic key in the header that makes us echo
// back the user-agent (for testing purpose)
iter = client_metadata.find(kEchoUserAgentKey);
if (iter != client_metadata.end()) {
iter = client_metadata.find("user-agent");
if (iter != client_metadata.end()) {
context->AddInitialMetadata(kEchoUserAgentKey, iter->second.data());
}
}
}
bool SetPayload(PayloadType type, int size, Payload* payload) { bool SetPayload(PayloadType type, int size, Payload* payload) {
PayloadType response_type; PayloadType response_type;
if (type == PayloadType::RANDOM) { if (type == PayloadType::RANDOM) {
@ -130,11 +160,13 @@ class TestServiceImpl : public TestService::Service {
public: public:
Status EmptyCall(ServerContext* context, const grpc::testing::Empty* request, Status EmptyCall(ServerContext* context, const grpc::testing::Empty* request,
grpc::testing::Empty* response) { grpc::testing::Empty* response) {
MaybeEchoMetadata(context);
return Status::OK; return Status::OK;
} }
Status UnaryCall(ServerContext* context, const SimpleRequest* request, Status UnaryCall(ServerContext* context, const SimpleRequest* request,
SimpleResponse* response) { SimpleResponse* response) {
MaybeEchoMetadata(context);
SetResponseCompression(context, *request); SetResponseCompression(context, *request);
if (request->response_size() > 0) { if (request->response_size() > 0) {
if (!SetPayload(request->response_type(), request->response_size(), if (!SetPayload(request->response_type(), request->response_size(),
@ -192,6 +224,7 @@ class TestServiceImpl : public TestService::Service {
ServerContext* context, ServerContext* context,
ServerReaderWriter<StreamingOutputCallResponse, ServerReaderWriter<StreamingOutputCallResponse,
StreamingOutputCallRequest>* stream) { StreamingOutputCallRequest>* stream) {
MaybeEchoMetadata(context);
StreamingOutputCallRequest request; StreamingOutputCallRequest request;
StreamingOutputCallResponse response; StreamingOutputCallResponse response;
bool write_success = true; bool write_success = true;

@ -0,0 +1,82 @@
/*
*
* Copyright 2016, 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 "test/cpp/util/test_credentials_provider.h"
#include "test/core/end2end/data/ssl_test_data.h"
namespace grpc {
namespace testing {
const char kTlsCredentialsType[] = "TLS_CREDENTIALS";
std::shared_ptr<ChannelCredentials> GetChannelCredentials(
const grpc::string& type, ChannelArguments* args) {
if (type == kInsecureCredentialsType) {
return InsecureChannelCredentials();
} else if (type == kTlsCredentialsType) {
SslCredentialsOptions ssl_opts = {test_root_cert, "", ""};
args->SetSslTargetNameOverride("foo.test.google.fr");
return SslCredentials(ssl_opts);
} else {
gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str());
}
return nullptr;
}
std::shared_ptr<ServerCredentials> GetServerCredentials(
const grpc::string& type) {
if (type == kInsecureCredentialsType) {
return InsecureServerCredentials();
} else if (type == kTlsCredentialsType) {
SslServerCredentialsOptions::PemKeyCertPair pkcp = {test_server1_key,
test_server1_cert};
SslServerCredentialsOptions ssl_opts;
ssl_opts.pem_root_certs = "";
ssl_opts.pem_key_cert_pairs.push_back(pkcp);
return SslServerCredentials(ssl_opts);
} else {
gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str());
}
return nullptr;
}
std::vector<grpc::string> GetSecureCredentialsTypeList() {
std::vector<grpc::string> types;
types.push_back(kTlsCredentialsType);
return types;
}
} // namespace testing
} // namespace grpc

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2015, Google Inc. * Copyright 2016, Google Inc.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,31 +31,33 @@
* *
*/ */
#ifndef GRPC_INTERNAL_CORE_IOMGR_TIMER_INTERNAL_H #ifndef GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H
#define GRPC_INTERNAL_CORE_IOMGR_TIMER_INTERNAL_H #define GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H
#include "src/core/iomgr/exec_ctx.h" #include <memory>
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
/* iomgr internal api for dealing with timers */ #include <grpc++/security/credentials.h>
#include <grpc++/security/server_credentials.h>
#include <grpc++/support/channel_arguments.h>
/* Check for timers to be run, and run them. namespace grpc {
Return non zero if timer callbacks were executed. namespace testing {
Drops drop_mu if it is non-null before executing callbacks.
If next is non-null, TRY to update *next with the next running timer
IF that timer occurs before *next current value.
*next is never guaranteed to be updated on any given execution; however,
with high probability at least one thread in the system will see an update
at any time slice. */
int grpc_timer_check(grpc_exec_ctx* exec_ctx, gpr_timespec now, const char kInsecureCredentialsType[] = "INSECURE_CREDENTIALS";
gpr_timespec* next);
void grpc_timer_list_init(gpr_timespec now);
void grpc_timer_list_shutdown(grpc_exec_ctx* exec_ctx);
/* the following must be implemented by each iomgr implementation */ // Provide channel credentials according to the given type. Alter the channel
// arguments if needed.
std::shared_ptr<ChannelCredentials> GetChannelCredentials(
const grpc::string& type, ChannelArguments* args);
void grpc_kick_poller(void); // Provide server credentials according to the given type.
std::shared_ptr<ServerCredentials> GetServerCredentials(
const grpc::string& type);
#endif /* GRPC_INTERNAL_CORE_IOMGR_TIMER_INTERNAL_H */ // Provide a list of secure credentials type.
std::vector<grpc::string> GetSecureCredentialsTypeList();
} // namespace testing
} // namespace grpc
#endif // GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H

@ -773,20 +773,6 @@ include/grpc/compression.h \
include/grpc/grpc.h \ include/grpc/grpc.h \
include/grpc/status.h \ include/grpc/status.h \
include/grpc/census.h \ include/grpc/census.h \
src/core/security/auth_filters.h \
src/core/security/base64.h \
src/core/security/credentials.h \
src/core/security/handshake.h \
src/core/security/json_token.h \
src/core/security/jwt_verifier.h \
src/core/security/secure_endpoint.h \
src/core/security/security_connector.h \
src/core/security/security_context.h \
src/core/tsi/fake_transport_security.h \
src/core/tsi/ssl_transport_security.h \
src/core/tsi/ssl_types.h \
src/core/tsi/transport_security.h \
src/core/tsi/transport_security_interface.h \
src/core/census/grpc_filter.h \ src/core/census/grpc_filter.h \
src/core/channel/channel_args.h \ src/core/channel/channel_args.h \
src/core/channel/channel_stack.h \ src/core/channel/channel_stack.h \
@ -851,7 +837,6 @@ src/core/iomgr/tcp_windows.h \
src/core/iomgr/time_averaged_stats.h \ src/core/iomgr/time_averaged_stats.h \
src/core/iomgr/timer.h \ src/core/iomgr/timer.h \
src/core/iomgr/timer_heap.h \ src/core/iomgr/timer_heap.h \
src/core/iomgr/timer_internal.h \
src/core/iomgr/udp_server.h \ src/core/iomgr/udp_server.h \
src/core/iomgr/wakeup_fd_pipe.h \ src/core/iomgr/wakeup_fd_pipe.h \
src/core/iomgr/wakeup_fd_posix.h \ src/core/iomgr/wakeup_fd_posix.h \
@ -901,30 +886,23 @@ src/core/transport/metadata_batch.h \
src/core/transport/static_metadata.h \ src/core/transport/static_metadata.h \
src/core/transport/transport.h \ src/core/transport/transport.h \
src/core/transport/transport_impl.h \ src/core/transport/transport_impl.h \
src/core/security/auth_filters.h \
src/core/security/base64.h \
src/core/security/credentials.h \
src/core/security/handshake.h \
src/core/security/json_token.h \
src/core/security/jwt_verifier.h \
src/core/security/secure_endpoint.h \
src/core/security/security_connector.h \
src/core/security/security_context.h \
src/core/tsi/fake_transport_security.h \
src/core/tsi/ssl_transport_security.h \
src/core/tsi/ssl_types.h \
src/core/tsi/transport_security.h \
src/core/tsi/transport_security_interface.h \
src/core/census/aggregation.h \ src/core/census/aggregation.h \
src/core/census/log.h \ src/core/census/mlog.h \
src/core/census/rpc_metric_id.h \ src/core/census/rpc_metric_id.h \
src/core/httpcli/httpcli_security_connector.c \
src/core/security/base64.c \
src/core/security/client_auth_filter.c \
src/core/security/credentials.c \
src/core/security/credentials_metadata.c \
src/core/security/credentials_posix.c \
src/core/security/credentials_win32.c \
src/core/security/google_default_credentials.c \
src/core/security/handshake.c \
src/core/security/json_token.c \
src/core/security/jwt_verifier.c \
src/core/security/secure_endpoint.c \
src/core/security/security_connector.c \
src/core/security/security_context.c \
src/core/security/server_auth_filter.c \
src/core/security/server_secure_chttp2.c \
src/core/surface/init_secure.c \
src/core/surface/secure_channel_create.c \
src/core/tsi/fake_transport_security.c \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/grpc_context.c \ src/core/census/grpc_context.c \
src/core/census/grpc_filter.c \ src/core/census/grpc_filter.c \
src/core/channel/channel_args.c \ src/core/channel/channel_args.c \
@ -1053,9 +1031,30 @@ src/core/transport/metadata_batch.c \
src/core/transport/static_metadata.c \ src/core/transport/static_metadata.c \
src/core/transport/transport.c \ src/core/transport/transport.c \
src/core/transport/transport_op_string.c \ src/core/transport/transport_op_string.c \
src/core/httpcli/httpcli_security_connector.c \
src/core/security/base64.c \
src/core/security/client_auth_filter.c \
src/core/security/credentials.c \
src/core/security/credentials_metadata.c \
src/core/security/credentials_posix.c \
src/core/security/credentials_win32.c \
src/core/security/google_default_credentials.c \
src/core/security/handshake.c \
src/core/security/json_token.c \
src/core/security/jwt_verifier.c \
src/core/security/secure_endpoint.c \
src/core/security/security_connector.c \
src/core/security/security_context.c \
src/core/security/server_auth_filter.c \
src/core/security/server_secure_chttp2.c \
src/core/surface/init_secure.c \
src/core/surface/secure_channel_create.c \
src/core/tsi/fake_transport_security.c \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/context.c \ src/core/census/context.c \
src/core/census/initialize.c \ src/core/census/initialize.c \
src/core/census/log.c \ src/core/census/mlog.c \
src/core/census/operation.c \ src/core/census/operation.c \
src/core/census/placeholders.c \ src/core/census/placeholders.c \
src/core/census/tracing.c \ src/core/census/tracing.c \

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright 2015, Google Inc. # Copyright 2015-2016, Google Inc.
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -49,7 +49,83 @@ PID2=$!
export QPS_WORKERS="localhost:10000,localhost:10010" export QPS_WORKERS="localhost:10000,localhost:10010"
bins/$config/qps_driver # big is the size in bytes of large messages (0 is the size otherwise)
big=65536
# wide is the number of client channels in multi-channel tests (1 otherwise)
wide=64
# deep is the number of RPCs outstanding on a channel in non-ping-pong tests
# (the value used is 1 otherwise)
deep=100
#
# Get total core count
cores=`grep -c ^processor /proc/cpuinfo`
halfcores=`expr $cores / 2`
for secure in true false; do
# Scenario 1: generic async streaming ping-pong (contentionless latency)
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=1 \
--client_channels=1 --bbuf_req_size=0 --bbuf_resp_size=0 \
--async_client_threads=1 --async_server_threads=1 --secure_test=$secure \
--num_servers=1 --num_clients=1 \
--server_core_limit=$halfcores --client_core_limit=0
# Scenario 2: generic async streaming "unconstrained" (QPS)
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \
--client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \
--async_client_threads=0 --async_server_threads=0 --secure_test=$secure \
--num_servers=1 --num_clients=0 \
--server_core_limit=$halfcores --client_core_limit=0 |& tee /tmp/qps-test.$$
# Scenario 2b: QPS with a single server core
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \
--client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \
--async_client_threads=0 --async_server_threads=0 --secure_test=$secure \
--num_servers=1 --num_clients=0 --server_core_limit=1 --client_core_limit=0
# Scenario 2c: protobuf-based QPS
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_SERVER --outstanding_rpcs_per_channel=$deep \
--client_channels=$wide --simple_req_size=0 --simple_resp_size=0 \
--async_client_threads=0 --async_server_threads=0 --secure_test=$secure \
--num_servers=1 --num_clients=0 \
--server_core_limit=$halfcores --client_core_limit=0
# Scenario 3: Latency at sub-peak load (all clients equally loaded)
for loadfactor in 0.7; do
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \
--client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \
--async_client_threads=0 --async_server_threads=0 --secure_test=$secure \
--num_servers=1 --num_clients=0 --poisson_load=`awk -v lf=$loadfactor \
'$5 == "QPS:" {print int(lf * $6); exit}' /tmp/qps-test.$$` \
--server_core_limit=$halfcores --client_core_limit=0
done
rm /tmp/qps-test.$$
# Scenario 4: Single-channel bidirectional throughput test (like TCP_STREAM).
bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \
--server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \
--client_channels=1 --bbuf_req_size=$big --bbuf_resp_size=$big \
--async_client_threads=1 --async_server_threads=1 --secure_test=$secure \
--num_servers=1 --num_clients=1 \
--server_core_limit=$halfcores --client_core_limit=0
# Scenario 5: Sync unary ping-pong with protobufs
bins/$config/qps_driver --rpc_type=UNARY --client_type=SYNC_CLIENT \
--server_type=SYNC_SERVER --outstanding_rpcs_per_channel=1 \
--client_channels=1 --simple_req_size=0 --simple_resp_size=0 \
--secure_test=$secure --num_servers=1 --num_clients=1 \
--server_core_limit=$halfcores --client_core_limit=0
done
bins/$config/qps_driver --quit=true
kill -2 $PID1 $PID2
wait wait

@ -80,6 +80,11 @@ def macos_arch_env(arch):
return {'CFLAGS': arch_arg, 'LDFLAGS': arch_arg} return {'CFLAGS': arch_arg, 'LDFLAGS': arch_arg}
python_version_arch_map = {
'x86': 'Python27_32bits',
'x64': 'Python27'
}
class PythonArtifact: class PythonArtifact:
"""Builds Python artifacts.""" """Builds Python artifacts."""
@ -88,14 +93,12 @@ class PythonArtifact:
self.platform = platform self.platform = platform
self.arch = arch self.arch = arch
self.labels = ['artifact', 'python', platform, arch] self.labels = ['artifact', 'python', platform, arch]
self.python_version = python_version_arch_map[arch]
def pre_build_jobspecs(self): def pre_build_jobspecs(self):
return [] return []
def build_jobspec(self): def build_jobspec(self):
if self.platform == 'windows':
raise Exception('Not supported yet.')
else:
environ = {} environ = {}
if self.platform == 'linux': if self.platform == 'linux':
if self.arch == 'x86': if self.arch == 'x86':
@ -104,6 +107,12 @@ class PythonArtifact:
'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch,
'tools/run_tests/build_artifact_python.sh', 'tools/run_tests/build_artifact_python.sh',
environ=environ) environ=environ)
elif self.platform == 'windows':
return create_jobspec(self.name,
['tools\\run_tests\\build_artifact_python.bat',
self.python_version
],
shell=True)
else: else:
environ['SKIP_PIP_INSTALL'] = 'TRUE' environ['SKIP_PIP_INSTALL'] = 'TRUE'
return create_jobspec(self.name, return create_jobspec(self.name,
@ -235,6 +244,8 @@ def targets():
[PythonArtifact('linux', 'x86'), [PythonArtifact('linux', 'x86'),
PythonArtifact('linux', 'x64'), PythonArtifact('linux', 'x64'),
PythonArtifact('macos', 'x64'), PythonArtifact('macos', 'x64'),
PythonArtifact('windows', 'x86'),
PythonArtifact('windows', 'x64'),
RubyArtifact('linux', 'x86'), RubyArtifact('linux', 'x86'),
RubyArtifact('linux', 'x64'), RubyArtifact('linux', 'x64'),
RubyArtifact('macos', 'x64')]) RubyArtifact('macos', 'x64')])

@ -0,0 +1,61 @@
@rem Copyright 2016, Google Inc.
@rem All rights reserved.
@rem
@rem Redistribution and use in source and binary forms, with or without
@rem modification, are permitted provided that the following conditions are
@rem met:
@rem
@rem * Redistributions of source code must retain the above copyright
@rem notice, this list of conditions and the following disclaimer.
@rem * Redistributions in binary form must reproduce the above
@rem copyright notice, this list of conditions and the following disclaimer
@rem in the documentation and/or other materials provided with the
@rem distribution.
@rem * Neither the name of Google Inc. nor the names of its
@rem contributors may be used to endorse or promote products derived from
@rem this software without specific prior written permission.
@rem
@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set NUGET=C:\nuget\nuget.exe
%NUGET% restore vsprojects\grpc.sln || goto :error
@call vsprojects\build_vs2013.bat vsprojects\grpc.sln /t:grpc_dll /p:Configuration=Release /p:PlatformToolset=v120 /p:Platform=Win32 || goto :error
@call vsprojects\build_vs2013.bat vsprojects\grpc.sln /t:grpc_dll /p:Configuration=Release /p:PlatformToolset=v120 /p:Platform=x64 || goto :error
mkdir src\python\grpcio\grpc\_cython\_windows
copy /Y vsprojects\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.32.python || goto :error
copy /Y vsprojects\x64\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.64.python || goto :error
set PATH=C:\%1;C:\%1\scripts;%PATH%
pip install --upgrade six
pip install --upgrade setuptools
pip install -rrequirements.txt
set GRPC_PYTHON_USE_CUSTOM_BDIST=0
set GRPC_PYTHON_BUILD_WITH_CYTHON=1
python setup.py bdist_wheel
mkdir artifacts
xcopy /Y /I /S dist\* artifacts\ || goto :error
goto :EOF
:error
exit /b 1

@ -29,4 +29,4 @@
set JUNIT_REPORT_PATH=src\node\reports.xml set JUNIT_REPORT_PATH=src\node\reports.xml
set JUNIT_REPORT_STACK=1 set JUNIT_REPORT_STACK=1
.\node_modules\.bin\mocha.cmd --reporter mocha-jenkins-reporter src\node\test .\node_modules\.bin\mocha.cmd --reporter mocha-jenkins-reporter --timeout 8000 src\node\test

@ -41,10 +41,13 @@ cd $(dirname $0)/../..
root=`pwd` root=`pwd`
test_directory='src/node/test'
timeout=8000
if [ "$CONFIG" = "gcov" ] if [ "$CONFIG" = "gcov" ]
then then
./node_modules/.bin/istanbul cover --dir reports/node_coverage \ ./node_modules/.bin/istanbul cover --dir reports/node_coverage \
-x **/interop/* ./node_modules/.bin/_mocha -- --timeout 8000 src/node/test -x **/interop/* ./node_modules/.bin/_mocha -- --timeout $timeout $test_directory
cd build cd build
gcov Release/obj.target/grpc/ext/*.o gcov Release/obj.target/grpc/ext/*.o
lcov --base-directory . --directory . -c -o coverage.info lcov --base-directory . --directory . -c -o coverage.info
@ -55,5 +58,7 @@ then
echo '<html><head><meta http-equiv="refresh" content="0;URL=lcov-report/index.html"></head></html>' > \ echo '<html><head><meta http-equiv="refresh" content="0;URL=lcov-report/index.html"></head></html>' > \
../reports/node_coverage/index.html ../reports/node_coverage/index.html
else else
JUNIT_REPORT_PATH=src/node/reports.xml JUNIT_REPORT_STACK=1 ./node_modules/.bin/mocha --reporter mocha-jenkins-reporter src/node/test JUNIT_REPORT_PATH=src/node/reports.xml JUNIT_REPORT_STACK=1 \
./node_modules/.bin/mocha --timeout $timeout \
--reporter mocha-jenkins-reporter $test_directory
fi fi

@ -334,13 +334,14 @@ class RubyLanguage(object):
def test_specs(self, config, args): def test_specs(self, config, args):
return [config.job_spec(['tools/run_tests/run_ruby.sh'], None, return [config.job_spec(['tools/run_tests/run_ruby.sh'], None,
timeout_seconds=10*60,
environ=_FORCE_ENVIRON_FOR_WRAPPERS)] environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
def pre_build_steps(self): def pre_build_steps(self):
return [['tools/run_tests/pre_build_ruby.sh']] return [['tools/run_tests/pre_build_ruby.sh']]
def make_targets(self, test_regex): def make_targets(self, test_regex):
return ['static_c'] return []
def make_options(self): def make_options(self):
return [] return []
@ -1197,4 +1198,3 @@ else:
if BuildAndRunError.POST_TEST in errors: if BuildAndRunError.POST_TEST in errors:
exit_code |= 4 exit_code |= 4
sys.exit(exit_code) sys.exit(exit_code)

@ -92,7 +92,7 @@
"language": "c", "language": "c",
"name": "census_log_test", "name": "census_log_test",
"src": [ "src": [
"test/core/census/log_test.c" "test/core/census/mlog_test.c"
] ]
}, },
{ {
@ -2983,7 +2983,7 @@
"include/grpc/status.h", "include/grpc/status.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
"src/core/channel/channel_args.h", "src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h", "src/core/channel/channel_stack.h",
@ -3048,7 +3048,6 @@
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -3135,8 +3134,8 @@
"src/core/census/grpc_filter.c", "src/core/census/grpc_filter.c",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
@ -3271,7 +3270,6 @@
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.c", "src/core/iomgr/timer_heap.c",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.c", "src/core/iomgr/udp_server.c",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_eventfd.c", "src/core/iomgr/wakeup_fd_eventfd.c",
@ -3417,6 +3415,16 @@
"src/core/tsi/transport_security_interface.h" "src/core/tsi/transport_security_interface.h"
] ]
}, },
{
"deps": [
"gpr",
"grpc"
],
"headers": [],
"language": "c",
"name": "grpc_dll",
"src": []
},
{ {
"deps": [ "deps": [
"gpr", "gpr",
@ -3514,7 +3522,7 @@
"include/grpc/status.h", "include/grpc/status.h",
"src/core/census/aggregation.h", "src/core/census/aggregation.h",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
"src/core/channel/channel_args.h", "src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h", "src/core/channel/channel_stack.h",
@ -3579,7 +3587,6 @@
"src/core/iomgr/time_averaged_stats.h", "src/core/iomgr/time_averaged_stats.h",
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_pipe.h", "src/core/iomgr/wakeup_fd_pipe.h",
"src/core/iomgr/wakeup_fd_posix.h", "src/core/iomgr/wakeup_fd_posix.h",
@ -3651,8 +3658,8 @@
"src/core/census/grpc_filter.c", "src/core/census/grpc_filter.c",
"src/core/census/grpc_filter.h", "src/core/census/grpc_filter.h",
"src/core/census/initialize.c", "src/core/census/initialize.c",
"src/core/census/log.c", "src/core/census/mlog.c",
"src/core/census/log.h", "src/core/census/mlog.h",
"src/core/census/operation.c", "src/core/census/operation.c",
"src/core/census/placeholders.c", "src/core/census/placeholders.c",
"src/core/census/rpc_metric_id.h", "src/core/census/rpc_metric_id.h",
@ -3786,7 +3793,6 @@
"src/core/iomgr/timer.h", "src/core/iomgr/timer.h",
"src/core/iomgr/timer_heap.c", "src/core/iomgr/timer_heap.c",
"src/core/iomgr/timer_heap.h", "src/core/iomgr/timer_heap.h",
"src/core/iomgr/timer_internal.h",
"src/core/iomgr/udp_server.c", "src/core/iomgr/udp_server.c",
"src/core/iomgr/udp_server.h", "src/core/iomgr/udp_server.h",
"src/core/iomgr/wakeup_fd_eventfd.c", "src/core/iomgr/wakeup_fd_eventfd.c",
@ -4186,7 +4192,8 @@
"test/cpp/util/cli_call.h", "test/cpp/util/cli_call.h",
"test/cpp/util/create_test_channel.h", "test/cpp/util/create_test_channel.h",
"test/cpp/util/string_ref_helper.h", "test/cpp/util/string_ref_helper.h",
"test/cpp/util/subprocess.h" "test/cpp/util/subprocess.h",
"test/cpp/util/test_credentials_provider.h"
], ],
"language": "c++", "language": "c++",
"name": "grpc++_test_util", "name": "grpc++_test_util",
@ -4202,7 +4209,9 @@
"test/cpp/util/string_ref_helper.cc", "test/cpp/util/string_ref_helper.cc",
"test/cpp/util/string_ref_helper.h", "test/cpp/util/string_ref_helper.h",
"test/cpp/util/subprocess.cc", "test/cpp/util/subprocess.cc",
"test/cpp/util/subprocess.h" "test/cpp/util/subprocess.h",
"test/cpp/util/test_credentials_provider.cc",
"test/cpp/util/test_credentials_provider.h"
] ]
}, },
{ {

@ -24,6 +24,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "vcxproj\.\grpc\grpc
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_dll", "vcxproj\.\grpc_dll\grpc_dll.vcxproj", "{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}"
ProjectSection(myProperties) = preProject
lib = "True"
EndProjectSection
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", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
ProjectSection(myProperties) = preProject ProjectSection(myProperties) = preProject
lib = "True" lib = "True"
@ -1375,6 +1384,22 @@ Global
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.ActiveCfg = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.ActiveCfg = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.ActiveCfg = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.ActiveCfg = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.Build.0 = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.Build.0 = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.Build.0 = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.Build.0 = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.Build.0 = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.ActiveCfg = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.Build.0 = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.ActiveCfg = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.Build.0 = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.ActiveCfg = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.Build.0 = Release|x64
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32

@ -24,6 +24,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "vcxproj\.\grpc\grpc
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_dll", "vcxproj\.\grpc_dll\grpc_dll.vcxproj", "{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}"
ProjectSection(myProperties) = preProject
lib = "True"
EndProjectSection
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", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
ProjectSection(myProperties) = preProject ProjectSection(myProperties) = preProject
lib = "True" lib = "True"
@ -220,6 +229,22 @@ Global
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64
{29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.ActiveCfg = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.ActiveCfg = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.ActiveCfg = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.ActiveCfg = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.Build.0 = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.Build.0 = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.Build.0 = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.Build.0 = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.Build.0 = Debug|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.ActiveCfg = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.Build.0 = Debug|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.ActiveCfg = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.Build.0 = Release|Win32
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.ActiveCfg = Release|x64
{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.Build.0 = Release|x64
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64
{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32

@ -153,6 +153,7 @@
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\create_test_channel.h" /> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\create_test_channel.h" />
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\string_ref_helper.h" /> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\string_ref_helper.h" />
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h" /> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h" />
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.pb.cc"> <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.pb.cc">
@ -191,6 +192,8 @@
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc"> <ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.cc">
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">

@ -28,6 +28,9 @@
<ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc"> <ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc">
<Filter>test\cpp\util</Filter> <Filter>test\cpp\util</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.cc">
<Filter>test\cpp\util</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="$(SolutionDir)\..\test\cpp\end2end\test_service_impl.h"> <ClInclude Include="$(SolutionDir)\..\test\cpp\end2end\test_service_impl.h">
@ -48,6 +51,9 @@
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h"> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h">
<Filter>test\cpp\util</Filter> <Filter>test\cpp\util</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.h">
<Filter>test\cpp\util</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -282,20 +282,6 @@
<ClInclude Include="$(SolutionDir)\..\include\grpc\census.h" /> <ClInclude Include="$(SolutionDir)\..\include\grpc\census.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_args.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_args.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_stack.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_stack.h" />
@ -360,7 +346,6 @@
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\time_averaged_stats.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\time_averaged_stats.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_internal.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_pipe.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_pipe.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_posix.h" />
@ -410,53 +395,25 @@
<ClInclude Include="$(SolutionDir)\..\src\core\transport\static_metadata.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\static_metadata.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\log.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_filter.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_filter.c">
@ -713,11 +670,53 @@
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c"> <ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\context.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\context.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c">
</ClCompile> </ClCompile>

@ -1,69 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c">
<Filter>src\core\httpcli</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c">
<Filter>src\core\surface</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c">
<Filter>src\core\surface</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClCompile> </ClCompile>
@ -448,13 +385,76 @@
<ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c"> <ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c">
<Filter>src\core\transport</Filter> <Filter>src\core\transport</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c">
<Filter>src\core\httpcli</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c">
<Filter>src\core\security</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c">
<Filter>src\core\surface</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c">
<Filter>src\core\surface</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c">
<Filter>src\core\tsi</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\context.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\context.c">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c">
@ -509,48 +509,6 @@
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h"> <ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClInclude> </ClInclude>
@ -743,9 +701,6 @@
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h"> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h">
<Filter>src\core\iomgr</Filter> <Filter>src\core\iomgr</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_internal.h">
<Filter>src\core\iomgr</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h"> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h">
<Filter>src\core\iomgr</Filter> <Filter>src\core\iomgr</Filter>
</ClInclude> </ClInclude>
@ -893,10 +848,52 @@
<ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h"> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h">
<Filter>src\core\transport</Filter> <Filter>src\core\transport</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h">
<Filter>src\core\security</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h"> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\census\log.h"> <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h">
<Filter>src\core\census</Filter> <Filter>src\core\census</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h"> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h">

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}</ProjectGuid>
<IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
<IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
<PlatformToolset>v100</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
<PlatformToolset>v120</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(SolutionDir)\..\vsprojects\global.props" />
<Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
<Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
<Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<TargetName>grpc_dll</TargetName>
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
<Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
<Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<TargetName>grpc_dll</TargetName>
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
<Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
<Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
<ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
<ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
<ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
<ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="$(SolutionDir)\..\grpc.def" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(SolutionDir)\..\vsprojects\dummy.c">
</ClCompile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
<Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
</ProjectReference>
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
<Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
</Target>
</Project>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(SolutionDir)\..\grpc.def" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
</Project>

@ -336,7 +336,6 @@
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\time_averaged_stats.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\time_averaged_stats.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_heap.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\timer_internal.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\udp_server.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_pipe.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_pipe.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\iomgr\wakeup_fd_posix.h" />
@ -387,7 +386,7 @@
<ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\log.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -653,7 +652,7 @@
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c">
</ClCompile> </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c">
</ClCompile> </ClCompile>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save