// 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); }
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]); } }
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; }
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); }
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 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]; } }
// Token: 0x060058CA RID: 22730 RVA: 0x001382CD File Offset: 0x001364CD internal CrossAppDomainSink(CrossAppDomainData xadData) { this._xadData = xadData; }
internal CrossAppDomainSink(CrossAppDomainData xadData) { this._xadData = xadData; }
} // 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