diff --git a/.gitignore b/.gitignore
index 8dc459ea276..18b42811b28 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ objs
python*_virtual_environment
# gcov coverage data
+reports
coverage
*.gcno
diff --git a/BUILD b/BUILD
index c8118089bef..3e2a45b8a0a 100644
--- a/BUILD
+++ b/BUILD
@@ -220,6 +220,7 @@ cc_library(
"src/core/profiling/timers.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_rpc_stats.h",
+ "src/core/surface/api_trace.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -356,6 +357,7 @@ cc_library(
"src/core/json/json_writer.c",
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
+ "src/core/surface/api_trace.c",
"src/core/surface/byte_buffer.c",
"src/core/surface/byte_buffer_queue.c",
"src/core/surface/byte_buffer_reader.c",
@@ -373,7 +375,6 @@ cc_library(
"src/core/surface/server.c",
"src/core/surface/server_chttp2.c",
"src/core/surface/server_create.c",
- "src/core/surface/surface_trace.c",
"src/core/surface/version.c",
"src/core/transport/chttp2/alpn.c",
"src/core/transport/chttp2/bin_encoder.c",
@@ -505,6 +506,7 @@ cc_library(
"src/core/profiling/timers.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_rpc_stats.h",
+ "src/core/surface/api_trace.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -621,6 +623,7 @@ cc_library(
"src/core/json/json_writer.c",
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
+ "src/core/surface/api_trace.c",
"src/core/surface/byte_buffer.c",
"src/core/surface/byte_buffer_queue.c",
"src/core/surface/byte_buffer_reader.c",
@@ -638,7 +641,6 @@ cc_library(
"src/core/surface/server.c",
"src/core/surface/server_chttp2.c",
"src/core/surface/server_create.c",
- "src/core/surface/surface_trace.c",
"src/core/surface/version.c",
"src/core/transport/chttp2/alpn.c",
"src/core/transport/chttp2/bin_encoder.c",
@@ -1145,6 +1147,7 @@ objc_library(
"src/core/json/json_writer.c",
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
+ "src/core/surface/api_trace.c",
"src/core/surface/byte_buffer.c",
"src/core/surface/byte_buffer_queue.c",
"src/core/surface/byte_buffer_reader.c",
@@ -1162,7 +1165,6 @@ objc_library(
"src/core/surface/server.c",
"src/core/surface/server_chttp2.c",
"src/core/surface/server_create.c",
- "src/core/surface/surface_trace.c",
"src/core/surface/version.c",
"src/core/transport/chttp2/alpn.c",
"src/core/transport/chttp2/bin_encoder.c",
@@ -1291,6 +1293,7 @@ objc_library(
"src/core/profiling/timers.h",
"src/core/statistics/census_interface.h",
"src/core/statistics/census_rpc_stats.h",
+ "src/core/surface/api_trace.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
diff --git a/Makefile b/Makefile
index e0a7b804721..8eb94f768a2 100644
--- a/Makefile
+++ b/Makefile
@@ -4119,6 +4119,7 @@ LIBGRPC_SRC = \
src/core/json/json_writer.c \
src/core/profiling/basic_timers.c \
src/core/profiling/stap_timers.c \
+ src/core/surface/api_trace.c \
src/core/surface/byte_buffer.c \
src/core/surface/byte_buffer_queue.c \
src/core/surface/byte_buffer_reader.c \
@@ -4136,7 +4137,6 @@ LIBGRPC_SRC = \
src/core/surface/server.c \
src/core/surface/server_chttp2.c \
src/core/surface/server_create.c \
- src/core/surface/surface_trace.c \
src/core/surface/version.c \
src/core/transport/chttp2/alpn.c \
src/core/transport/chttp2/bin_encoder.c \
@@ -4401,6 +4401,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/json/json_writer.c \
src/core/profiling/basic_timers.c \
src/core/profiling/stap_timers.c \
+ src/core/surface/api_trace.c \
src/core/surface/byte_buffer.c \
src/core/surface/byte_buffer_queue.c \
src/core/surface/byte_buffer_reader.c \
@@ -4418,7 +4419,6 @@ LIBGRPC_UNSECURE_SRC = \
src/core/surface/server.c \
src/core/surface/server_chttp2.c \
src/core/surface/server_create.c \
- src/core/surface/surface_trace.c \
src/core/surface/version.c \
src/core/transport/chttp2/alpn.c \
src/core/transport/chttp2/bin_encoder.c \
diff --git a/README.md b/README.md
index ab1004f9d5a..2ef6c3d7f6e 100644
--- a/README.md
+++ b/README.md
@@ -26,31 +26,31 @@ of shared C core library [src/core] (src/core).
* PHP source code: [src/php] (src/php)
* C# source code: [src/csharp] (src/csharp)
* Objective-C source code: [src/objective-c] (src/objective-c)
-
-Java source code is in [grpc-java] (http://github.com/grpc/grpc-java) repository.
+
+Java source code is in [grpc-java] (http://github.com/grpc/grpc-java) repository.
Go source code is in [grpc-go] (http://github.com/grpc/grpc-go) repository.
#Current Status of libraries
Libraries in different languages are in different state of development. We are seeking contributions for all of these libraries.
- * shared C core library [src/core] (src/core) : Early adopter ready - Alpha.
- * C++ Library: [src/cpp] (src/cpp) : Early adopter ready - Alpha.
- * Ruby Library: [src/ruby] (src/ruby) : Early adopter ready - Alpha.
- * NodeJS Library: [src/node] (src/node) : Early adopter ready - Alpha.
- * Python Library: [src/python] (src/python) : Early adopter ready - Alpha.
- * C# Library: [src/csharp] (src/csharp) : Early adopter ready - Alpha.
- * Objective-C Library: [src/objective-c] (src/objective-c): Early adopter ready - Alpha.
- * PHP Library: [src/php] (src/php) : Pre-Alpha.
+ * shared C core library [src/core] (src/core) : Beta - the surface API is stable
+ * C++ Library: [src/cpp] (src/cpp) : Beta - the surface API is stable
+ * Ruby Library: [src/ruby] (src/ruby) : Beta - the surface API is stable
+ * NodeJS Library: [src/node] (src/node) : Beta - the surface API is stable
+ * Python Library: [src/python] (src/python) : Beta - the surface API is stable
+ * C# Library: [src/csharp] (src/csharp) : Beta - the surface API is stable
+ * Objective-C Library: [src/objective-c] (src/objective-c): Beta - the surface API is stable
+ * PHP Library: [src/php] (src/php) : Beta - the surface API is stable
#Overview
-Remote Procedure Calls (RPCs) provide a useful abstraction for building
+Remote Procedure Calls (RPCs) provide a useful abstraction for building
distributed applications and services. The libraries in this repository
provide a concrete implementation of the gRPC protocol, layered over HTTP/2.
These libraries enable communication between clients and servers using any
-combination of the supported languages.
+combination of the supported languages.
##Interface
@@ -62,12 +62,12 @@ which they use on the client-side and implement on the server side.
By default, gRPC uses [Protocol Buffers](https://github.com/google/protobuf) as the
Interface Definition Language (IDL) for describing both the service interface
-and the structure of the payload messages. It is possible to use other
+and the structure of the payload messages. It is possible to use other
alternatives if desired.
###Surface API
Starting from an interface definition in a .proto file, gRPC provides
-Protocol Compiler plugins that generate Client- and Server-side APIs.
+Protocol Compiler plugins that generate Client- and Server-side APIs.
gRPC users typically call into these APIs on the Client side and implement
the corresponding API on the server side.
@@ -76,9 +76,9 @@ Synchronous RPC calls, that block until a response arrives from the server, are
the closest approximation to the abstraction of a procedure call that RPC
aspires to.
-On the other hand, networks are inherently asynchronous and in many scenarios,
+On the other hand, networks are inherently asynchronous and in many scenarios,
it is desirable to have the ability to start RPCs without blocking the current
-thread.
+thread.
The gRPC programming surface in most languages comes in both synchronous and
asynchronous flavors.
@@ -87,8 +87,8 @@ asynchronous flavors.
## Streaming
gRPC supports streaming semantics, where either the client or the server (or both)
-send a stream of messages on a single RPC call. The most general case is
-Bidirectional Streaming where a single gRPC call establishes a stream where both
+send a stream of messages on a single RPC call. The most general case is
+Bidirectional Streaming where a single gRPC call establishes a stream where both
the client and the server can send a stream of messages to each other. The streamed
messages are delivered in the order they were sent.
@@ -103,7 +103,7 @@ fleshing out the details of each of the required operations.
A gRPC RPC comprises of a bidirectional stream of messages, initiated by the client. In the client-to-server direction, this stream begins with a mandatory `Call Header`, followed by optional `Initial-Metadata`, followed by zero or more `Payload Messages`. The server-to-client direction contains an optional `Initial-Metadata`, followed by zero or more `Payload Messages` terminated with a mandatory `Status` and optional `Status-Metadata` (a.k.a.,`Trailing-Metadata`).
## Implementation over HTTP/2
-The abstract protocol defined above is implemented over [HTTP/2](https://http2.github.io/). gRPC bidirectional streams are mapped to HTTP/2 streams. The contents of `Call Header` and `Initial Metadata` are sent as HTTP/2 headers and subject to HPACK compression. `Payload Messages` are serialized into a byte stream of length prefixed gRPC frames which are then fragmented into HTTP/2 frames at the sender and reassembled at the receiver. `Status` and `Trailing-Metadata` are sent as HTTP/2 trailing headers (a.k.a., trailers).
+The abstract protocol defined above is implemented over [HTTP/2](https://http2.github.io/). gRPC bidirectional streams are mapped to HTTP/2 streams. The contents of `Call Header` and `Initial Metadata` are sent as HTTP/2 headers and subject to HPACK compression. `Payload Messages` are serialized into a byte stream of length prefixed gRPC frames which are then fragmented into HTTP/2 frames at the sender and reassembled at the receiver. `Status` and `Trailing-Metadata` are sent as HTTP/2 trailing headers (a.k.a., trailers).
## Flow Control
gRPC inherits the flow control mechanisms in HTTP/2 and uses them to enable fine-grained control of the amount of memory used for buffering in-flight messages.
diff --git a/build.json b/build.json
new file mode 100644
index 00000000000..0a4248c7a8d
--- /dev/null
+++ b/build.json
@@ -0,0 +1,2729 @@
+{
+ "#1": "This file describes the list of targets and dependencies.",
+ "#2": "It is used among other things to generate all of our project files.",
+ "#3": "Please refer to the templates directory for more information.",
+ "settings": {
+ "#": "The public version number of the library.",
+ "version": {
+ "major": 0,
+ "minor": 10,
+ "micro": 1,
+ "build": 0
+ }
+ },
+ "filegroups": [
+ {
+ "name": "census",
+ "public_headers": [
+ "include/grpc/census.h"
+ ],
+ "headers": [
+ "src/core/census/context.h",
+ "src/core/census/rpc_stat_id.h"
+ ],
+ "src": [
+ "src/core/census/context.c",
+ "src/core/census/initialize.c",
+ "src/core/census/record_stat.c"
+ ]
+ },
+ {
+ "name": "grpc++_base",
+ "public_headers": [
+ "include/grpc++/channel.h",
+ "include/grpc++/client_context.h",
+ "include/grpc++/completion_queue.h",
+ "include/grpc++/create_channel.h",
+ "include/grpc++/credentials.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
+ "include/grpc++/impl/call.h",
+ "include/grpc++/impl/client_unary_call.h",
+ "include/grpc++/impl/grpc_library.h",
+ "include/grpc++/impl/proto_utils.h",
+ "include/grpc++/impl/rpc_method.h",
+ "include/grpc++/impl/rpc_service_method.h",
+ "include/grpc++/impl/serialization_traits.h",
+ "include/grpc++/impl/service_type.h",
+ "include/grpc++/impl/sync.h",
+ "include/grpc++/impl/sync_cxx11.h",
+ "include/grpc++/impl/sync_no_cxx11.h",
+ "include/grpc++/impl/thd.h",
+ "include/grpc++/impl/thd_cxx11.h",
+ "include/grpc++/impl/thd_no_cxx11.h",
+ "include/grpc++/server.h",
+ "include/grpc++/server_builder.h",
+ "include/grpc++/server_context.h",
+ "include/grpc++/server_credentials.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h"
+ ],
+ "headers": [
+ "src/cpp/client/create_channel_internal.h",
+ "src/cpp/common/create_auth_context.h",
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/thread_pool_interface.h"
+ ],
+ "src": [
+ "src/cpp/client/channel.cc",
+ "src/cpp/client/channel_arguments.cc",
+ "src/cpp/client/client_context.cc",
+ "src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
+ "src/cpp/client/credentials.cc",
+ "src/cpp/client/generic_stub.cc",
+ "src/cpp/client/insecure_credentials.cc",
+ "src/cpp/common/call.cc",
+ "src/cpp/common/completion_queue.cc",
+ "src/cpp/common/rpc_method.cc",
+ "src/cpp/proto/proto_utils.cc",
+ "src/cpp/server/async_generic_service.cc",
+ "src/cpp/server/create_default_thread_pool.cc",
+ "src/cpp/server/dynamic_thread_pool.cc",
+ "src/cpp/server/fixed_size_thread_pool.cc",
+ "src/cpp/server/insecure_server_credentials.cc",
+ "src/cpp/server/server.cc",
+ "src/cpp/server/server_builder.cc",
+ "src/cpp/server/server_context.cc",
+ "src/cpp/server/server_credentials.cc",
+ "src/cpp/util/byte_buffer.cc",
+ "src/cpp/util/slice.cc",
+ "src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
+ "src/cpp/util/time.cc"
+ ]
+ },
+ {
+ "name": "grpc_base",
+ "public_headers": [
+ "include/grpc/byte_buffer.h",
+ "include/grpc/byte_buffer_reader.h",
+ "include/grpc/compression.h",
+ "include/grpc/grpc.h",
+ "include/grpc/status.h"
+ ],
+ "headers": [
+ "src/core/census/grpc_filter.h",
+ "src/core/channel/channel_args.h",
+ "src/core/channel/channel_stack.h",
+ "src/core/channel/client_channel.h",
+ "src/core/channel/compress_filter.h",
+ "src/core/channel/connected_channel.h",
+ "src/core/channel/context.h",
+ "src/core/channel/http_client_filter.h",
+ "src/core/channel/http_server_filter.h",
+ "src/core/channel/noop_filter.h",
+ "src/core/client_config/client_config.h",
+ "src/core/client_config/connector.h",
+ "src/core/client_config/lb_policies/pick_first.h",
+ "src/core/client_config/lb_policy.h",
+ "src/core/client_config/resolver.h",
+ "src/core/client_config/resolver_factory.h",
+ "src/core/client_config/resolver_registry.h",
+ "src/core/client_config/resolvers/dns_resolver.h",
+ "src/core/client_config/resolvers/sockaddr_resolver.h",
+ "src/core/client_config/subchannel.h",
+ "src/core/client_config/subchannel_factory.h",
+ "src/core/client_config/subchannel_factory_decorators/add_channel_arg.h",
+ "src/core/client_config/subchannel_factory_decorators/merge_channel_args.h",
+ "src/core/client_config/uri_parser.h",
+ "src/core/compression/message_compress.h",
+ "src/core/debug/trace.h",
+ "src/core/httpcli/format_request.h",
+ "src/core/httpcli/httpcli.h",
+ "src/core/httpcli/parser.h",
+ "src/core/iomgr/alarm.h",
+ "src/core/iomgr/alarm_heap.h",
+ "src/core/iomgr/alarm_internal.h",
+ "src/core/iomgr/endpoint.h",
+ "src/core/iomgr/endpoint_pair.h",
+ "src/core/iomgr/fd_posix.h",
+ "src/core/iomgr/iocp_windows.h",
+ "src/core/iomgr/iomgr.h",
+ "src/core/iomgr/iomgr_internal.h",
+ "src/core/iomgr/iomgr_posix.h",
+ "src/core/iomgr/pollset.h",
+ "src/core/iomgr/pollset_posix.h",
+ "src/core/iomgr/pollset_set.h",
+ "src/core/iomgr/pollset_set_posix.h",
+ "src/core/iomgr/pollset_set_windows.h",
+ "src/core/iomgr/pollset_windows.h",
+ "src/core/iomgr/resolve_address.h",
+ "src/core/iomgr/sockaddr.h",
+ "src/core/iomgr/sockaddr_posix.h",
+ "src/core/iomgr/sockaddr_utils.h",
+ "src/core/iomgr/sockaddr_win32.h",
+ "src/core/iomgr/socket_utils_posix.h",
+ "src/core/iomgr/socket_windows.h",
+ "src/core/iomgr/tcp_client.h",
+ "src/core/iomgr/tcp_posix.h",
+ "src/core/iomgr/tcp_server.h",
+ "src/core/iomgr/tcp_windows.h",
+ "src/core/iomgr/time_averaged_stats.h",
+ "src/core/iomgr/udp_server.h",
+ "src/core/iomgr/wakeup_fd_pipe.h",
+ "src/core/iomgr/wakeup_fd_posix.h",
+ "src/core/json/json.h",
+ "src/core/json/json_common.h",
+ "src/core/json/json_reader.h",
+ "src/core/json/json_writer.h",
+ "src/core/profiling/timers.h",
+ "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
+ "src/core/surface/api_trace.h",
+ "src/core/surface/byte_buffer_queue.h",
+ "src/core/surface/call.h",
+ "src/core/surface/channel.h",
+ "src/core/surface/completion_queue.h",
+ "src/core/surface/event_string.h",
+ "src/core/surface/init.h",
+ "src/core/surface/server.h",
+ "src/core/surface/surface_trace.h",
+ "src/core/transport/chttp2/alpn.h",
+ "src/core/transport/chttp2/bin_encoder.h",
+ "src/core/transport/chttp2/frame.h",
+ "src/core/transport/chttp2/frame_data.h",
+ "src/core/transport/chttp2/frame_goaway.h",
+ "src/core/transport/chttp2/frame_ping.h",
+ "src/core/transport/chttp2/frame_rst_stream.h",
+ "src/core/transport/chttp2/frame_settings.h",
+ "src/core/transport/chttp2/frame_window_update.h",
+ "src/core/transport/chttp2/hpack_parser.h",
+ "src/core/transport/chttp2/hpack_table.h",
+ "src/core/transport/chttp2/http2_errors.h",
+ "src/core/transport/chttp2/huffsyms.h",
+ "src/core/transport/chttp2/incoming_metadata.h",
+ "src/core/transport/chttp2/internal.h",
+ "src/core/transport/chttp2/status_conversion.h",
+ "src/core/transport/chttp2/stream_encoder.h",
+ "src/core/transport/chttp2/stream_map.h",
+ "src/core/transport/chttp2/timeout_encoding.h",
+ "src/core/transport/chttp2/varint.h",
+ "src/core/transport/chttp2_transport.h",
+ "src/core/transport/connectivity_state.h",
+ "src/core/transport/metadata.h",
+ "src/core/transport/stream_op.h",
+ "src/core/transport/transport.h",
+ "src/core/transport/transport_impl.h"
+ ],
+ "src": [
+ "src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
+ "src/core/channel/channel_args.c",
+ "src/core/channel/channel_stack.c",
+ "src/core/channel/client_channel.c",
+ "src/core/channel/compress_filter.c",
+ "src/core/channel/connected_channel.c",
+ "src/core/channel/http_client_filter.c",
+ "src/core/channel/http_server_filter.c",
+ "src/core/channel/noop_filter.c",
+ "src/core/client_config/client_config.c",
+ "src/core/client_config/connector.c",
+ "src/core/client_config/lb_policies/pick_first.c",
+ "src/core/client_config/lb_policy.c",
+ "src/core/client_config/resolver.c",
+ "src/core/client_config/resolver_factory.c",
+ "src/core/client_config/resolver_registry.c",
+ "src/core/client_config/resolvers/dns_resolver.c",
+ "src/core/client_config/resolvers/sockaddr_resolver.c",
+ "src/core/client_config/subchannel.c",
+ "src/core/client_config/subchannel_factory.c",
+ "src/core/client_config/subchannel_factory_decorators/add_channel_arg.c",
+ "src/core/client_config/subchannel_factory_decorators/merge_channel_args.c",
+ "src/core/client_config/uri_parser.c",
+ "src/core/compression/algorithm.c",
+ "src/core/compression/message_compress.c",
+ "src/core/debug/trace.c",
+ "src/core/httpcli/format_request.c",
+ "src/core/httpcli/httpcli.c",
+ "src/core/httpcli/parser.c",
+ "src/core/iomgr/alarm.c",
+ "src/core/iomgr/alarm_heap.c",
+ "src/core/iomgr/endpoint.c",
+ "src/core/iomgr/endpoint_pair_posix.c",
+ "src/core/iomgr/endpoint_pair_windows.c",
+ "src/core/iomgr/fd_posix.c",
+ "src/core/iomgr/iocp_windows.c",
+ "src/core/iomgr/iomgr.c",
+ "src/core/iomgr/iomgr_posix.c",
+ "src/core/iomgr/iomgr_windows.c",
+ "src/core/iomgr/pollset_multipoller_with_epoll.c",
+ "src/core/iomgr/pollset_multipoller_with_poll_posix.c",
+ "src/core/iomgr/pollset_posix.c",
+ "src/core/iomgr/pollset_set_posix.c",
+ "src/core/iomgr/pollset_set_windows.c",
+ "src/core/iomgr/pollset_windows.c",
+ "src/core/iomgr/resolve_address_posix.c",
+ "src/core/iomgr/resolve_address_windows.c",
+ "src/core/iomgr/sockaddr_utils.c",
+ "src/core/iomgr/socket_utils_common_posix.c",
+ "src/core/iomgr/socket_utils_linux.c",
+ "src/core/iomgr/socket_utils_posix.c",
+ "src/core/iomgr/socket_windows.c",
+ "src/core/iomgr/tcp_client_posix.c",
+ "src/core/iomgr/tcp_client_windows.c",
+ "src/core/iomgr/tcp_posix.c",
+ "src/core/iomgr/tcp_server_posix.c",
+ "src/core/iomgr/tcp_server_windows.c",
+ "src/core/iomgr/tcp_windows.c",
+ "src/core/iomgr/time_averaged_stats.c",
+ "src/core/iomgr/udp_server.c",
+ "src/core/iomgr/wakeup_fd_eventfd.c",
+ "src/core/iomgr/wakeup_fd_nospecial.c",
+ "src/core/iomgr/wakeup_fd_pipe.c",
+ "src/core/iomgr/wakeup_fd_posix.c",
+ "src/core/json/json.c",
+ "src/core/json/json_reader.c",
+ "src/core/json/json_string.c",
+ "src/core/json/json_writer.c",
+ "src/core/profiling/basic_timers.c",
+ "src/core/profiling/stap_timers.c",
+ "src/core/surface/api_trace.c",
+ "src/core/surface/byte_buffer.c",
+ "src/core/surface/byte_buffer_queue.c",
+ "src/core/surface/byte_buffer_reader.c",
+ "src/core/surface/call.c",
+ "src/core/surface/call_details.c",
+ "src/core/surface/call_log_batch.c",
+ "src/core/surface/channel.c",
+ "src/core/surface/channel_connectivity.c",
+ "src/core/surface/channel_create.c",
+ "src/core/surface/completion_queue.c",
+ "src/core/surface/event_string.c",
+ "src/core/surface/init.c",
+ "src/core/surface/lame_client.c",
+ "src/core/surface/metadata_array.c",
+ "src/core/surface/server.c",
+ "src/core/surface/server_chttp2.c",
+ "src/core/surface/server_create.c",
+ "src/core/surface/version.c",
+ "src/core/transport/chttp2/alpn.c",
+ "src/core/transport/chttp2/bin_encoder.c",
+ "src/core/transport/chttp2/frame_data.c",
+ "src/core/transport/chttp2/frame_goaway.c",
+ "src/core/transport/chttp2/frame_ping.c",
+ "src/core/transport/chttp2/frame_rst_stream.c",
+ "src/core/transport/chttp2/frame_settings.c",
+ "src/core/transport/chttp2/frame_window_update.c",
+ "src/core/transport/chttp2/hpack_parser.c",
+ "src/core/transport/chttp2/hpack_table.c",
+ "src/core/transport/chttp2/huffsyms.c",
+ "src/core/transport/chttp2/incoming_metadata.c",
+ "src/core/transport/chttp2/parsing.c",
+ "src/core/transport/chttp2/status_conversion.c",
+ "src/core/transport/chttp2/stream_encoder.c",
+ "src/core/transport/chttp2/stream_lists.c",
+ "src/core/transport/chttp2/stream_map.c",
+ "src/core/transport/chttp2/timeout_encoding.c",
+ "src/core/transport/chttp2/varint.c",
+ "src/core/transport/chttp2/writing.c",
+ "src/core/transport/chttp2_transport.c",
+ "src/core/transport/connectivity_state.c",
+ "src/core/transport/metadata.c",
+ "src/core/transport/stream_op.c",
+ "src/core/transport/transport.c",
+ "src/core/transport/transport_op_string.c"
+ ]
+ },
+ {
+ "name": "grpc_test_util_base",
+ "headers": [
+ "test/core/end2end/cq_verifier.h",
+ "test/core/end2end/fixtures/proxy.h",
+ "test/core/iomgr/endpoint_tests.h",
+ "test/core/security/oauth2_utils.h",
+ "test/core/util/grpc_profiler.h",
+ "test/core/util/parse_hexstring.h",
+ "test/core/util/port.h",
+ "test/core/util/slice_splitter.h"
+ ],
+ "src": [
+ "test/core/end2end/cq_verifier.c",
+ "test/core/end2end/fixtures/proxy.c",
+ "test/core/iomgr/endpoint_tests.c",
+ "test/core/security/oauth2_utils.c",
+ "test/core/util/grpc_profiler.c",
+ "test/core/util/parse_hexstring.c",
+ "test/core/util/port_posix.c",
+ "test/core/util/port_windows.c",
+ "test/core/util/slice_splitter.c"
+ ]
+ }
+ ],
+ "libs": [
+ {
+ "name": "gpr",
+ "build": "all",
+ "language": "c",
+ "public_headers": [
+ "include/grpc/support/alloc.h",
+ "include/grpc/support/atm.h",
+ "include/grpc/support/atm_gcc_atomic.h",
+ "include/grpc/support/atm_gcc_sync.h",
+ "include/grpc/support/atm_win32.h",
+ "include/grpc/support/cmdline.h",
+ "include/grpc/support/cpu.h",
+ "include/grpc/support/histogram.h",
+ "include/grpc/support/host_port.h",
+ "include/grpc/support/log.h",
+ "include/grpc/support/log_win32.h",
+ "include/grpc/support/port_platform.h",
+ "include/grpc/support/slice.h",
+ "include/grpc/support/slice_buffer.h",
+ "include/grpc/support/string_util.h",
+ "include/grpc/support/subprocess.h",
+ "include/grpc/support/sync.h",
+ "include/grpc/support/sync_generic.h",
+ "include/grpc/support/sync_posix.h",
+ "include/grpc/support/sync_win32.h",
+ "include/grpc/support/thd.h",
+ "include/grpc/support/time.h",
+ "include/grpc/support/tls.h",
+ "include/grpc/support/tls_gcc.h",
+ "include/grpc/support/tls_msvc.h",
+ "include/grpc/support/tls_pthread.h",
+ "include/grpc/support/useful.h"
+ ],
+ "headers": [
+ "src/core/support/env.h",
+ "src/core/support/file.h",
+ "src/core/support/murmur_hash.h",
+ "src/core/support/stack_lockfree.h",
+ "src/core/support/string.h",
+ "src/core/support/string_win32.h",
+ "src/core/support/thd_internal.h"
+ ],
+ "src": [
+ "src/core/support/alloc.c",
+ "src/core/support/cmdline.c",
+ "src/core/support/cpu_iphone.c",
+ "src/core/support/cpu_linux.c",
+ "src/core/support/cpu_posix.c",
+ "src/core/support/cpu_windows.c",
+ "src/core/support/env_linux.c",
+ "src/core/support/env_posix.c",
+ "src/core/support/env_win32.c",
+ "src/core/support/file.c",
+ "src/core/support/file_posix.c",
+ "src/core/support/file_win32.c",
+ "src/core/support/histogram.c",
+ "src/core/support/host_port.c",
+ "src/core/support/log.c",
+ "src/core/support/log_android.c",
+ "src/core/support/log_linux.c",
+ "src/core/support/log_posix.c",
+ "src/core/support/log_win32.c",
+ "src/core/support/murmur_hash.c",
+ "src/core/support/slice.c",
+ "src/core/support/slice_buffer.c",
+ "src/core/support/stack_lockfree.c",
+ "src/core/support/string.c",
+ "src/core/support/string_posix.c",
+ "src/core/support/string_win32.c",
+ "src/core/support/subprocess_posix.c",
+ "src/core/support/sync.c",
+ "src/core/support/sync_posix.c",
+ "src/core/support/sync_win32.c",
+ "src/core/support/thd.c",
+ "src/core/support/thd_posix.c",
+ "src/core/support/thd_win32.c",
+ "src/core/support/time.c",
+ "src/core/support/time_posix.c",
+ "src/core/support/time_win32.c",
+ "src/core/support/tls_pthread.c"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}"
+ },
+ {
+ "name": "gpr_test_util",
+ "build": "private",
+ "language": "c",
+ "headers": [
+ "test/core/util/test_config.h"
+ ],
+ "src": [
+ "test/core/util/test_config.c"
+ ],
+ "deps": [
+ "gpr"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{EAB0A629-17A9-44DB-B5FF-E91A721FE037}"
+ },
+ {
+ "name": "grpc",
+ "build": "all",
+ "language": "c",
+ "public_headers": [
+ "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/json_token.h",
+ "src/core/security/jwt_verifier.h",
+ "src/core/security/secure_endpoint.h",
+ "src/core/security/secure_transport_setup.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/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/json_token.c",
+ "src/core/security/jwt_verifier.c",
+ "src/core/security/secure_endpoint.c",
+ "src/core/security/secure_transport_setup.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": [
+ "gpr"
+ ],
+ "baselib": true,
+ "dll": "yes",
+ "filegroups": [
+ "grpc_base",
+ "census"
+ ],
+ "secure": "yes",
+ "vs_project_guid": "{29D16885-7228-4C31-81ED-5F9187C7F2A9}"
+ },
+ {
+ "name": "grpc_test_util",
+ "build": "private",
+ "language": "c",
+ "headers": [
+ "test/core/end2end/data/ssl_test_data.h"
+ ],
+ "src": [
+ "test/core/end2end/data/server1_cert.c",
+ "test/core/end2end/data/server1_key.c",
+ "test/core/end2end/data/test_root_cert.c"
+ ],
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc"
+ ],
+ "filegroups": [
+ "grpc_test_util_base"
+ ],
+ "vs_project_guid": "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}"
+ },
+ {
+ "name": "grpc_test_util_unsecure",
+ "build": "private",
+ "language": "c",
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc"
+ ],
+ "filegroups": [
+ "grpc_test_util_base"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{0A7E7F92-FDEA-40F1-A9EC-3BA484F98BBF}"
+ },
+ {
+ "name": "grpc_unsecure",
+ "build": "all",
+ "language": "c",
+ "src": [
+ "src/core/surface/init_unsecure.c"
+ ],
+ "deps": [
+ "gpr"
+ ],
+ "baselib": true,
+ "dll": "yes",
+ "filegroups": [
+ "grpc_base",
+ "census"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}"
+ },
+ {
+ "name": "grpc_zookeeper",
+ "build": "all",
+ "language": "c",
+ "public_headers": [
+ "include/grpc/grpc_zookeeper.h"
+ ],
+ "headers": [
+ "src/core/client_config/resolvers/zookeeper_resolver.h"
+ ],
+ "src": [
+ "src/core/client_config/resolvers/zookeeper_resolver.c"
+ ],
+ "deps": [
+ "gpr",
+ "grpc"
+ ],
+ "external_deps": [
+ "zookeeper"
+ ],
+ "secure": "no"
+ },
+ {
+ "name": "reconnect_server",
+ "build": "private",
+ "language": "c",
+ "headers": [
+ "test/core/util/reconnect_server.h"
+ ],
+ "src": [
+ "test/core/util/reconnect_server.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc++",
+ "build": "all",
+ "language": "c++",
+ "headers": [
+ "src/cpp/client/secure_credentials.h",
+ "src/cpp/common/secure_auth_context.h",
+ "src/cpp/server/secure_server_credentials.h"
+ ],
+ "src": [
+ "src/cpp/client/secure_channel_arguments.cc",
+ "src/cpp/client/secure_credentials.cc",
+ "src/cpp/common/auth_property_iterator.cc",
+ "src/cpp/common/secure_auth_context.cc",
+ "src/cpp/common/secure_create_auth_context.cc",
+ "src/cpp/server/secure_server_credentials.cc"
+ ],
+ "deps": [
+ "gpr",
+ "grpc"
+ ],
+ "baselib": true,
+ "dll": "yes",
+ "filegroups": [
+ "grpc++_base"
+ ],
+ "secure": "check",
+ "vs_project_guid": "{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}"
+ },
+ {
+ "name": "grpc++_test_config",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/util/test_config.h"
+ ],
+ "src": [
+ "test/cpp/util/test_config.cc"
+ ]
+ },
+ {
+ "name": "grpc++_test_util",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/util/cli_call.h",
+ "test/cpp/util/create_test_channel.h",
+ "test/cpp/util/subprocess.h"
+ ],
+ "src": [
+ "test/cpp/util/messages.proto",
+ "test/cpp/util/echo.proto",
+ "test/cpp/util/echo_duplicate.proto",
+ "test/cpp/util/cli_call.cc",
+ "test/cpp/util/create_test_channel.cc",
+ "test/cpp/util/subprocess.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc_test_util"
+ ]
+ },
+ {
+ "name": "grpc++_unsecure",
+ "build": "all",
+ "language": "c++",
+ "src": [
+ "src/cpp/common/insecure_create_auth_context.cc"
+ ],
+ "deps": [
+ "gpr",
+ "grpc_unsecure"
+ ],
+ "baselib": true,
+ "dll": "yes",
+ "filegroups": [
+ "grpc++_base"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{6EE56155-DF7C-4F6E-BFC4-F6F776BEB211}"
+ },
+ {
+ "name": "grpc_plugin_support",
+ "build": "protoc",
+ "language": "c++",
+ "headers": [
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "src/compiler/config.h",
+ "src/compiler/cpp_generator.h",
+ "src/compiler/cpp_generator_helpers.h",
+ "src/compiler/csharp_generator.h",
+ "src/compiler/csharp_generator_helpers.h",
+ "src/compiler/generator_helpers.h",
+ "src/compiler/objective_c_generator.h",
+ "src/compiler/objective_c_generator_helpers.h",
+ "src/compiler/python_generator.h",
+ "src/compiler/ruby_generator.h",
+ "src/compiler/ruby_generator_helpers-inl.h",
+ "src/compiler/ruby_generator_map-inl.h",
+ "src/compiler/ruby_generator_string-inl.h"
+ ],
+ "src": [
+ "src/compiler/cpp_generator.cc",
+ "src/compiler/csharp_generator.cc",
+ "src/compiler/objective_c_generator.cc",
+ "src/compiler/python_generator.cc",
+ "src/compiler/ruby_generator.cc"
+ ],
+ "deps": [],
+ "secure": "no",
+ "vs_project_guid": "{B6E81D84-2ACB-41B8-8781-493A944C7817}"
+ },
+ {
+ "name": "interop_client_helper",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/interop/client_helper.h"
+ ],
+ "src": [
+ "test/proto/messages.proto",
+ "test/cpp/interop/client_helper.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "interop_client_main",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/interop/interop_client.h"
+ ],
+ "src": [
+ "test/proto/empty.proto",
+ "test/proto/messages.proto",
+ "test/proto/test.proto",
+ "test/cpp/interop/client.cc",
+ "test/cpp/interop/interop_client.cc"
+ ],
+ "deps": [
+ "interop_client_helper",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "interop_server_helper",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/interop/server_helper.h"
+ ],
+ "src": [
+ "test/cpp/interop/server_helper.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "interop_server_main",
+ "build": "private",
+ "language": "c++",
+ "src": [
+ "test/proto/empty.proto",
+ "test/proto/messages.proto",
+ "test/proto/test.proto",
+ "test/cpp/interop/server.cc"
+ ],
+ "deps": [
+ "interop_server_helper",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "pubsub_client_lib",
+ "build": "do_not_build",
+ "language": "c++",
+ "headers": [
+ "examples/pubsub/publisher.h",
+ "examples/pubsub/subscriber.h"
+ ],
+ "src": [
+ "examples/pubsub/label.proto",
+ "examples/pubsub/empty.proto",
+ "examples/pubsub/pubsub.proto",
+ "examples/pubsub/publisher.cc",
+ "examples/pubsub/subscriber.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "qps",
+ "build": "private",
+ "language": "c++",
+ "headers": [
+ "test/cpp/qps/client.h",
+ "test/cpp/qps/driver.h",
+ "test/cpp/qps/histogram.h",
+ "test/cpp/qps/interarrival.h",
+ "test/cpp/qps/perf_db_client.h",
+ "test/cpp/qps/qps_worker.h",
+ "test/cpp/qps/report.h",
+ "test/cpp/qps/server.h",
+ "test/cpp/qps/stats.h",
+ "test/cpp/qps/timer.h",
+ "test/cpp/util/benchmark_config.h"
+ ],
+ "src": [
+ "test/cpp/qps/qpstest.proto",
+ "test/cpp/qps/perf_db.proto",
+ "test/cpp/qps/client_async.cc",
+ "test/cpp/qps/client_sync.cc",
+ "test/cpp/qps/driver.cc",
+ "test/cpp/qps/perf_db_client.cc",
+ "test/cpp/qps/qps_worker.cc",
+ "test/cpp/qps/report.cc",
+ "test/cpp/qps/server_async.cc",
+ "test/cpp/qps/server_sync.cc",
+ "test/cpp/qps/timer.cc",
+ "test/cpp/util/benchmark_config.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++_test_util",
+ "grpc++"
+ ]
+ },
+ {
+ "name": "grpc_csharp_ext",
+ "build": "all",
+ "language": "csharp",
+ "src": [
+ "src/csharp/ext/grpc_csharp_ext.c"
+ ],
+ "deps": [
+ "gpr",
+ "grpc"
+ ],
+ "dll": "only",
+ "vs_project_guid": "{D64C6D63-4458-4A88-AB38-35678384A7E4}"
+ }
+ ],
+ "targets": [
+ {
+ "name": "alarm_heap_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/alarm_heap_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "alarm_list_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/alarm_list_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "alarm_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/alarm_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "alpn_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/alpn_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "bin_encoder_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/bin_encoder_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "chttp2_status_conversion_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/status_conversion_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "chttp2_stream_encoder_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/stream_encoder_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "chttp2_stream_map_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/stream_map_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "compression_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/compression/compression_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "dualstack_socket_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/end2end/dualstack_socket_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "fd_conservation_posix_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/fd_conservation_posix_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "fd_posix_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/fd_posix_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "fling_client",
+ "build": "test",
+ "run": false,
+ "language": "c",
+ "src": [
+ "test/core/fling/client.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "fling_server",
+ "build": "test",
+ "run": false,
+ "language": "c",
+ "src": [
+ "test/core/fling/server.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "fling_stream_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/fling/fling_stream_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "fling_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/fling/fling_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "gen_hpack_tables",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "tools/codegen/core/gen_hpack_tables.c"
+ ],
+ "deps": [
+ "gpr",
+ "grpc"
+ ]
+ },
+ {
+ "name": "gpr_cmdline_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/cmdline_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_env_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/env_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_file_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/file_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_histogram_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/histogram_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_host_port_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/host_port_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_log_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/log_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_slice_buffer_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/slice_buffer_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_slice_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/slice_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_stack_lockfree_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/stack_lockfree_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_string_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/string_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_sync_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/sync_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_thd_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/thd_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_time_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/time_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_tls_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/tls_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "gpr_useful_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/useful_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_auth_context_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/auth_context_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_base64_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/base64_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_byte_buffer_reader_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/surface/byte_buffer_reader_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_channel_args_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/channel/channel_args_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_channel_stack_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/channel/channel_stack_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_completion_queue_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/surface/completion_queue_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_create_jwt",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "test/core/security/create_jwt.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_credentials_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/credentials_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_fetch_oauth2",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "test/core/security/fetch_oauth2.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_json_token_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/json_token_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_jwt_verifier_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/jwt_verifier_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_print_google_default_creds_token",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "test/core/security/print_google_default_creds_token.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_security_connector_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/security_connector_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_stream_op_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/stream_op_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_verify_jwt",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "test/core/security/verify_jwt.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "hpack_parser_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/hpack_parser_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "hpack_table_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/hpack_table_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "httpcli_format_request_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/httpcli/format_request_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "httpcli_parser_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/httpcli/parser_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "httpcli_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/httpcli/httpcli_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "json_rewrite",
+ "build": "test",
+ "run": false,
+ "language": "c",
+ "src": [
+ "test/core/json/json_rewrite.c"
+ ],
+ "deps": [
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "json_rewrite_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/json/json_rewrite_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "json_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/json/json_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "lame_client_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/surface/lame_client_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "low_level_ping_pong_benchmark",
+ "build": "benchmark",
+ "language": "c",
+ "src": [
+ "test/core/network_benchmarks/low_level_ping_pong.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "message_compress_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/compression/message_compress_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "multi_init_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/surface/multi_init_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "multiple_server_queues_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/end2end/multiple_server_queues_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "murmur_hash_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/support/murmur_hash_test.c"
+ ],
+ "deps": [
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "no_server_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/end2end/no_server_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "resolve_address_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/resolve_address_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "secure_endpoint_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/security/secure_endpoint_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "sockaddr_utils_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/sockaddr_utils_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "tcp_client_posix_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/tcp_client_posix_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "tcp_posix_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/tcp_posix_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "tcp_server_posix_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/tcp_server_posix_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "time_averaged_stats_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/time_averaged_stats_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "timeout_encoding_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/chttp2/timeout_encoding_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "timers_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/profiling/timers_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "transport_metadata_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/transport/metadata_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "transport_security_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/tsi/transport_security_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "udp_server_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/iomgr/udp_server_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "posix"
+ ]
+ },
+ {
+ "name": "uri_parser_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/client_config/uri_parser_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "async_end2end_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/async_end2end_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "async_streaming_ping_pong_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/async_streaming_ping_pong_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "async_unary_ping_pong_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/async_unary_ping_pong_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "auth_property_iterator_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/common/auth_property_iterator_test.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "channel_arguments_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/client/channel_arguments_test.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "cli_call_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/cli_call_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "client_crash_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/client_crash_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "client_crash_test_server",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/client_crash_test_server.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "credentials_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/client/credentials_test.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "cxx_byte_buffer_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/byte_buffer_test.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "cxx_slice_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/slice_test.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "cxx_string_ref_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/string_ref_test.cc"
+ ],
+ "deps": [
+ "grpc++"
+ ]
+ },
+ {
+ "name": "cxx_time_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/time_test.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "end2end_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/end2end_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "generic_end2end_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/generic_end2end_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "grpc_cli",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/cpp/util/grpc_cli.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "grpc_cpp_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/cpp_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{7E51A25F-AC59-488F-906C-C60FAAE706AA}"
+ },
+ {
+ "name": "grpc_csharp_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/csharp_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{3C813052-A49A-4662-B90A-1ADBEC7EE453}"
+ },
+ {
+ "name": "grpc_objective_c_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/objective_c_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{19564640-CEE6-4921-ABA5-676ED79A36F6}"
+ },
+ {
+ "name": "grpc_python_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/python_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{DF52D501-A6CF-4E6F-BA38-6EBE2E8DAFB2}"
+ },
+ {
+ "name": "grpc_ruby_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/ruby_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no",
+ "vs_project_guid": "{069E9D05-B78B-4751-9252-D21EBAE7DE8E}"
+ },
+ {
+ "name": "interop_client",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [],
+ "deps": [
+ "interop_client_main",
+ "interop_client_helper",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "interop_server",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [],
+ "deps": [
+ "interop_server_main",
+ "interop_server_helper",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "interop_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/interop/interop_test.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "mock_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/mock_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "pubsub_client",
+ "build": "do_not_build",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "examples/pubsub/main.cc"
+ ],
+ "deps": [
+ "pubsub_client_lib",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "pubsub_publisher_test",
+ "build": "do_not_build",
+ "language": "c++",
+ "src": [
+ "examples/pubsub/publisher_test.cc"
+ ],
+ "deps": [
+ "pubsub_client_lib",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "pubsub_subscriber_test",
+ "build": "do_not_build",
+ "language": "c++",
+ "src": [
+ "examples/pubsub/subscriber_test.cc"
+ ],
+ "deps": [
+ "pubsub_client_lib",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "qps_driver",
+ "build": "benchmark",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/qps_driver.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "qps_interarrival_test",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/qps_interarrival_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "qps_openloop_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/qps_openloop_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "qps_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/qps_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ],
+ "exclude_configs": [
+ "tsan"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "qps_worker",
+ "build": "benchmark",
+ "language": "c++",
+ "headers": [
+ "test/cpp/qps/client.h",
+ "test/cpp/qps/server.h"
+ ],
+ "src": [
+ "test/cpp/qps/worker.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "reconnect_interop_client",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/proto/empty.proto",
+ "test/proto/messages.proto",
+ "test/proto/test.proto",
+ "test/cpp/interop/reconnect_interop_client.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "reconnect_interop_server",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/proto/empty.proto",
+ "test/proto/messages.proto",
+ "test/proto/test.proto",
+ "test/cpp/interop/reconnect_interop_server.cc"
+ ],
+ "deps": [
+ "reconnect_server",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr",
+ "grpc++_test_config"
+ ]
+ },
+ {
+ "name": "secure_auth_context_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/common/secure_auth_context_test.cc"
+ ],
+ "deps": [
+ "grpc++",
+ "grpc",
+ "gpr"
+ ]
+ },
+ {
+ "name": "server_crash_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/server_crash_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "server_crash_test_client",
+ "build": "test",
+ "run": false,
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/server_crash_test_client.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "shutdown_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/shutdown_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "status_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/util/status_test.cc"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "sync_streaming_ping_pong_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/sync_streaming_ping_pong_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "sync_unary_ping_pong_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/qps/sync_unary_ping_pong_test.cc"
+ ],
+ "deps": [
+ "qps",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "platforms": [
+ "mac",
+ "linux",
+ "posix"
+ ]
+ },
+ {
+ "name": "thread_stress_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/thread_stress_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
+ "name": "zookeeper_test",
+ "build": "test",
+ "language": "c++",
+ "src": [
+ "test/cpp/end2end/zookeeper_test.cc"
+ ],
+ "deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpc++",
+ "grpc_zookeeper",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ],
+ "external_deps": [
+ "zookeeper"
+ ]
+ }
+ ]
+}
diff --git a/examples/csharp/helloworld/.nuget/packages.config b/examples/csharp/helloworld/.nuget/packages.config
index e2879c18932..1c1f118d466 100644
--- a/examples/csharp/helloworld/.nuget/packages.config
+++ b/examples/csharp/helloworld/.nuget/packages.config
@@ -1,4 +1,4 @@

-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/Greeter/Greeter.csproj b/examples/csharp/helloworld/Greeter/Greeter.csproj
index 3d92c4bf25a..2ae8620267f 100644
--- a/examples/csharp/helloworld/Greeter/Greeter.csproj
+++ b/examples/csharp/helloworld/Greeter/Greeter.csproj
@@ -1,6 +1,6 @@

-
+
@@ -13,7 +13,7 @@
Greeter
Greeter
v4.5
- 3ef64a6a
+ e423e365
true
@@ -37,9 +37,9 @@
..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
+
False
- ..\packages\Grpc.Core.0.7.0\lib\net45\Grpc.Core.dll
+ ..\packages\Grpc.Core.0.7.1\lib\net45\Grpc.Core.dll
@@ -65,10 +65,10 @@
-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/Greeter/packages.config b/examples/csharp/helloworld/Greeter/packages.config
index 1273624cbd0..c0f73879160 100644
--- a/examples/csharp/helloworld/Greeter/packages.config
+++ b/examples/csharp/helloworld/Greeter/packages.config
@@ -1,10 +1,10 @@

-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj b/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj
index 7874172bf26..af330f2b905 100644
--- a/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj
+++ b/examples/csharp/helloworld/GreeterClient/GreeterClient.csproj
@@ -1,6 +1,6 @@

-
+
@@ -13,7 +13,7 @@
GreeterClient
GreeterClient
v4.5
- c4057b0a
+ 2dcf22af
true
@@ -37,9 +37,9 @@
..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
+
False
- ..\packages\Grpc.Core.0.7.0\lib\net45\Grpc.Core.dll
+ ..\packages\Grpc.Core.0.7.1\lib\net45\Grpc.Core.dll
@@ -68,10 +68,10 @@
-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/GreeterClient/packages.config b/examples/csharp/helloworld/GreeterClient/packages.config
index 1273624cbd0..c0f73879160 100644
--- a/examples/csharp/helloworld/GreeterClient/packages.config
+++ b/examples/csharp/helloworld/GreeterClient/packages.config
@@ -1,10 +1,10 @@

-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj b/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj
index d1db2f4773b..752f32828b0 100644
--- a/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj
+++ b/examples/csharp/helloworld/GreeterServer/GreeterServer.csproj
@@ -1,6 +1,6 @@

-
+
@@ -13,7 +13,7 @@
GreeterServer
GreeterServer
v4.5
- cc15afe5
+ 53a3a588
true
@@ -37,9 +37,9 @@
..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
+
False
- ..\packages\Grpc.Core.0.7.0\lib\net45\Grpc.Core.dll
+ ..\packages\Grpc.Core.0.7.1\lib\net45\Grpc.Core.dll
@@ -68,10 +68,10 @@
-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/GreeterServer/packages.config b/examples/csharp/helloworld/GreeterServer/packages.config
index 1273624cbd0..c0f73879160 100644
--- a/examples/csharp/helloworld/GreeterServer/packages.config
+++ b/examples/csharp/helloworld/GreeterServer/packages.config
@@ -1,10 +1,10 @@

-
-
+
+
-
+
\ No newline at end of file
diff --git a/examples/csharp/helloworld/README.md b/examples/csharp/helloworld/README.md
index 3719080f4ae..f1af1f6793c 100644
--- a/examples/csharp/helloworld/README.md
+++ b/examples/csharp/helloworld/README.md
@@ -3,49 +3,52 @@ gRPC in 3 minutes (C#)
BACKGROUND
-------------
-For this sample, we've already generated the server and client stubs from `helloworld.proto`.
-Example projects depend on NuGet packages `Grpc` and `Google.ProtocolBuffers` which have been already added to the project for you.
+For this sample, we've already generated the server and client stubs from [helloworld.proto][].
+
+Example projects depend on the [Grpc](https://www.nuget.org/packages/Grpc/)
+and [Google.Protobuf](https://www.nuget.org/packages/Google.Protobuf/) NuGet packages
+which have been already added to the project for you.
PREREQUISITES
-------------
**Windows**
- .NET 4.5+
-- VS 2013 (with NuGet plugin installed)
+- Visual Studio 2013 or 2015
-**Linux (Mono)**
+**Linux**
- Mono
-- Monodevelop 5.9 with NuGet Add-in installed (older versions might work)
+- Monodevelop 5.9 with NuGet Add-in installed
-**MacOS (Mono)**
+**Mac OS X**
- Xamarin Studio (with NuGet plugin installed)
+- [homebrew][]
BUILD
-------
**Windows**
-- Clone this repository.
- Open solution `Greeter.sln` with Visual Studio
- Build the solution (this will automatically download NuGet dependencies)
-**Linux (Mono)**
-- Clone this repository.
+**Linux (Debian)**
+
+- Install gRPC C core and C# native extension using [How to use gRPC C#][] instructions
-- Install gRPC C Core using instructions in https://github.com/grpc/homebrew-grpc
+- Open solution `Greeter.sln` in MonoDevelop.
-- gRPC C# depends on native shared library `libgrpc_csharp_ext.so`. To make it visible
- to Mono runtime, follow instructions in [Using gRPC C# on Linux](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono)
+- Build the solution (you need to manually restore dependencies by using `mono nuget.exe restore` if you don't have NuGet add-in)
-- Open solution `Greeter.sln` in MonoDevelop (you need to manually restore dependencies by using `mono nuget.exe restore` if you don't have NuGet add-in)
+**Mac OS X**
-- Build the solution.
+- Install gRPC C core and C# native extension using [How to use gRPC C#][] instructions
-**MacOS (Mono)**
-- See [Using gRPC C# on MacOS](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono) for more info
- on MacOS support.
+- Open solution `Greeter.sln` with Xamarin Studio
-Try it!
+- Build the solution (this will automatically download NuGet dependencies)
+
+Try it!
-------
- Run the server
@@ -69,4 +72,9 @@ On Linux or Mac, use `mono GreeterServer.exe` and `mono GreeterClient.exe` to ru
Tutorial
--------
-You can find a more detailed tutorial in [gRPC Basics: C#](route_guide/README.md)
+You can find a more detailed tutorial in [gRPC Basics: C#][]
+
+[homebrew]:http://brew.sh
+[helloworld.proto]:../../protos/helloworld.proto
+[How to use gRPC C#]:../../../src/csharp#how-to-use
+[gRPC Basics: C#]:http://www.grpc.io/docs/tutorials/basic/csharp.html
diff --git a/examples/csharp/route_guide/.nuget/packages.config b/examples/csharp/route_guide/.nuget/packages.config
index e2879c18932..1c1f118d466 100644
--- a/examples/csharp/route_guide/.nuget/packages.config
+++ b/examples/csharp/route_guide/.nuget/packages.config
@@ -1,4 +1,4 @@

-
+
\ No newline at end of file
diff --git a/examples/csharp/route_guide/README.md b/examples/csharp/route_guide/README.md
index 155877e62e2..a9aa87a83df 100644
--- a/examples/csharp/route_guide/README.md
+++ b/examples/csharp/route_guide/README.md
@@ -1,386 +1,6 @@
-#gRPC Basics: C# #
+#gRPC Basics: C# sample code
-This tutorial provides a basic C# programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+The files in this folder are the samples used in [gRPC Basics: C#][],
+a detailed tutorial for using gRPC in C#.
-- Define a service in a .proto file.
-- Generate server and client code using the protocol buffer compiler.
-- Use the C# gRPC API to write a simple client and server for your service.
-
-It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial only uses the proto2 version of the protocol buffers language, as proto3 support for C# is not ready yet (see [protobuf C# README](https://github.com/google/protobuf/tree/master/csharp#proto2--proto3)).
-
-This isn't a comprehensive guide to using gRPC in C#: more reference documentation is coming soon.
-
-## Why use gRPC?
-
-Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
-
-With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
-
-## Example code and setup
-
-The example code for our tutorial is in [examples/csharp/route_guide](.). To download the example, clone this repository by running the following command:
-```shell
-$ git clone https://github.com/grpc/grpc.git
-```
-
-All the files for this tutorial are in the directory `examples/csharp/route_guide`.
-Open the solution `examples/csharp/route_guide/RouteGuide.sln` from Visual Studio (or Monodevelop on Linux).
-
-On Windows, you should not need to do anything besides opening the solution. All the needed dependencies will be restored
-for you automatically by the `Grpc` NuGet package upon building the solution.
-
-On Linux (or MacOS), you will first need to install protobuf and gRPC C Core using Linuxbrew (or Homebrew) tool in order to be
-able to generate the server and client interface code and run the examples. Follow the instructions for [Linux](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono) or [MacOS](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono).
-
-## Defining the service
-
-Our first step (as you'll know from [Getting started](https://github.com/grpc/grpc/tree/master/examples)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`RouteGuide/protos/route_guide.proto`](RouteGuide/protos/route_guide.proto).
-
-To define a service, you specify a named `service` in your .proto file:
-
-```protobuf
-service RouteGuide {
- ...
-}
-```
-
-Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
-
-- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
-```protobuf
- // Obtains the feature at a given position.
- rpc GetFeature(Point) returns (Feature) {}
-```
-
-- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type.
-```protobuf
- // Obtains the Features available within the given Rectangle. Results are
- // streamed rather than returned at once (e.g. in a response message with a
- // repeated field), as the rectangle may cover a large area and contain a
- // huge number of features.
- rpc ListFeatures(Rectangle) returns (stream Feature) {}
-```
-
-- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a server-side streaming method by placing the `stream` keyword before the *request* type.
-```protobuf
- // Accepts a stream of Points on a route being traversed, returning a
- // RouteSummary when traversal is completed.
- rpc RecordRoute(stream Point) returns (RouteSummary) {}
-```
-
-- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
-```protobuf
- // Accepts a stream of RouteNotes sent while a route is being traversed,
- // while receiving other RouteNotes (e.g. from other users).
- rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
-```
-
-Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
-```protobuf
-// Points are represented as latitude-longitude pairs in the E7 representation
-// (degrees multiplied by 10**7 and rounded to the nearest integer).
-// Latitudes should be in the range +/- 90 degrees and longitude should be in
-// the range +/- 180 degrees (inclusive).
-message Point {
- int32 latitude = 1;
- int32 longitude = 2;
-}
-```
-
-
-## Generating client and server code
-
-Next we need to generate the gRPC client and server interfaces from our .proto service definition. We do this using the protocol buffer compiler `protoc` with a special gRPC C# plugin.
-
-If you want to run this yourself, make sure you've installed protoc and gRPC C# plugin. The instructions vary based on your OS:
-- For Windows, the `Grpc.Tools` and `Google.Protobuf` NuGet packages contain the binaries you will need to generate the code.
-- For Linux, make sure you've [installed gRPC C Core using Linuxbrew](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono)
-- For MacOS, make sure you've [installed gRPC C Core using Homebrew](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono)
-
-Once that's done, the following command can be used to generate the C# code.
-
-To generate the code on Windows, we use `protoc.exe` from the `Google.Protobuf` NuGet package and `grpc_csharp_plugin.exe` from the `Grpc.Tools` NuGet package (both under the `tools` directory).
-Normally you would need to add the `Grpc.Tools` package to the solution yourself, but in this tutorial it has been already done for you. Following command should be run from the `csharp/route_guide` directory:
-```
-> packages\Google.Protobuf.3.0.0-alpha4\tools\protoc -I RouteGuide/protos --csharp_out=RouteGuide --grpc_out=RouteGuide --plugin=protoc-gen-grpc=packages\Grpc.Tools.0.7.0\tools\grpc_csharp_plugin.exe RouteGuide/protos/route_guide.proto
-```
-
-On Linux/MacOS, we rely on `protoc` and `grpc_csharp_plugin` being installed by Linuxbrew/Homebrew. Run this command from the route_guide directory:
-```shell
-$ protoc -I RouteGuide/protos --csharp_out=RouteGuide --grpc_out=RouteGuide --plugin=protoc-gen-grpc=`which grpc_csharp_plugin` RouteGuide/protos/route_guide.proto
-```
-
-Running one of the previous commands regenerates the following files in the RouteGuide directory:
-- `RouteGuide/RouteGuide.cs` defines a namespace `examples`
- - This contains all the protocol buffer code to populate, serialize, and retrieve our request and response message types
-- `RouteGuide/RouteGuideGrpc.cs`, provides stub and service classes
- - an interface `RouteGuide.IRouteGuide` to inherit from when defining RouteGuide service implementations
- - a class `RouteGuide.RouteGuideClient` that can be used to access remote RouteGuide instances
-
-
-
-## Creating the server
-
-First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
-
-There are two parts to making our `RouteGuide` service do its job:
-- Implementing the service interface generated from our service definition: doing the actual "work" of our service.
-- Running a gRPC server to listen for requests from clients and return the service responses.
-
-You can find our example `RouteGuide` server in [RouteGuideServer/RouteGuideImpl.cs](RouteGuideServer/RouteGuideServerImpl.cs). Let's take a closer look at how it works.
-
-### Implementing RouteGuide
-
-As you can see, our server has a `RouteGuideImpl` class that implements the generated `RouteGuide.IRouteGuide`:
-
-```csharp
-// RouteGuideImpl provides an implementation of the RouteGuide service.
-public class RouteGuideImpl : RouteGuide.IRouteGuide
-```
-
-#### Simple RPC
-
-`RouteGuideImpl` implements all our service methods. Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
-
-```csharp
- public Task GetFeature(Point request, Grpc.Core.ServerCallContext context)
- {
- return Task.FromResult(CheckFeature(request));
- }
-```
-
-The method is passed a context for the RPC (which is empty in the alpha release), the client's `Point` protocol buffer request, and returns a `Feature` protocol buffer. In the method we create the `Feature` with the appropriate information, and then return it. To allow asynchronous
-implementation, the method returns `Task` rather than just `Feature`. You are free to perform your computations synchronously and return
-the result once you've finished, just as we do in the example.
-
-#### Server-side streaming RPC
-
-Now let's look at something a bit more complicated - a streaming RPC. `ListFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature` protocol buffers to our client.
-
-```csharp
- // in RouteGuideImpl
- public async Task ListFeatures(Rectangle request,
- Grpc.Core.IServerStreamWriter responseStream,
- Grpc.Core.ServerCallContext context)
- {
- var responses = features.FindAll( (feature) => feature.Exists() && request.Contains(feature.Location) );
- foreach (var response in responses)
- {
- await responseStream.WriteAsync(response);
- }
- }
-```
-
-As you can see, here the request object is a `Rectangle` in which our client wants to find `Feature`s, but instead of returning a simple response we need to write responses to an asynchronous stream `IServerStreamWriter` using async method `WriteAsync`.
-
-#### Client-side streaming RPC
-
-Similarly, the client-side streaming method `RecordRoute` uses an [IAsyncEnumerator](https://github.com/Reactive-Extensions/Rx.NET/blob/master/Ix.NET/Source/System.Interactive.Async/IAsyncEnumerator.cs), to read the stream of requests using the async method `MoveNext` and the `Current` property.
-
-```csharp
- public async Task RecordRoute(Grpc.Core.IAsyncStreamReader requestStream,
- Grpc.Core.ServerCallContext context)
- {
- int pointCount = 0;
- int featureCount = 0;
- int distance = 0;
- Point previous = null;
- var stopwatch = new Stopwatch();
- stopwatch.Start();
-
- while (await requestStream.MoveNext())
- {
- var point = requestStream.Current;
- pointCount++;
- if (CheckFeature(point).Exists())
- {
- featureCount++;
- }
- if (previous != null)
- {
- distance += (int) previous.GetDistance(point);
- }
- previous = point;
- }
-
- stopwatch.Stop();
-
- return new RouteSummary
- {
- PointCount = pointCount,
- FeatureCount = featureCount,
- Distance = distance,
- ElapsedTime = (int)(stopwatch.ElapsedMilliseconds / 1000)
- };
- }
-```
-
-#### Bidirectional streaming RPC
-
-Finally, let's look at our bidirectional streaming RPC `RouteChat`.
-
-```csharp
- public async Task RouteChat(Grpc.Core.IAsyncStreamReader requestStream,
- Grpc.Core.IServerStreamWriter responseStream,
- Grpc.Core.ServerCallContext context,)
- {
- while (await requestStream.MoveNext())
- {
- var note = requestStream.Current;
- List prevNotes = AddNoteForLocation(note.Location, note);
- foreach (var prevNote in prevNotes)
- {
- await responseStream.WriteAsync(prevNote);
- }
- }
- }
-```
-
-Here the method receives both `requestStream` and `responseStream` arguments. Reading the requests is done the same way as in the client-side streaming method `RecordRoute`. Writing the responses is done the same way as in the server-side streaming method `ListFeatures`.
-
-### Starting the server
-
-Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service:
-
-```csharp
-var features = RouteGuideUtil.ParseFeatures(RouteGuideUtil.DefaultFeaturesFile);
-
-Server server = new Server
-{
- Services = { RouteGuide.BindService(new RouteGuideImpl(features)) },
- Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
-};
-server.Start();
-
-Console.WriteLine("RouteGuide server listening on port " + port);
-Console.WriteLine("Press any key to stop the server...");
-Console.ReadKey();
-
-server.ShutdownAsync().Wait();
-```
-As you can see, we build and start our server using `Grpc.Core.Server` class. To do this, we:
-
-1. Create an instance of `Grpc.Core.Server`.
-1. Create an instance of our service implementation class `RouteGuideImpl`.
-3. Register our service implementation by adding its service definition to `Services` collection (We obtain the service definition from the generated `RouteGuide.BindService` method).
-2. Specify the address and port we want to use to listen for client requests. This is done by adding `ServerPort` to `Ports` collection.
-4. Call `Start` on the server instance to start an RPC server for our service.
-
-
-## Creating the client
-
-In this section, we'll look at creating a C# client for our `RouteGuide` service. You can see our complete example client code in [RouteGuideClient/Program.cs](RouteGuideClient/Program.cs).
-
-### Creating a stub
-
-To call service methods, we first need to create a *stub*.
-
-First, we need to create a gRPC client channel that will connect to gRPC server. Then, we use the `RouteGuide.NewClient` method of the `RouteGuide` class generated from our .proto.
-
-```csharp
-Channel channel = new Channel("127.0.0.1:50052", Credentials.Insecure)
-var client = new RouteGuideClient(RouteGuide.NewClient(channel));
-
-// YOUR CODE GOES HERE
-
-channel.ShutdownAsync().Wait();
-```
-
-### Calling service methods
-
-Now let's look at how we call our service methods. gRPC C# provides asynchronous versions of each of the supported method types. For convenience,
-gRPC C# also provides a synchronous method stub, but only for simple (single request/single response) RPCs.
-
-#### Simple RPC
-
-Calling the simple RPC `GetFeature` in a synchronous way is nearly as straightforward as calling a local method.
-
-```csharp
-Point request = new Point { Latitude = 409146138, Longitude = -746188906 };
-Feature feature = client.GetFeature(request);
-```
-
-As you can see, we create and populate a request protocol buffer object (in our case `Point`), and call the desired method on the client object, passing it the request. If the RPC finishes with success, the response protocol buffer (in our case `Feature`) will be returned. Otherwise, an exception of type `RpcException` will be thrown, indicating the status code of the problem.
-
-Alternatively, if you are in async context, you can call an asynchronous version of the method (and use `await` keyword to await the result):
-```csharp
-Point request = new Point { Latitude = 409146138, Longitude = -746188906 };
-Feature feature = await client.GetFeatureAsync(request);
-```
-
-#### Streaming RPCs
-
-Now let's look at our streaming methods. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. The difference with respect to simple call is that the client methods return an instance of a call object, that provides access to request/response streams and/or asynchronous result (depending on the streaming type you are using).
-
-Here's where we call the server-side streaming method `ListFeatures`, which has property `ReponseStream` of type `IAsyncEnumerator`
-
-```csharp
-using (var call = client.ListFeatures(request))
-{
- while (await call.ResponseStream.MoveNext())
- {
- Feature feature = call.ResponseStream.Current;
- Console.WriteLine("Received " + feature.ToString());
- }
-}
-```
-
-The client-side streaming method `RecordRoute` is similar, except we use the property `RequestStream` to write the requests one by one using `WriteAsync` and eventually signal that no more request will be send using `CompleteAsync`. The method result can be obtained through the property
-`ResponseAsync`.
-```csharp
-using (var call = client.RecordRoute())
-{
- foreach (var point in points)
- {
- await call.RequestStream.WriteAsync(point);
- }
- await call.RequestStream.CompleteAsync();
-
- RouteSummary summary = await call.ResponseAsync;
-}
-```
-
-Finally, let's look at our bidirectional streaming RPC `RouteChat`. In this case, we write the request to `RequestStream` and receive the responses from `ResponseStream`. As you can see from the example, the streams are independent of each other.
-
-```csharp
- using (var call = client.RouteChat())
- {
- var responseReaderTask = Task.Run(async () =>
- {
- while (await call.ResponseStream.MoveNext())
- {
- var note = call.ResponseStream.Current;
- Console.WriteLine("Received " + note);
- }
- });
-
- foreach (RouteNote request in requests)
- {
- await call.RequestStream.WriteAsync(request);
- }
- await call.RequestStream.CompleteAsync();
- await responseReaderTask;
-}
-```
-
-## Try it out!
-
-Build client and server:
-
-Open the solution `examples/csharp/route_guide/RouteGuide.sln` from Visual Studio (or Monodevelop on Linux) and hit "Build".
-
-Run the server, which will listen on port 50052:
-```
-> cd RouteGuideServer/bin/Debug
-> RouteGuideServer.exe
-```
-
-Run the client (in a different terminal):
-```
-> cd RouteGuideClient/bin/Debug
-> RouteGuideClient.exe
-```
-
-You can also run the server and client directly from Visual Studio.
-
-On Linux or Mac, use `mono RouteGuideServer.exe` and `mono RouteGuideClient.exe` to run the server and client.
+[gRPC Basics: C#]:http://www.grpc.io/docs/tutorials/basic/csharp.html
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj
index 302a783aa46..d8f3c8f91d1 100644
--- a/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj
@@ -1,6 +1,6 @@

-
+
@@ -14,7 +14,7 @@
RouteGuide
v4.5
512
- 443bbc38
+ 256a7eeb
true
@@ -37,13 +37,13 @@
..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
+
False
- ..\packages\Grpc.Core.0.7.0\lib\net45\Grpc.Core.dll
+ ..\packages\Grpc.Core.0.7.1\lib\net45\Grpc.Core.dll
False
- ..\packages\Newtonsoft.Json.7.0.1-beta2\lib\net45\Newtonsoft.Json.dll
+ ..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll
@@ -77,12 +77,12 @@
-
-
+
+
-
+