From 747d350b20a102b6720ef5c030ba55e18c5349de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6llner?= Date: Mon, 6 Apr 2020 21:55:02 +0200 Subject: [PATCH] moved Endpoint prop. to RemoteCapability --- Capnp.Net.Runtime/Rpc/ConsumedCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/ImportedCapability.cs | 2 -- .../Rpc/Interception/CensorCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/LazyCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/LocalCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/PromisedCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs | 2 -- Capnp.Net.Runtime/Rpc/RemoteCapability.cs | 2 ++ Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs | 13 +++---------- Capnp.Net.Runtime/Rpc/RpcEngine.cs | 2 +- 11 files changed, 6 insertions(+), 27 deletions(-) diff --git a/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs b/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs index 675fa97..594f375 100644 --- a/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs +++ b/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs @@ -16,8 +16,6 @@ namespace Capnp.Rpc /// protected abstract void ReleaseRemotely(); internal abstract Action? Export(IRpcEndpoint endpoint, CapDescriptor.WRITER writer); - internal abstract IRpcEndpoint? Endpoint { get; } - internal abstract void AddRef(); internal abstract void Release(); diff --git a/Capnp.Net.Runtime/Rpc/ImportedCapability.cs b/Capnp.Net.Runtime/Rpc/ImportedCapability.cs index ca9d75a..0cb2be4 100644 --- a/Capnp.Net.Runtime/Rpc/ImportedCapability.cs +++ b/Capnp.Net.Runtime/Rpc/ImportedCapability.cs @@ -28,8 +28,6 @@ namespace Capnp.Rpc return call; } - internal override IRpcEndpoint? Endpoint => _ep; - internal override Action? Export(IRpcEndpoint endpoint, CapDescriptor.WRITER capDesc) { if (endpoint == _ep) diff --git a/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs b/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs index d6f1fbd..54f4754 100644 --- a/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs +++ b/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs @@ -34,7 +34,5 @@ namespace Capnp.Rpc.Interception writer.SenderHosted = endpoint.AllocateExport(MyVine, out bool _); return null; } - - internal override IRpcEndpoint? Endpoint => null; } } \ No newline at end of file diff --git a/Capnp.Net.Runtime/Rpc/LazyCapability.cs b/Capnp.Net.Runtime/Rpc/LazyCapability.cs index 1289280..90f91a8 100644 --- a/Capnp.Net.Runtime/Rpc/LazyCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LazyCapability.cs @@ -33,8 +33,6 @@ namespace Capnp.Rpc _capTask = AwaitCap(); } - internal override IRpcEndpoint? Endpoint => null; - internal override Action? Export(IRpcEndpoint endpoint, CapDescriptor.WRITER writer) { if (WhenResolved.ReplacementTaskIsCompletedSuccessfully()) diff --git a/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs b/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs index bfd9208..be55b2c 100644 --- a/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs @@ -29,8 +29,6 @@ namespace Capnp.Rpc } - internal override IRpcEndpoint? Endpoint => null; - public Task WhenResolved => _whenResolvedProxy; public T? GetResolvedCapability() where T : class => _whenResolvedProxy.GetResolvedCapability(); diff --git a/Capnp.Net.Runtime/Rpc/LocalCapability.cs b/Capnp.Net.Runtime/Rpc/LocalCapability.cs index c3ab966..140fa50 100644 --- a/Capnp.Net.Runtime/Rpc/LocalCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LocalCapability.cs @@ -52,8 +52,6 @@ namespace Capnp.Rpc return null; } - internal override IRpcEndpoint? Endpoint => null; - protected override void ReleaseRemotely() { } diff --git a/Capnp.Net.Runtime/Rpc/PromisedCapability.cs b/Capnp.Net.Runtime/Rpc/PromisedCapability.cs index 779f5ab..1f3a782 100644 --- a/Capnp.Net.Runtime/Rpc/PromisedCapability.cs +++ b/Capnp.Net.Runtime/Rpc/PromisedCapability.cs @@ -23,8 +23,6 @@ namespace Capnp.Rpc public override Task WhenResolved => _resolvedCap.Task; public override T? GetResolvedCapability() where T: class => _whenResolvedProxy.GetResolvedCapability(); - internal override IRpcEndpoint? Endpoint => _ep; - internal override Action? Export(IRpcEndpoint endpoint, CapDescriptor.WRITER writer) { lock (_reentrancyBlocker) diff --git a/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs index 214a077..b2be02f 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs @@ -174,8 +174,6 @@ namespace Capnp.Rpc return call; } - internal override IRpcEndpoint Endpoint => _ep; - internal override Action? Export(IRpcEndpoint endpoint, CapDescriptor.WRITER writer) { lock (_question.ReentrancyBlocker) diff --git a/Capnp.Net.Runtime/Rpc/RemoteCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteCapability.cs index 1852c56..f767fff 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteCapability.cs @@ -13,6 +13,8 @@ namespace Capnp.Rpc _ep = ep; } + internal IRpcEndpoint Endpoint => _ep; + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var call = SetupMessage(args, interfaceId, methodId); diff --git a/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs index c8f4108..7ff6553 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs @@ -32,18 +32,11 @@ namespace Capnp.Rpc protected IPromisedAnswer CallOnResolution(ulong interfaceId, ushort methodId, DynamicSerializerState args) { - if (ResolvedCap == null) - throw new InvalidOperationException("Capability not yet resolved, calling on resolution not possible"); + var resolvedCap = ResolvedCap!; try { - if (ResolvedCap.Endpoint!= null && ResolvedCap.Endpoint != _ep) - { - // Carol lives in a different Vat C. - throw new NotImplementedException("Sorry, level 3 RPC is not yet supported."); - } - - if (ResolvedCap.Endpoint != null || + if (resolvedCap is RemoteCapability || //# Note that in the case where Carol actually lives in Vat B (i.e., the same vat that the promise //# already pointed at), no embargo is needed, because the pipelined calls are delivered over the //# same path as the later direct calls. @@ -58,7 +51,7 @@ namespace Capnp.Rpc #if DebugEmbargos Logger.LogDebug("Direct call"); #endif - using var proxy = new Proxy(ResolvedCap); + using var proxy = new Proxy(resolvedCap); return proxy.Call(interfaceId, methodId, args, default); } else diff --git a/Capnp.Net.Runtime/Rpc/RpcEngine.cs b/Capnp.Net.Runtime/Rpc/RpcEngine.cs index ed13068..5a55cd6 100644 --- a/Capnp.Net.Runtime/Rpc/RpcEngine.cs +++ b/Capnp.Net.Runtime/Rpc/RpcEngine.cs @@ -891,7 +891,7 @@ namespace Capnp.Rpc { using var proxy = await t; - if (proxy.ConsumedCap?.Endpoint == this) + if (proxy.ConsumedCap is RemoteCapability remote && remote.Endpoint == this) { #if DebugEmbargos Logger.LogDebug($"Sender loopback disembargo. Thread = {Thread.CurrentThread.Name}");