2006-07-15 Jonathan Chambers <joncham@gmail.com>
[mono.git] / mcs / class / corlib / System.Runtime.Remoting / RemotingServices.cs
index 70b2f9aa8b0c37a8c95a881023d63aedde0b1aab..9fa45c85328fe4eb1c1201bc9b481fd2b0faf7d1 100644 (file)
@@ -7,10 +7,7 @@
 //   Patrik Torstensson
 //
 // (C) 2001 Ximian, Inc.  http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004, 2006 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
@@ -32,7 +29,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
 using System.Diagnostics;
 using System.Text;
 using System.Reflection;
@@ -49,6 +45,7 @@ using System.Runtime.Serialization;
 using System.Runtime.Serialization.Formatters.Binary;
 using System.IO;
 using System.Runtime.Remoting.Services;
+using System.Security.Permissions;
 
 #if NET_2_0
 using System.Runtime.ConstrainedExecution;
@@ -437,15 +434,25 @@ namespace System.Runtime.Remoting
 
                public static bool IsObjectOutOfAppDomain(object tp)
                {
+                       MarshalByRefObject mbr = tp as MarshalByRefObject;
+
+                       if (mbr == null)
+                               return false;
+
                        // TODO: use internal call for better performance
-                       Identity ident = GetObjectIdentity((MarshalByRefObject)tp);
+                       Identity ident = GetObjectIdentity (mbr);
                        return ident is ClientIdentity;
                }
 
                public static bool IsObjectOutOfContext(object tp)
                {
+                       MarshalByRefObject mbr = tp as MarshalByRefObject;
+
+                       if (mbr == null)
+                               return false;
+
                        // TODO: use internal call for better performance
-                       Identity ident = GetObjectIdentity((MarshalByRefObject)tp);
+                       Identity ident = GetObjectIdentity (mbr);
                        if (ident == null) return false;
                        
                        ServerIdentity sident = ident as ServerIdentity;
@@ -522,6 +529,12 @@ namespace System.Runtime.Remoting
                        RemotingProxy proxy = new RemotingProxy (type, ChannelServices.CrossContextUrl, activationAttributes);
                        return proxy.GetTransparentProxy();
                }
+
+               internal static object CreateClientProxyForComInterop (Type type)
+               {
+                       Mono.Interop.ComInteropProxy proxy = new Mono.Interop.ComInteropProxy (type);
+                       return proxy.GetTransparentProxy ();
+               }
        
                internal static Identity GetIdentityForUri (string uri)
                {
@@ -704,6 +717,7 @@ namespace System.Runtime.Remoting
                }
 
                // This method is called by the runtime
+               [SecurityPermission (SecurityAction.Assert, SerializationFormatter = true)] // FIXME: to be reviewed
                internal static byte[] SerializeCallData (object obj)
                {
                        LogicalCallContext ctx = CallContext.CreateLogicalCallContext (false);
@@ -721,6 +735,7 @@ namespace System.Runtime.Remoting
                }
 
                // This method is called by the runtime
+               [SecurityPermission (SecurityAction.Assert, SerializationFormatter = true)] // FIXME: to be reviewed
                internal static object DeserializeCallData (byte[] array)
                {
                        if (array == null) return null;
@@ -737,6 +752,7 @@ namespace System.Runtime.Remoting
                }
                
                // This method is called by the runtime
+               [SecurityPermission (SecurityAction.Assert, SerializationFormatter = true)] // FIXME: to be reviewed
                internal static byte[] SerializeExceptionData (Exception ex)
                {
                        try {