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);
            }
        }
示例#2
0
        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));
            }
        }
示例#4
0
            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()));
        }
示例#10
0
 internal static PropType GetPropertyType(TnefPropertyType type)
 {
     return((PropType)type);
 }
示例#11
0
 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));
 }
示例#16
0
 public TnefNameTag(TnefNameId id, TnefPropertyType type)
 {
     this.id   = id;
     this.type = type;
 }