X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Runtime.Remoting%2FObjRef.cs;h=ad2fde125b27799abe3685ae6dc5ff22989282a0;hb=b0eff411fcc55fa6a7bbc5ee97bb592fe3204309;hp=21f109e2d63912e59336da9fa65ddaeeedc00c37;hpb=d521b3e35c0b5910d234781ad42db9586052c50b;p=mono.git diff --git a/mcs/class/corlib/System.Runtime.Remoting/ObjRef.cs b/mcs/class/corlib/System.Runtime.Remoting/ObjRef.cs index 21f109e2d63..ad2fde125b2 100644 --- a/mcs/class/corlib/System.Runtime.Remoting/ObjRef.cs +++ b/mcs/class/corlib/System.Runtime.Remoting/ObjRef.cs @@ -10,12 +10,39 @@ // (C) 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.Runtime.Serialization; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Proxies; +#if NET_2_0 +using System.Runtime.ConstrainedExecution; +#endif + namespace System.Runtime.Remoting { [Serializable] @@ -38,6 +65,13 @@ namespace System.Runtime.Remoting { UpdateChannelInfo(); } + internal ObjRef (string typeName, string uri, IChannelInfo cinfo) + { + this.uri = uri; + channel_info = cinfo; + typeInfo = new TypeInfo (Type.GetType (typeName)); + } + internal ObjRef (ObjRef o, bool unmarshalAsProxy) { channel_info = o.channel_info; uri = o.uri; @@ -47,7 +81,7 @@ namespace System.Runtime.Remoting { flags = o.flags; if (unmarshalAsProxy) flags |= MarshalledObjectRef; } - + public ObjRef (MarshalByRefObject mbr, Type type) { if (mbr == null) @@ -62,7 +96,7 @@ namespace System.Runtime.Remoting { uri = RemotingServices.GetObjectUri(mbr); typeInfo = new TypeInfo(type); - if (!typeInfo.CanCastTo(mbr.GetType(), mbr)) + if (!type.IsInstanceOfType (mbr)) throw new RemotingException ("The server object type cannot be cast to the requested type " + type.FullName + "."); UpdateChannelInfo(); @@ -74,7 +108,7 @@ namespace System.Runtime.Remoting { typeInfo = new TypeInfo(type); if (remoteChannelData != null) - channel_info = new ChannelInfoStore (remoteChannelData); + channel_info = new ChannelInfo (remoteChannelData); flags |= WellKnowObjectRef; } @@ -103,7 +137,7 @@ namespace System.Runtime.Remoting { case "fIsMarshalled": int status; Object o = en.Value; - if (o.GetType().Equals(typeof(String))) + if (o is string) status = ((IConvertible) o).ToInt32(null); else status = (int) o; @@ -112,7 +146,7 @@ namespace System.Runtime.Remoting { marshalledValue = false; break; case "objrefFlags": - flags = (int) en.Value; + flags = Convert.ToInt32 (en.Value); break; default: throw new NotSupportedException (); @@ -130,13 +164,15 @@ namespace System.Runtime.Remoting { return false; } - public bool IsReferenceToWellKnow + internal bool IsReferenceToWellKnow { get { return (flags & WellKnowObjectRef) > 0; } } public virtual IChannelInfo ChannelInfo { - +#if NET_2_0 + [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)] +#endif get { return channel_info; } @@ -146,7 +182,6 @@ namespace System.Runtime.Remoting { } } - [MonoTODO] public virtual IEnvoyInfo EnvoyInfo { get { return envoyInfo; @@ -156,7 +191,6 @@ namespace System.Runtime.Remoting { } } - [MonoTODO] public virtual IRemotingTypeInfo TypeInfo { get { return typeInfo; @@ -201,16 +235,26 @@ namespace System.Runtime.Remoting { return identity.IsFromThisAppDomain; } - [MonoTODO] +#if NET_2_0 + [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)] +#endif public bool IsFromThisProcess () { - // as yet we do not consider this optimization - return false; + foreach (object data in channel_info.ChannelData) + { + if (data is CrossAppDomainData) + { + string refProcId = ((CrossAppDomainData)data).ProcessID; + return (refProcId == RemotingConfiguration.ProcessId); + } + } + + return true; } internal void UpdateChannelInfo() { - channel_info = new ChannelInfoStore (); + channel_info = new ChannelInfo (); } internal Type ServerType