internal void SetObjectData(SerializationInfo info, StreamingContext context) { InternalST.Soap(this, "SetObjectData "); ArrayList paramValuesList = new ArrayList(20); methodName = (string)info.GetString("__methodName"); keyToNamespaceTable = (Hashtable)info.GetValue("__keyToNamespaceTable", typeof(Hashtable)); ArrayList paramNamesList = (ArrayList)info.GetValue("__paramNameList", typeof(ArrayList)); xmlNameSpace = (String)info.GetString("__xmlNameSpace"); for (int i = 0; i < paramNamesList.Count; i++) { paramValuesList.Add(info.GetValue((string)paramNamesList[i], Converter.typeofObject)); } paramNames = new String[paramNamesList.Count]; paramValues = new Object[paramValuesList.Count]; for (int i = 0; i < paramNamesList.Count; i++) { paramNames[i] = (String)paramNamesList[i]; paramValues[i] = (Object)paramValuesList[i]; InternalST.Soap(this, "SetObjectData param ", i, " ", paramNames[i], " paramValue ", paramValues[i]); } }
internal virtual void Fixup(ParseRecord record, ParseRecord parent) { Object obj = record.PRnewObj; InternalST.Soap(this, "Fixup ", obj, " ", ((Enum)valueFixupEnum).ToString()); switch (valueFixupEnum) { case ValueFixupEnum.Array: arrayObj.SetValue(obj, indexMap); break; case ValueFixupEnum.Member: InternalST.Soap(this, "Fixup Member new object value ", obj, " memberObject ", memberObject); if (objectInfo.isSi) { InternalST.Soap(this, "Recording a fixup on member: ", memberName, " in object id", parent.PRobjectId, " Required Object ", record.PRobjectId); objectInfo.objectManager.RecordDelayedFixup(parent.PRobjectId, memberName, record.PRobjectId); } else { MemberInfo memberInfo = objectInfo.GetMemberInfo(memberName); InternalST.Soap(this, "Recording a fixup on member:", memberInfo, " in object id ", parent.PRobjectId, " Required Object", record.PRobjectId); objectInfo.objectManager.RecordFixup(parent.PRobjectId, memberInfo, record.PRobjectId); } break; } }
private void InitMemberInfo() { InternalST.Soap(this, objectInfoId, " ", objectType, " InitMemberInfo Entry"); cache = (SerObjectInfoCache)serObjectInfoInit.seenBeforeTable[objectType]; if (cache == null) { InternalST.Soap(this, objectInfoId, " ", objectType, " InitMemberInfo new cache"); cache = new SerObjectInfoCache(); cache.memberInfos = FormatterServices.GetSerializableMembers(objectType, context); count = cache.memberInfos.Length; cache.memberNames = new String[count]; cache.memberTypes = new Type[count]; cache.memberAttributeInfos = new SoapAttributeInfo[count]; // Calculate new arrays for (int i = 0; i < count; i++) { cache.memberNames[i] = cache.memberInfos[i].Name; cache.memberTypes[i] = GetMemberType(cache.memberInfos[i]); cache.memberAttributeInfos[i] = Attr.GetMemberAttributeInfo(cache.memberInfos[i], cache.memberNames[i], cache.memberTypes[i]); InternalST.Soap(this, objectInfoId, " InitMemberInfo name ", cache.memberNames[i], ", type ", cache.memberTypes[i], ", memberInfoType ", cache.memberInfos[i].GetType()); } cache.fullTypeName = objectType.FullName; cache.assemblyString = objectType.Module.Assembly.FullName; serObjectInfoInit.seenBeforeTable.Add(objectType, cache); } memberData = new Object[cache.memberNames.Length]; memberNames = new String[cache.memberNames.Length]; isTyped = true; isNamed = true; InternalST.Soap(this, objectInfoId, " ", objectType, " InitMemberInfo Exit"); }
private void DumpPopulate(MemberInfo[] memberInfos, Object[] memberData) { for (int i = 0; i < memberInfos.Length; i++) { InternalST.Soap(this, objectInfoId, " ", objectType, " PopulateObjectMembers ", memberInfos[i].Name, " ", memberData[i]); } }
internal ValueFixup(Array arrayObj, int[] indexMap) { InternalST.Soap(this, "Array Constructor ", arrayObj); valueFixupEnum = ValueFixupEnum.Array; this.arrayObj = arrayObj; this.indexMap = indexMap; }
private int Position(String name) { InternalST.Soap(this, objectInfoId, " Position ", lastPosition, " ", name); if (cache.memberNames[lastPosition].Equals(name)) { return(lastPosition); } else if ((++lastPosition < cache.memberNames.Length) && (cache.memberNames[lastPosition].Equals(name))) { return(lastPosition); } else { // Search for name InternalST.Soap(this, objectInfoId, " Position miss search for name " + name); for (int i = 0; i < cache.memberNames.Length; i++) { if (cache.memberNames[i].Equals(name)) { lastPosition = i; return(lastPosition); } } throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_Position"), objectType + " " + name)); } }
private void DumpMemberInfo() { for (int i = 0; i < cache.memberInfos.Length; i++) { InternalST.Soap(this, objectInfoId, " Constructor 1 memberInfos data ", cache.memberInfos[i].Name, " ", memberData[i]); } }
private void InternalInit() { InternalST.Soap(this, objectInfoId, " objectType ", objectType, " InternalInit"); obj = null; objectType = null; count = 0; isSi = false; isNamed = false; isTyped = false; si = null; wireMemberNames = null; wireMemberTypes = null; cache = null; lastPosition = 0; numberMembersSeen = 0; bfake = false; bSoapFault = false; majorVersion = 0; minorVersion = 0; typeAttributeInfo = null; arrayElemObjectInfo = null; // Si Read if (memberTypesList != null) { memberTypesList.Clear(); } }
internal void Dump(String value) { InternalST.Soap("Dump NameInfo ", NIid, " ", value); Util.NVTrace("nameSpaceEnum", ((Enum)NInameSpaceEnum).ToString()); Util.NVTrace("name", NIname); Util.NVTrace("objectId", NIobjectId); Util.NVTrace("assemId", NIassemId); Util.NVTrace("primitiveTypeEnum", ((Enum)NIprimitiveTypeEnum).ToString()); Util.NVTrace("type", NItype); Util.NVTrace("isSealed", NIisSealed); Util.NVTrace("transmitTypeOnObject", NItransmitTypeOnObject); Util.NVTrace("transmitTypeOnMember", NItransmitTypeOnMember); Util.NVTrace("isParentTypeOnObject", NIisParentTypeOnObject); Util.NVTrace("isMustUnderstand", NIisMustUnderstand); Util.NVTrace("namespace", NInamespace); Util.NVTrace("headerPrefix", NIheaderPrefix); Util.NVTrace("itemName", NIitemName); Util.NVTrace("isArray", NIisArray); Util.NVTrace("isArrayItem", NIisArrayItem); Util.NVTrace("isTopLevelObject", NIisTopLevelObject); Util.NVTrace("isNestedObject", NIisNestedObject); Util.NVTrace("isHeader", NIisHeader); Util.NVTrace("isRemoteRecord", NIisRemoteRecord); if (NIattributeInfo != null) { NIattributeInfo.Dump(NIname); } }
private void InitSiRead(String assemblyName) { InternalST.Soap(this, objectInfoId, " ", objectType, " InitMemberInfo new cache"); if (assemblyName != null) { // Need to set to assembly name from the wire. This assembly name could contain version information // not in the default assembly name which was returned from fusion si.AssemblyName = assemblyName; } cache = new SerObjectInfoCache(); cache.fullTypeName = si.FullTypeName; cache.assemblyString = si.AssemblyName; // Input from IFieldInfo cache.memberNames = wireMemberNames; cache.memberTypes = wireMemberTypes; if (memberTypesList != null) { memberTypesList = new ArrayList(20); } if (wireMemberNames != null && wireMemberTypes != null) { isTyped = true; } }
internal void Dump() { InternalST.Soap("ParseRecord Dump ", PRparseRecordId); InternalST.Soap("Enums"); Util.NVTrace("ParseType", ((Enum)PRparseTypeEnum).ToString()); Util.NVTrace("ObjectType", ((Enum)PRobjectTypeEnum).ToString()); Util.NVTrace("ArrayType", ((Enum)PRarrayTypeEnum).ToString()); Util.NVTrace("MemberType", ((Enum)PRmemberTypeEnum).ToString()); Util.NVTrace("MemberValue", ((Enum)PRmemberValueEnum).ToString()); Util.NVTrace("ObjectPosition", ((Enum)PRobjectPositionEnum).ToString()); Util.NVTrace("ParseState", ((Enum)PRparseStateEnum).ToString()); InternalST.Soap("Basics"); Util.NVTrace("Name", PRname); Util.NVTrace("PRisParsed", PRisParsed); Util.NVTrace("PRisProcessAttributes", PRisParsed); Util.NVTrace("PRnameXmlKey", PRnameXmlKey); Util.NVTrace("PRxmlNameSpace", PRxmlNameSpace); Util.NVTrace("Value ", PRvalue); Util.NVTrace("varValue ", PRvarValue); if (PRvarValue != null) { Util.NVTrace("varValue type", PRvarValue.GetType()); } Util.NVTrace("keyDt", PRkeyDt); Util.NVTrace("dtType", PRdtType); Util.NVTrace("assemblyName", PRassemblyName); Util.NVTrace("code", ((Enum)PRdtTypeCode).ToString()); Util.NVTrace("objectID", PRobjectId); Util.NVTrace("idRef", PRidRef); Util.NVTrace("isEnum", PRisEnum); InternalST.Soap("Array "); Util.NVTrace("arrayElementTypeString", PRarrayElementTypeString); Util.NVTrace("arrayElementType", PRarrayElementType); Util.NVTrace("arrayElementTypeCode", ((Enum)PRarrayElementTypeCode).ToString()); Util.NVTrace("isArrayVariant", PRisArrayVariant); Util.NVTrace("primitiveArrayTypeString", PRprimitiveArrayTypeString); Util.NVTrace("rank", PRrank); Util.NVTrace("dimensions", Util.PArray(PRlengthA)); Util.NVTrace("position", Util.PArray(PRpositionA)); Util.NVTrace("lowerBoundA", Util.PArray(PRlowerBoundA)); Util.NVTrace("upperBoundA", Util.PArray(PRupperBoundA)); InternalST.Soap("Header "); Util.NVTrace("isMustUnderstand", PRisMustUnderstand); Util.NVTrace("isHeaderRoot", PRisHeaderRoot); Util.NVTrace("isAttributesProcessed", PRisAttributesProcessed); Util.NVTrace("isXmlAttribute", PRisXmlAttribute); InternalST.Soap("New Object"); if (PRnewObj != null) { Util.NVTrace("newObj", PRnewObj); } /* * if ((objectInfo != null) && (objectInfo.objectType != null)) * Util.NVTrace("objectInfo", objectInfo.objectType.ToString()); */ }
internal ValueFixup(Object memberObject, String memberName, ReadObjectInfo objectInfo) { InternalST.Soap(this, "Member Constructor ", memberObject); valueFixupEnum = ValueFixupEnum.Member; this.memberObject = memberObject; this.memberName = memberName; this.objectInfo = objectInfo; }
internal void Dump() { for (int i = 0; i < Count(); i++) { Object obj = objects[i]; InternalST.Soap(this, "Stack Dump ", stackId, " " + ((obj is ITrace)?((ITrace)obj).Trace():"")); } }
// Push the object onto the stack internal void Push(Object obj) { InternalST.Soap(this, "Push ", stackId, " ", ((obj is ITrace)?((ITrace)obj).Trace():"")); if (top == (objects.Length - 1)) { IncreaseCapacity(); } objects[++top] = obj; }
internal static void NVTrace(String name, Object value) { try { InternalST.Soap(" " + name + ((value == null)?" = null":" = " + value.ToString())); }catch (Exception) { InternalST.Soap(" " + name + " = null"); //Empty StringBuilder is giving an exception } }
// Gets the second entry in the stack. internal Object PeekPeek() { if (top < 1) { return(null); } InternalST.Soap(this, "PeekPeek ", stackId, " ", ((objects[top - 1] is ITrace)?((ITrace)objects[top - 1]).Trace():"")); return(objects[top - 1]); }
// Write Constructor internal InternalSoapMessage(String methodName, String xmlNameSpace, String[] paramNames, Object[] paramValues, Type[] paramTypes) { InternalST.Soap(this, "Constructor Write ", methodName); this.methodName = methodName; this.xmlNameSpace = xmlNameSpace; this.paramNames = paramNames; this.paramValues = paramValues; this.paramTypes = paramTypes; }
private void DumpPopulateSi() { InternalST.Soap(this, objectInfoId, " ", objectType, " PopulateObjectMembers SetObjectData, ISerializable obj "); SerializationInfoEnumerator siEnum = si.GetEnumerator(); for (int i = 0; siEnum.MoveNext(); i++) { InternalST.Soap(this, objectInfoId, " ", objectType, " Populate Si ", siEnum.Name, " ", siEnum.Value); } }
internal static void DumpHash(String tag, Hashtable hashTable) { IDictionaryEnumerator e = hashTable.GetEnumerator(); InternalST.Soap("HashTable Dump Begin ", tag); while (e.MoveNext()) { InternalST.Soap("HashTable key " + e.Key + ", value " + e.Value); } InternalST.Soap("HashTable Dump end \n"); }
// Looks up the resource string value for key. // internal static String GetResourceString(String key) { if (SystemResMgr == null) { InitResourceManager(); } String s = SystemResMgr.GetString(key, null); InternalST.SoapAssert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild the SoapFormatter and SoapFormatter.resource after adding a resource to SoapFormatter.txt? Debug this w/ cordbg and bug whoever owns the code that called SoapUtil.GetResourceString. Resource name was: \"" + key + "\""); return(s); }
// Write Constructor used for array types or null members internal void InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SoapAttributeInfo attributeInfo) { InternalST.Soap(this, objectInfoId, " Constructor 2 ", objectType); this.objectType = objectType; this.context = context; this.serObjectInfoInit = serObjectInfoInit; this.parentMemberAttributeInfo = attributeInfo; this.surrogateSelector = surrogateSelector; this.converter = converter; if (objectType.IsArray) { arrayElemObjectInfo = Serialize(objectType.GetElementType(), surrogateSelector, context, serObjectInfoInit, converter, null); typeAttributeInfo = GetTypeAttributeInfo(); InitNoMembers(); return; } typeAttributeInfo = GetTypeAttributeInfo(); ISurrogateSelector surrogateSelectorTemp = null; if (surrogateSelector != null) { serializationSurrogate = surrogateSelector.GetSurrogate(objectType, context, out surrogateSelectorTemp); } if (serializationSurrogate != null) { isSi = true; } else if (objectType == Converter.typeofObject) { } else if (Converter.typeofISerializable.IsAssignableFrom(objectType)) { isSi = true; } if (isSi) { si = new SerializationInfo(objectType, converter); cache = new SerObjectInfoCache(); cache.fullTypeName = si.FullTypeName; cache.assemblyString = si.AssemblyName; } else { InitMemberInfo(); } InternalST.Soap(this, objectInfoId, " ", objectType, " InitSerialize Exit ", isSi); }
internal static String GetResourceString(String key, params Object[] values) { if (SystemResMgr == null) { InitResourceManager(); } String s = SystemResMgr.GetString(key, null); InternalST.SoapAssert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild mscorlib after adding a resource to resources.txt? Debug this w/ cordbg and bug whoever owns the code that called Environment.GetResourceString. Resource name was: \"" + key + "\""); return(String.Format(s, values)); }
// Fills in the values for an object internal void PopulateObjectMembers() { InternalST.Soap(this, objectInfoId, " ", objectType, " PopulateObjectMembers isSi ", isSi); if (!isSi) { MemberInfo[] finalMemberInfos = null; Object[] finalMemberData = null; int finalMemberIndex = 0; if (numberMembersSeen < memberNames.Length) { finalMemberInfos = new MemberInfo[numberMembersSeen]; finalMemberData = new Object[numberMembersSeen]; for (int iMember = 0; iMember < memberNames.Length; ++iMember) { if (memberNames[iMember] == null) { // A field on the type isnt found. See if the field has OptionallySerializable and the type has the deserialization constructor Object [] attrs = cache.memberInfos[iMember].GetCustomAttributes(typeof(OptionalFieldAttribute), false); if ((attrs == null || attrs.Length == 0) && (majorVersion >= 1 && minorVersion >= 0)) { // the member isnt optionally serializable throw new SerializationException(SoapUtil.GetResourceString("Serialization_WrongNumberOfMembers", objectType, cache.memberInfos.Length, numberMembersSeen)); } } else { if (memberNames[iMember] != cache.memberInfos[iMember].Name) { throw new SerializationException(SoapUtil.GetResourceString("Serialization_WrongNumberOfMembers", objectType, cache.memberInfos.Length, numberMembersSeen)); } finalMemberInfos[finalMemberIndex] = cache.memberInfos[iMember]; finalMemberData[finalMemberIndex] = memberData[iMember]; finalMemberIndex++; } } } else { finalMemberInfos = cache.memberInfos; finalMemberData = memberData; } DumpPopulate(finalMemberInfos, finalMemberData); FormatterServices.PopulateObjectMembers(obj, finalMemberInfos, finalMemberData); numberMembersSeen = 0; } }
// Read Constructor internal void Init(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, ObjectManager objectManager, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, String assemblyName) { InternalST.Soap(this, objectInfoId, " Constructor 3 ", objectType); this.objectType = objectType; this.objectManager = objectManager; this.context = context; this.serObjectInfoInit = serObjectInfoInit; this.formatterConverter = converter; InitReadConstructor(objectType, surrogateSelector, context, assemblyName); }
private void InitNoMembers() { cache = (SerObjectInfoCache)serObjectInfoInit.seenBeforeTable[objectType]; if (cache == null) { InternalST.Soap(this, objectInfoId, " ", objectType, " InitMemberInfo new cache"); cache = new SerObjectInfoCache(); cache.fullTypeName = objectType.FullName; cache.assemblyString = objectType.Module.Assembly.FullName; serObjectInfoInit.seenBeforeTable.Add(objectType, cache); } }
// Records an objectId in a member when the actual object for that member is not yet known internal void RecordFixup(long objectId, String name, long idRef) { if (isSi) { InternalST.Soap(this, objectInfoId, " ", objectType, " RecordFixup RecordDelayedFixup objectId ", objectId, " name ", name, " idRef ", idRef, " isSi ", isSi); objectManager.RecordDelayedFixup(objectId, name, idRef); } else { InternalST.Soap(this, objectInfoId, " ", objectType, " RecordFixup objectId ", objectId, " name ", name, " idRef ", idRef, " isSi ", isSi); objectManager.RecordFixup(objectId, cache.memberInfos[Position(name)], idRef); } }
// Pop the object from the stack internal Object Pop() { if (top < 0) { return(null); } Object obj = objects[top]; objects[top--] = null; InternalST.Soap(this, "Pop ", stackId, " ", ((obj is ITrace)?((ITrace)obj).Trace():"")); return(obj); }
// Get the memberInfo for a memberName internal MemberInfo GetMemberInfo(String name) { InternalST.Soap(this, objectInfoId, " ", objectType, " GetMemberInfo Entry ", name); if (isSi) { throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_MemberInfo"), objectType + " " + name)); } if (cache.memberInfos == null) { throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_NoMemberInfo"), objectType + " " + name)); } return(cache.memberInfos[Position(name)]); }
internal Type GetType(int position) { InternalST.Soap(this, objectInfoId, " ", objectType, " GetType Entry ByPosition ", position); Type type = null; if (isTyped) { if (position >= cache.memberTypes.Length) { throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_ISerializableTypes"), objectType + " " + position)); } type = cache.memberTypes[position]; InternalST.Soap(this, objectInfoId, " ", objectType, " GetType Exit ByPosition ", type); } return(type); }
internal virtual void Fixup(ParseRecord record, ParseRecord parent) { Object obj = record.PRnewObj; InternalST.Soap(this, "Fixup ", obj, " ", ((Enum)valueFixupEnum).ToString()); switch (valueFixupEnum) { case ValueFixupEnum.Array: arrayObj.SetValue(obj, indexMap); break; case ValueFixupEnum.Header: Type type = typeof(Header); if (valueInfo == null) { MemberInfo[] valueInfos = type.GetMember("Value"); if (valueInfos.Length != 1) { throw new SerializationException(String.Format(SoapUtil.GetResourceString("Serialization_HeaderReflection"), valueInfos.Length)); } valueInfo = valueInfos[0]; } InternalST.SerializationSetValue((FieldInfo)valueInfo, header, obj); break; case ValueFixupEnum.Member: InternalST.Soap(this, "Fixup Member new object value ", obj, " memberObject ", memberObject); if (objectInfo.isSi) { InternalST.Soap(this, "Recording a fixup on member: ", memberName, " in object id", parent.PRobjectId, " Required Object ", record.PRobjectId); objectInfo.objectManager.RecordDelayedFixup(parent.PRobjectId, memberName, record.PRobjectId); } else { MemberInfo memberInfo = objectInfo.GetMemberInfo(memberName); InternalST.Soap(this, "Recording a fixup on member:", memberInfo, " in object id ", parent.PRobjectId, " Required Object", record.PRobjectId); objectInfo.objectManager.RecordFixup(parent.PRobjectId, memberInfo, record.PRobjectId); } break; } }