From dead905b87c159ce8af7252c17f05cb3e40e7826 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Sat, 1 Aug 2015 21:34:31 -0700 Subject: [PATCH] expose Channel.Target property --- src/csharp/Grpc.Core.Tests/ChannelTest.cs | 9 +++++++++ src/csharp/Grpc.Core/Channel.cs | 9 +++++++++ src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs | 11 +++++++++++ src/csharp/ext/grpc_csharp_ext.c | 4 ++++ 4 files changed, 33 insertions(+) diff --git a/src/csharp/Grpc.Core.Tests/ChannelTest.cs b/src/csharp/Grpc.Core.Tests/ChannelTest.cs index bfe001b2920..60b45176e56 100644 --- a/src/csharp/Grpc.Core.Tests/ChannelTest.cs +++ b/src/csharp/Grpc.Core.Tests/ChannelTest.cs @@ -71,6 +71,15 @@ namespace Grpc.Core.Tests } } + [Test] + public void Target() + { + using (var channel = new Channel("127.0.0.1", Credentials.Insecure)) + { + Assert.IsTrue(channel.Target.Contains("127.0.0.1")); + } + } + [Test] public void Dispose_IsIdempotent() { diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs index 04fea8c9248..0b696104438 100644 --- a/src/csharp/Grpc.Core/Channel.cs +++ b/src/csharp/Grpc.Core/Channel.cs @@ -131,6 +131,15 @@ namespace Grpc.Core return tcs.Task; } + /// Address of the remote endpoint in URI format. + public string Target + { + get + { + return handle.GetTarget(); + } + } + /// /// Allows explicitly requesting channel to connect without starting an RPC. /// Returned task completes once state Ready was seen. If the deadline is reached, diff --git a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs index c017560b564..7324ebdf573 100644 --- a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs @@ -56,6 +56,9 @@ namespace Grpc.Core.Internal static extern void grpcsharp_channel_watch_connectivity_state(ChannelSafeHandle channel, ChannelState lastObservedState, Timespec deadline, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx); + [DllImport("grpc_csharp_ext.dll")] + static extern CStringSafeHandle grpcsharp_channel_get_target(ChannelSafeHandle call); + [DllImport("grpc_csharp_ext.dll")] static extern void grpcsharp_channel_destroy(IntPtr channel); @@ -93,6 +96,14 @@ namespace Grpc.Core.Internal grpcsharp_channel_watch_connectivity_state(this, lastObservedState, deadline, cq, ctx); } + public string GetTarget() + { + using (var cstring = grpcsharp_channel_get_target(this)) + { + return cstring.GetValue(); + } + } + protected override bool ReleaseHandle() { grpcsharp_channel_destroy(handle); diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c index 0e3a83d244b..8e2a5f0269a 100644 --- a/src/csharp/ext/grpc_csharp_ext.c +++ b/src/csharp/ext/grpc_csharp_ext.c @@ -394,6 +394,10 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_channel_watch_connectivity_state( deadline, cq, ctx); } +GPR_EXPORT char *GPR_CALLTYPE grpcsharp_channel_get_target(grpc_channel *channel) { + return grpc_channel_get_target(channel); +} + /* Channel args */ GPR_EXPORT grpc_channel_args *GPR_CALLTYPE