protected override Stream OpenValueReadStream(out int skipTrailingNulls) { TnefPropertyType tnefType = this.PropertyReader.PropertyTag.TnefType; TnefPropertyType tnefPropertyType = tnefType; switch (tnefPropertyType) { case TnefPropertyType.String8: { skipTrailingNulls = 1; TextToText textToText = new TextToText(TextToTextConversionMode.ConvertCodePageOnly); textToText.InputEncoding = this.GetString8Encoding(); textToText.OutputEncoding = ConvertUtils.UnicodeEncoding; return(new ConverterStream(this.PropertyReader.GetRawValueReadStream(), textToText, ConverterStreamAccess.Read)); } case TnefPropertyType.Unicode: skipTrailingNulls = 2; return(this.PropertyReader.GetRawValueReadStream()); default: if (tnefPropertyType == TnefPropertyType.Binary) { skipTrailingNulls = 0; return(this.PropertyReader.GetRawValueReadStream()); } StorageGlobals.ContextTraceError(ExTraceGlobals.CcInboundTnefTracer, "InboundTnefConverter::StreamLargeProperty: only supports binary and string properties."); throw new ConversionFailedException(ConversionFailureReason.CorruptContent); } }
protected override Stream OpenValueReadStream(out int skipTrailingNulls) { TnefPropertyType propertyType = this.PropertyReader.PropertyType; skipTrailingNulls = ((propertyType == TnefPropertyType.Unicode) ? 2 : 0); return(this.PropertyReader.GetValueReadStream()); }
private void WriteProperty(NativeStorePropertyDefinition property, object value) { value = ExTimeZoneHelperForMigrationOnly.ToLegacyUtcIfDateTime(value); switch (property.SpecifiedWith) { case PropertyTypeSpecifier.PropertyTag: { PropertyTagPropertyDefinition propertyTagPropertyDefinition = (PropertyTagPropertyDefinition)property; TnefPropertyTag propertyTag = (int)propertyTagPropertyDefinition.PropertyTag; this.PropertyWriter.WriteProperty(propertyTag, value); return; } case PropertyTypeSpecifier.GuidString: { GuidNamePropertyDefinition guidNamePropertyDefinition = (GuidNamePropertyDefinition)property; TnefPropertyType propertyType = (TnefPropertyType)guidNamePropertyDefinition.MapiPropertyType; this.PropertyWriter.WriteProperty(guidNamePropertyDefinition.Guid, guidNamePropertyDefinition.PropertyName, propertyType, value); return; } case PropertyTypeSpecifier.GuidId: { GuidIdPropertyDefinition guidIdPropertyDefinition = (GuidIdPropertyDefinition)property; TnefPropertyType propertyType2 = (TnefPropertyType)guidIdPropertyDefinition.MapiPropertyType; this.PropertyWriter.WriteProperty(guidIdPropertyDefinition.Guid, guidIdPropertyDefinition.Id, propertyType2, value); return; } default: throw new InvalidOperationException(string.Format("Invalid native property specifier: {0}", property.SpecifiedWith)); } }
private void WriteTnefWriterPropertyValue(TnefPropertyTag propertyTag, object propertyValue) { TnefPropertyType tnefType = propertyTag.TnefType; if (tnefType == TnefPropertyType.AppTime || tnefType == (TnefPropertyType)4103) { DateTime dateTime = (DateTime)Util.Date1601Utc.ToUtc(); try { dateTime = ConvertUtils.GetDateTimeFromOADate((double)propertyValue); } catch (ArgumentException arg) { StorageGlobals.ContextTraceError <double, ArgumentException>(ExTraceGlobals.CcOutboundTnefTracer, "TnefContentWriter::WriteTnefWriterPropertyValue: ArgumentException processing date {0}, {1}.", (double)propertyValue, arg); } propertyValue = dateTime; } propertyValue = ExTimeZoneHelperForMigrationOnly.ToLegacyUtcIfDateTime(propertyValue); if (propertyValue is DateTime) { DateTime dateTime2 = (DateTime)propertyValue; if ((ExDateTime)dateTime2 < Util.Date1601Utc) { propertyValue = (DateTime)Util.Date1601Utc; } } this.tnefWriter.WritePropertyValue(propertyValue); }
internal static void ThrowOnInvalidPropertyType(TnefPropertyType type) { MsgStoragePropertyTypeRule msgStoragePropertyTypeRule = null; if (!MsgStorageRulesTable.rulesTable.TryGetValue(type, out msgStoragePropertyTypeRule)) { throw new NotSupportedException(MsgStorageStrings.UnsupportedPropertyType(string.Format("0x{0:x2}", type))); } }
public Stream OpenPropertyStream(Guid propertyGuid, int namedId, TnefPropertyType propertyType) { this.CheckDisposed("MsgStorageWriter::OpenPropertyStream(3)"); MsgStorageRulesTable.ThrowOnInvalidPropertyType(propertyType); this.CheckFailure(); TnefNameId namedProperty = new TnefNameId(propertyGuid, namedId); TnefPropertyId id = this.NamedPropertyList.Add(namedProperty); TnefPropertyTag propertyTag = new TnefPropertyTag(id, propertyType); return(this.CurrentWriter.OpenPropertyStream(propertyTag)); }
public void WriteProperty(Guid propertyGuid, int namedId, TnefPropertyType propertyType, object propertyValue) { this.CheckDisposed("MsgStorageWriter::WriteProperty(3)"); MsgStorageRulesTable.ThrowOnInvalidPropertyType(propertyType); Util.ThrowOnNullArgument(propertyValue, "propertyValue"); this.CheckFailure(); TnefNameId namedProperty = new TnefNameId(propertyGuid, namedId); TnefPropertyId id = this.NamedPropertyList.Add(namedProperty); TnefPropertyTag propertyTag = new TnefPropertyTag(id, propertyType); this.CurrentWriter.WriteProperty(propertyTag, propertyValue); }
private void StreamProperty(NativeStorePropertyDefinition property, Stream propertyStream) { Stream stream = null; try { switch (property.SpecifiedWith) { case PropertyTypeSpecifier.PropertyTag: { PropertyTagPropertyDefinition propertyTagPropertyDefinition = (PropertyTagPropertyDefinition)property; TnefPropertyTag propertyTag = (int)propertyTagPropertyDefinition.PropertyTag; stream = this.PropertyWriter.OpenPropertyStream(propertyTag); break; } case PropertyTypeSpecifier.GuidString: { GuidNamePropertyDefinition guidNamePropertyDefinition = (GuidNamePropertyDefinition)property; TnefPropertyType propertyType = (TnefPropertyType)guidNamePropertyDefinition.MapiPropertyType; stream = this.PropertyWriter.OpenPropertyStream(guidNamePropertyDefinition.Guid, guidNamePropertyDefinition.PropertyName, propertyType); break; } case PropertyTypeSpecifier.GuidId: { GuidIdPropertyDefinition guidIdPropertyDefinition = (GuidIdPropertyDefinition)property; TnefPropertyType propertyType2 = (TnefPropertyType)guidIdPropertyDefinition.MapiPropertyType; stream = this.PropertyWriter.OpenPropertyStream(guidIdPropertyDefinition.Guid, guidIdPropertyDefinition.Id, propertyType2); break; } default: throw new InvalidOperationException(string.Format("Invalid native property specifier: {0}", property.SpecifiedWith)); } Util.StreamHandler.CopyStreamData(propertyStream, stream); } finally { if (stream != null) { stream.Close(); } } }
private object ReadSingleValue() { TnefPropertyType tnefType = this.PropertyReader.PropertyTag.TnefType; if (tnefType == TnefPropertyType.AppTime || tnefType == (TnefPropertyType)4103) { double num = 0.0; DateTime dateTime = this.PropertyReader.ReadValueAsDateTime(); try { num = ConvertUtils.GetOADate(dateTime); } catch (OverflowException arg) { StorageGlobals.ContextTraceError <DateTime, OverflowException>(ExTraceGlobals.CcInboundTnefTracer, "InboundTnefConverter::ReadPropertyReaderValue: OverflowException processing date {0}, {1}.", dateTime, arg); } return(num); } return(ExTimeZoneHelperForMigrationOnly.ToExDateTimeIfObjectIsDateTime(this.PropertyReader.ReadValue())); }
internal static PropType GetPropertyType(TnefPropertyType type) { return((PropType)type); }
internal static bool IsString8Property(TnefPropertyType propertyType) { return(propertyType == TnefPropertyType.String8 || propertyType == (TnefPropertyType)4126); }
/// <summary> /// Initializes a new instance of the <see cref="MimeKit.Tnef.TnefPropertyTag"/> struct. /// </summary> /// <remarks> /// Creates a new <see cref="TnefPropertyTag"/> based on a <see cref="TnefPropertyId"/> /// and <see cref="TnefPropertyType"/>. /// </remarks> /// <param name="id">The property identifier.</param> /// <param name="type">The property type.</param> public TnefPropertyTag (TnefPropertyId id, TnefPropertyType type) { this.type = type; this.id = id; }
TnefPropertyTag (TnefPropertyId id, TnefPropertyType type, bool multiValue) { this.type = (TnefPropertyType) (((ushort) type) | (multiValue ? MultiValuedFlag : 0)); this.id = id; }
/// <summary> /// Initializes a new instance of the <see cref="MimeKit.Tnef.TnefPropertyTag"/> struct. /// </summary> /// <remarks> /// Creates a new <see cref="TnefPropertyTag"/> based on a 32-bit integer tag as read from /// a TNEF stream. /// </remarks> /// <param name="tag">The property tag.</param> public TnefPropertyTag (int tag) { type = (TnefPropertyType) ((tag >> 16) & 0xFFFF); id = (TnefPropertyId) (tag & 0xFFFF); }
internal static bool TryFindRule(TnefPropertyType type, out MsgStoragePropertyTypeRule rule) { return(MsgStorageRulesTable.rulesTable.TryGetValue(type, out rule)); }
public TnefNameTag(TnefNameId id, TnefPropertyType type) { this.id = id; this.type = type; }