示例#1
0
        // Token: 0x060058CC RID: 22732 RVA: 0x0013836C File Offset: 0x0013656C
        internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
        {
            object             obj = CrossAppDomainSink.staticSyncObject;
            CrossAppDomainSink result;

            lock (obj)
            {
                int domainID = xadData.DomainID;
                if (CrossAppDomainSink._sinks == null)
                {
                    CrossAppDomainSink.GrowArrays(0);
                }
                int num = 0;
                while (CrossAppDomainSink._sinks[num] != null)
                {
                    if (CrossAppDomainSink._sinkKeys[num] == domainID)
                    {
                        return(CrossAppDomainSink._sinks[num]);
                    }
                    num++;
                    if (num == CrossAppDomainSink._sinks.Length)
                    {
                        CrossAppDomainSink.GrowArrays(num);
                        break;
                    }
                }
                CrossAppDomainSink._sinks[num]    = new CrossAppDomainSink(xadData);
                CrossAppDomainSink._sinkKeys[num] = domainID;
                result = CrossAppDomainSink._sinks[num];
            }
            return(result);
        }
示例#2
0
 internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
 {
     lock (CrossAppDomainSink.staticSyncObject)
     {
         int local_2 = xadData.DomainID;
         if (CrossAppDomainSink._sinks == null)
         {
             CrossAppDomainSink.GrowArrays(0);
         }
         int local_3 = 0;
         while (CrossAppDomainSink._sinks[local_3] != null)
         {
             if (CrossAppDomainSink._sinkKeys[local_3] == local_2)
             {
                 return(CrossAppDomainSink._sinks[local_3]);
             }
             ++local_3;
             if (local_3 == CrossAppDomainSink._sinks.Length)
             {
                 CrossAppDomainSink.GrowArrays(local_3);
                 break;
             }
         }
         CrossAppDomainSink._sinks[local_3]    = new CrossAppDomainSink(xadData);
         CrossAppDomainSink._sinkKeys[local_3] = local_2;
         return(CrossAppDomainSink._sinks[local_3]);
     }
 }
示例#3
0
 internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
 {
     lock (staticSyncObject)
     {
         int domainID = xadData.DomainID;
         if (_sinks == null)
         {
             GrowArrays(0);
         }
         int index = 0;
         while (_sinks[index] != null)
         {
             if (_sinkKeys[index] == domainID)
             {
                 return(_sinks[index]);
             }
             index++;
             if (index == _sinks.Length)
             {
                 GrowArrays(index);
                 break;
             }
         }
         _sinks[index]    = new CrossAppDomainSink(xadData);
         _sinkKeys[index] = domainID;
         return(_sinks[index]);
     }
 }
        [System.Security.SecurityCritical]  // auto-generated
        public virtual IMessageSink CreateMessageSink(String url, Object data,
                                                      out String objectURI)
        {
            // Set the out parameters
            objectURI = null;
            IMessageSink sink = null;

            // <


            if ((null != url) && (data == null))
            {
                if (url.StartsWith(_channelName, StringComparison.Ordinal))
                {
                    throw new RemotingException(
                              Environment.GetResourceString(
                                  "Remoting_AppDomains_NYI"));
                }
            }
            else
            {
                Message.DebugOut("XAPPDOMAIN::Creating sink for data \n");
                CrossAppDomainData xadData = data as CrossAppDomainData;
                if (null != xadData)
                {
                    if (xadData.ProcessGuid.Equals(Identity.ProcessGuid))
                    {
                        sink = CrossAppDomainSink.FindOrCreateSink(xadData);
                    }
                }
            }
            return(sink);
        }
 internal TransitionCall(IntPtr targetCtxID, IntPtr eeData, int targetDomainID)
 {
     string str;
     this._sourceCtxID = Thread.CurrentContext.InternalContextID;
     this._targetCtxID = targetCtxID;
     this._delegate = null;
     this._targetDomainID = targetDomainID;
     this._eeData = eeData;
     this._srvID = null;
     this._ID = new Identity("TransitionCallURI", null);
     CrossAppDomainData data = new CrossAppDomainData(this._targetCtxID, this._targetDomainID, Identity.ProcessGuid);
     IMessageSink channelSink = CrossAppDomainChannel.AppDomainChannel.CreateMessageSink(null, data, out str);
     this._ID.RaceSetChannelSink(channelSink);
 }
 internal CrossAppDomainSink(CrossAppDomainData xadData)
 {
     //
     // WARNING: xadData.ContextID may not be valid at this point.  Because
     //          CrossAppDomainData._ContextID is an IntPtr and IntPtrs are
     //          value types, the deserializer has to wait until the very
     //          end of deserialization to fixup value types.  However, when
     //          we unmarshal objects, we need to setup the x-AD sink and
     //          initialize it with this data.  Fortunately, that data won't
     //          be consumed until deserialization is complete, so we just
     //          need to take care not to read _ContextID in the constructor.
     //          The xadData object ref will be finalized by the time we need
     //          to consume its contents and everything should work properly.
     //
     _xadData = xadData;
 }
示例#7
0
 public virtual IMessageSink CreateMessageSink(string url, object data, out string uri)
 {
     uri = null;
     if (data != null)
     {
         CrossAppDomainData crossAppDomainData = data as CrossAppDomainData;
         if (crossAppDomainData != null && crossAppDomainData.ProcessID == RemotingConfiguration.ProcessId)
         {
             return(CrossAppDomainSink.GetSink(crossAppDomainData.DomainID));
         }
     }
     if (url != null && url.StartsWith("MONOCAD"))
     {
         throw new NotSupportedException("Can't create a named channel via crossappdomain");
     }
     return(null);
 }
        // IChannelSender
        public virtual IMessageSink CreateMessageSink(String url, Object data, out String uri)
        {
            uri = null;

            if (data != null)
            {
                // Get the data and then get the sink
                CrossAppDomainData cadData = data as CrossAppDomainData;
                if (cadData != null && cadData.ProcessID == RemotingConfiguration.ProcessId)
                {
                    // GetSink creates a new sink if we don't have any (use contexts here later)
                    return(CrossAppDomainSink.GetSink(cadData.DomainID));
                }
            }
            if (url != null && url.StartsWith(_strName))
            {
                throw new NotSupportedException("Can't create a named channel via crossappdomain");
            }

            return(null);
        }
示例#9
0
        public virtual IMessageSink CreateMessageSink(string url, object data, out string objectURI)
        {
            objectURI = null;
            IMessageSink sink = null;

            if ((url != null) && (data == null))
            {
                if (url.StartsWith("XAPPDMN", StringComparison.Ordinal))
                {
                    throw new RemotingException(Environment.GetResourceString("Remoting_AppDomains_NYI"));
                }
                return(sink);
            }
            CrossAppDomainData xadData = data as CrossAppDomainData;

            if ((xadData != null) && xadData.ProcessGuid.Equals(Identity.ProcessGuid))
            {
                sink = CrossAppDomainSink.FindOrCreateSink(xadData);
            }
            return(sink);
        }
        public virtual IMessageSink CreateMessageSink(String url, Object data,
                                                      out String objectURI)
        {
            // Set the out parameters
            objectURI = null;
            IMessageSink sink = null;

            // FUTURE: this url parsing part will be useful only when
            // we have wellknown x-appdomain objects (that use the appdomain
            // channel)
            if ((null != url) && (data == null))
            {
                if (url.StartsWith(_channelName))
                {
                    throw new RemotingException(
                              Environment.GetResourceString(
                                  "Remoting_AppDomains_NYI"));
                }
            }
            else
            {
                Message.DebugOut("XAPPDOMAIN::Creating sink for data \n");
                CrossAppDomainData xadData = data as CrossAppDomainData;
                if (null != xadData)
                {
                    if (xadData.ProcessGuid.Equals(Identity.ProcessGuid))
                    {
                        int srvContextID = xadData.ContextID;
                        int srvDomainID  = xadData.DomainID;
                        sink = CrossAppDomainSink.FindOrCreateSink(
                            srvContextID,
                            srvDomainID
                            );
                    }
                }
            }
            return(sink);
        }
 internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
 {
     //
     // WARNING: Do not read any value type member of xadData in this method!!
     //          xadData is not completely deserialized at this point.  See
     //          warning in CrossAppDomainSink::.ctor above
     //
     lock (staticSyncObject) {
         // Note: keep this in [....] with DomainUnloaded below
         int key = xadData.DomainID;
         if (_sinks == null)
         {
             GrowArrays(0);
         }
         int i = 0;
         while (_sinks[i] != null)
         {
             if (_sinkKeys[i] == key)
             {
                 return(_sinks[i]);
             }
             i++;
             if (i == _sinks.Length)
             {
                 // could not find a sink, also need to Grow the array.
                 GrowArrays(i);
                 break;
             }
         }
         // At this point we need to create a new sink and cache
         // it at location "i"
         _sinks[i]    = new CrossAppDomainSink(xadData);
         _sinkKeys[i] = key;
         return(_sinks[i]);
     }
 }
 internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
 {
     //
     // WARNING: Do not read any value type member of xadData in this method!!
     //          xadData is not completely deserialized at this point.  See 
     //          warning in CrossAppDomainSink::.ctor above
     //
     lock(staticSyncObject) {        
         // Note: keep this in sync with DomainUnloaded below 
         int key = xadData.DomainID;
         if (_sinks == null)
         {
             GrowArrays(0);
         }
         int i=0;
         while (_sinks[i] != null)
         {
             if (_sinkKeys[i] == key)
             {
                 return _sinks[i];
             }
             i++;
             if (i == _sinks.Length)
             {
                 // could not find a sink, also need to Grow the array.
                 GrowArrays(i);
                 break;
             }
         }
         // At this point we need to create a new sink and cache
         // it at location "i"
         _sinks[i] = new CrossAppDomainSink(xadData);
         _sinkKeys[i] = key;
         return _sinks[i];
     }
 }
 internal CrossAppDomainSink(CrossAppDomainData xadData)
 {
     //
     // WARNING: xadData.ContextID may not be valid at this point.  Because 
     //          CrossAppDomainData._ContextID is an IntPtr and IntPtrs are
     //          value types, the deserializer has to wait until the very
     //          end of deserialization to fixup value types.  However, when
     //          we unmarshal objects, we need to setup the x-AD sink and 
     //          initialize it with this data.  Fortunately, that data won't
     //          be consumed until deserialization is complete, so we just
     //          need to take care not to read _ContextID in the constructor.
     //          The xadData object ref will be finalized by the time we need
     //          to consume its contents and everything should work properly.
     //
     _xadData = xadData;
 }
 internal static CrossAppDomainSink FindOrCreateSink(CrossAppDomainData xadData)
 {
     lock (staticSyncObject)
     {
         int domainID = xadData.DomainID;
         if (_sinks == null)
         {
             GrowArrays(0);
         }
         int index = 0;
         while (_sinks[index] != null)
         {
             if (_sinkKeys[index] == domainID)
             {
                 return _sinks[index];
             }
             index++;
             if (index == _sinks.Length)
             {
                 GrowArrays(index);
                 break;
             }
         }
         _sinks[index] = new CrossAppDomainSink(xadData);
         _sinkKeys[index] = domainID;
         return _sinks[index];
     }
 }
示例#15
0
 // Token: 0x060058CA RID: 22730 RVA: 0x001382CD File Offset: 0x001364CD
 internal CrossAppDomainSink(CrossAppDomainData xadData)
 {
     this._xadData = xadData;
 }
 internal CrossAppDomainSink(CrossAppDomainData xadData)
 {
     this._xadData = xadData;
 }
示例#17
0
文件: message.cs 项目: ArildF/masters
        } // TransitionCall


        // This constructor should be used for cross appdomain case.
        internal TransitionCall(IntPtr targetCtxID, IntPtr privateData, int targetDomainID)
            {
            BCLDebug.Assert(targetCtxID != IntPtr.Zero, "bad target ctx for call back");
            BCLDebug.Assert(targetDomainID != 0, "bad target ctx for call back");

            _sourceCtxID = Thread.CurrentContext.InternalContextID;
            _targetCtxID = targetCtxID;
            _delegate = null;
            _targetDomainID = targetDomainID;
            _privateData = privateData;
            

            // In the cross domain case, the client side just has a base Identity
            // and the server domain has the Server identity. We fault in the latter
            // when requested later.

                // We are going to a context in another app domain
                _srvID = null;
                _ID = new Identity("TransitionCallURI", null);

                // Create the data needed for the channel sink creation
            CrossAppDomainData data = 
                new CrossAppDomainData(_targetCtxID,
                                       _targetDomainID,
                                       Identity.ProcessGuid);
                String unUsed;
                IMessageSink channelSink =
                CrossAppDomainChannel.AppDomainChannel.CreateMessageSink(
                                                        null, //uri
                                                        data, //channelData
                                                        out unUsed);//out objURI

                BCLDebug.Assert(channelSink != null, "X-domain transition failure");
                _ID.RaceSetChannelSink(channelSink);
        } // TransitionCall