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 @@ - - + + - +