using System; using System.Collections; using System.Runtime.Remoting.Channels; using System.Threading; namespace System.Runtime.Remoting.Messaging { // Token: 0x020003DB RID: 987 internal class CADMessageBase { // Token: 0x060026AD RID: 9901 RVA: 0x0007F364 File Offset: 0x0007D564 internal static int MarshalProperties(IDictionary dict, ref ArrayList args) { int num = 0; MethodDictionary methodDictionary = dict as MethodDictionary; if (methodDictionary != null) { if (methodDictionary.HasInternalProperties) { IDictionary internalProperties = methodDictionary.InternalProperties; if (internalProperties != null) { foreach (object obj in internalProperties) { DictionaryEntry dictionaryEntry = (DictionaryEntry)obj; if (args == null) { args = new ArrayList(); } args.Add(dictionaryEntry); num++; } } } } else if (dict != null) { foreach (object obj2 in dict) { DictionaryEntry dictionaryEntry2 = (DictionaryEntry)obj2; if (args == null) { args = new ArrayList(); } args.Add(dictionaryEntry2); num++; } } return num; } // Token: 0x060026AE RID: 9902 RVA: 0x0007F4A0 File Offset: 0x0007D6A0 internal static void UnmarshalProperties(IDictionary dict, int count, ArrayList args) { for (int i = 0; i < count; i++) { DictionaryEntry dictionaryEntry = (DictionaryEntry)args[i]; dict[dictionaryEntry.Key] = dictionaryEntry.Value; } } // Token: 0x060026AF RID: 9903 RVA: 0x0007F4E0 File Offset: 0x0007D6E0 private static bool IsPossibleToIgnoreMarshal(object obj) { Type type = obj.GetType(); return type.IsPrimitive || type == typeof(void) || (type.IsArray && type.GetElementType().IsPrimitive && ((Array)obj).Rank == 1) || (obj is string || obj is DateTime || obj is TimeSpan); } // Token: 0x060026B0 RID: 9904 RVA: 0x0007F564 File Offset: 0x0007D764 protected object MarshalArgument(object arg, ref ArrayList args) { if (arg == null) { return null; } if (CADMessageBase.IsPossibleToIgnoreMarshal(arg)) { return arg; } MarshalByRefObject marshalByRefObject = arg as MarshalByRefObject; if (marshalByRefObject != null) { if (!RemotingServices.IsTransparentProxy(marshalByRefObject)) { ObjRef objRef = RemotingServices.Marshal(marshalByRefObject); return new CADObjRef(objRef, Thread.GetDomainID()); } } if (args == null) { args = new ArrayList(); } args.Add(arg); return new CADArgHolder(args.Count - 1); } // Token: 0x060026B1 RID: 9905 RVA: 0x0007F5DC File Offset: 0x0007D7DC protected object UnmarshalArgument(object arg, ArrayList args) { if (arg == null) { return null; } CADArgHolder cadargHolder = arg as CADArgHolder; if (cadargHolder != null) { return args[cadargHolder.index]; } CADObjRef cadobjRef = arg as CADObjRef; if (cadobjRef != null) { string text = string.Copy(cadobjRef.TypeName); string text2 = string.Copy(cadobjRef.URI); int sourceDomain = cadobjRef.SourceDomain; ChannelInfo channelInfo = new ChannelInfo(new CrossAppDomainData(sourceDomain)); ObjRef objRef = new ObjRef(text, text2, channelInfo); return RemotingServices.Unmarshal(objRef); } if (arg is Array) { Array array = (Array)arg; Array array2; switch (Type.GetTypeCode(arg.GetType().GetElementType())) { case TypeCode.Boolean: array2 = new bool[array.Length]; break; case TypeCode.Char: array2 = new char[array.Length]; break; case TypeCode.SByte: array2 = new sbyte[array.Length]; break; case TypeCode.Byte: array2 = new byte[array.Length]; break; case TypeCode.Int16: array2 = new short[array.Length]; break; case TypeCode.UInt16: array2 = new ushort[array.Length]; break; case TypeCode.Int32: array2 = new int[array.Length]; break; case TypeCode.UInt32: array2 = new uint[array.Length]; break; case TypeCode.Int64: array2 = new long[array.Length]; break; case TypeCode.UInt64: array2 = new ulong[array.Length]; break; case TypeCode.Single: array2 = new float[array.Length]; break; case TypeCode.Double: array2 = new double[array.Length]; break; case TypeCode.Decimal: array2 = new decimal[array.Length]; break; default: throw new NotSupportedException(); } array.CopyTo(array2, 0); return array2; } switch (Type.GetTypeCode(arg.GetType())) { case TypeCode.Boolean: return (bool)arg; case TypeCode.Char: return (char)arg; case TypeCode.SByte: return (sbyte)arg; case TypeCode.Byte: return (byte)arg; case TypeCode.Int16: return (short)arg; case TypeCode.UInt16: return (ushort)arg; case TypeCode.Int32: return (int)arg; case TypeCode.UInt32: return (uint)arg; case TypeCode.Int64: return (long)arg; case TypeCode.UInt64: return (ulong)arg; case TypeCode.Single: return (float)arg; case TypeCode.Double: return (double)arg; case TypeCode.Decimal: return (decimal)arg; case TypeCode.DateTime: return new DateTime(((DateTime)arg).Ticks); case TypeCode.String: return string.Copy((string)arg); } if (arg is TimeSpan) { return new TimeSpan(((TimeSpan)arg).Ticks); } if (arg is IntPtr) { return (IntPtr)arg; } throw new NotSupportedException("Parameter of type " + arg.GetType() + " cannot be unmarshalled"); } // Token: 0x060026B2 RID: 9906 RVA: 0x0007F944 File Offset: 0x0007DB44 internal object[] MarshalArguments(object[] arguments, ref ArrayList args) { object[] array = new object[arguments.Length]; int num = arguments.Length; for (int i = 0; i < num; i++) { array[i] = this.MarshalArgument(arguments[i], ref args); } return array; } // Token: 0x060026B3 RID: 9907 RVA: 0x0007F980 File Offset: 0x0007DB80 internal object[] UnmarshalArguments(object[] arguments, ArrayList args) { object[] array = new object[arguments.Length]; int num = arguments.Length; for (int i = 0; i < num; i++) { array[i] = this.UnmarshalArgument(arguments[i], args); } return array; } // Token: 0x060026B4 RID: 9908 RVA: 0x0007F9BC File Offset: 0x0007DBBC protected void SaveLogicalCallContext(IMethodMessage msg, ref ArrayList serializeList) { if (msg.LogicalCallContext != null && msg.LogicalCallContext.HasInfo) { if (serializeList == null) { serializeList = new ArrayList(); } this._callContext = new CADArgHolder(serializeList.Count); serializeList.Add(msg.LogicalCallContext); } } // Token: 0x060026B5 RID: 9909 RVA: 0x0007FA14 File Offset: 0x0007DC14 internal LogicalCallContext GetLogicalCallContext(ArrayList args) { if (this._callContext == null) { return null; } return (LogicalCallContext)args[this._callContext.index]; } // Token: 0x04000F23 RID: 3875 protected object[] _args; // Token: 0x04000F24 RID: 3876 protected byte[] _serializedArgs; // Token: 0x04000F25 RID: 3877 protected int _propertyCount; // Token: 0x04000F26 RID: 3878 protected CADArgHolder _callContext; } }