X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Runtime.Remoting.Proxies%2FRemotingProxy.cs;h=02f6d2b8d36d11ca09a33e65473967fe7f14211c;hb=ac194553049b2eeb328f5fc54b708da9b95f4d88;hp=a01be8f8a649a39da26093aed35780b4c5fd7f02;hpb=44f764f69b0f63ef058be1b93f34d8aa2b43e708;p=mono.git diff --git a/mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs b/mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs index a01be8f8a64..02f6d2b8d36 100644 --- a/mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs +++ b/mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs @@ -8,6 +8,29 @@ // (C) 2001 Ximian, Inc. http://www.ximian.com // +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + using System; using System.Reflection; using System.Runtime.Remoting.Messaging; @@ -29,7 +52,6 @@ namespace System.Runtime.Remoting.Proxies IMessageSink _sink; bool _hasEnvoySink; ConstructionCall _ctorCall; - string _targetUri; internal RemotingProxy (Type type, ClientIdentity identity) : base (type, identity) { @@ -46,16 +68,21 @@ namespace System.Runtime.Remoting.Proxies public override IMessage Invoke (IMessage request) { - MonoMethodMessage mMsg = (MonoMethodMessage) request; - - if (mMsg.MethodBase == _cache_GetHashCodeMethod) - return new MethodResponse(ObjectIdentity.GetHashCode(), null, null, request as IMethodCallMessage); - - if (mMsg.MethodBase == _cache_GetTypeMethod) - return new MethodResponse(GetProxiedType(), null, null, request as IMethodCallMessage); - - mMsg.Uri = _targetUri; - ((IInternalMessage)mMsg).TargetIdentity = _objectIdentity; + IMethodCallMessage mm = request as IMethodCallMessage; + + if (mm != null) { + if (mm.MethodBase == _cache_GetHashCodeMethod) + return new MethodResponse(ObjectIdentity.GetHashCode(), null, null, mm); + + if (mm.MethodBase == _cache_GetTypeMethod) + return new MethodResponse(GetProxiedType(), null, null, mm); + } + + IInternalMessage im = request as IInternalMessage; + if (im != null) { + if (im.Uri == null) im.Uri = _targetUri; + im.TargetIdentity = _objectIdentity; + } _objectIdentity.NotifyClientDynamicSinks (true, request, true, false); @@ -68,7 +95,8 @@ namespace System.Runtime.Remoting.Proxies else sink = _sink; - if (mMsg.CallType == CallType.Sync) + MonoMethodMessage mMsg = request as MonoMethodMessage; + if (mMsg == null || mMsg.CallType == CallType.Sync) response = sink.SyncProcessMessage (request); else { @@ -92,6 +120,7 @@ namespace System.Runtime.Remoting.Proxies ClientActivatedIdentity cai = (ClientActivatedIdentity)identity; _targetContext = cai.Context; AttachServer (cai.GetServerObject ()); + cai.SetClientProxy ((MarshalByRefObject) GetTransparentProxy()); } if (identity is ClientIdentity)