private static object GetMapiValueFromValue(StoreSession session, ExTimeZone timeZone, object value)
        {
            Util.ThrowOnNullArgument(session, "session");
            Util.ThrowOnNullArgument(timeZone, "timeZone");
            if (value is PropertyError)
            {
                throw new ArgumentException(string.Format("We should never need to translate a PropertyError into mapi.net, because it makes no sense to set an error. PropertyError found = {0}.", value));
            }
            QueryFilter queryFilter = value as QueryFilter;

            if (queryFilter != null)
            {
                return(FilterRestrictionConverter.CreateRestriction(session, timeZone, session.Mailbox.MapiStore, queryFilter));
            }
            RuleAction[] array = value as RuleAction[];
            if (array != null)
            {
                RuleAction[] array2 = new RuleAction[array.Length];
                for (int i = 0; i < array2.Length; i++)
                {
                    array2[i] = RuleActionConverter.ConvertRuleAction(session, timeZone, array[i]);
                }
                return(array2);
            }
            return(ExTimeZoneHelperForMigrationOnly.ToLegacyUtcIfDateTime(timeZone, value));
        }
Beispiel #2
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);
            }
Beispiel #3
0
        private long WriteAttachmentProperties(Attachment attachment)
        {
            long result = 0L;

            this.tnefWriter.StartAttribute(TnefAttributeTag.Attachment, TnefAttributeLevel.Attachment);
            foreach (NativeStorePropertyDefinition nativeStorePropertyDefinition in attachment.AllNativeProperties)
            {
                if (nativeStorePropertyDefinition.Equals(InternalSchema.AttachDataObj))
                {
                    result = this.WriteAttachDataObj(attachment);
                }
                else if (!nativeStorePropertyDefinition.Equals(InternalSchema.AttachDataBin) && this.propertyChecker.IsAttachmentPropertyWritable(nativeStorePropertyDefinition))
                {
                    object        obj           = attachment.TryGetProperty(nativeStorePropertyDefinition);
                    PropertyError propertyError = obj as PropertyError;
                    if (propertyError != null && PropertyError.IsPropertyValueTooBig(propertyError))
                    {
                        this.WritePropertyStreamData(attachment.PropertyBag, nativeStorePropertyDefinition);
                    }
                    else if (propertyError == null)
                    {
                        obj = ExTimeZoneHelperForMigrationOnly.ToLegacyUtcIfDateTime(obj);
                        this.tnefWriter.WriteProperty(nativeStorePropertyDefinition, obj);
                    }
                }
            }
            ItemAttachment itemAttachment = attachment as ItemAttachment;

            if (itemAttachment != null)
            {
                result = this.WriteAttachedItem(itemAttachment);
            }
            return(result);
        }
        private void InternalSetValidatedStoreProperty(PropertyDefinition propertyDefinition, object value)
        {
            this.EnsureInternalDataStructuresAllocated(8);
            Array array = value as Array;

            if (array != null)
            {
                value = MemoryPropertyBag.ClonePropertyValue <Array>(array);
            }
            else if (value is DateTime)
            {
                ExTimeZoneHelperForMigrationOnly.CheckValidationLevel(false, ExTimeZoneHelperForMigrationOnly.ValidationLevel.Low, "MemoryPropertyBag.InternalSetValidatedStoreProperty: System.DateTime", new object[0]);
                value = new ExDateTime(this.ExTimeZone, (DateTime)value);
            }
            else if (value is ExDateTime)
            {
                ((ExDateTime)value).CheckExpectedTimeZone(this.ExTimeZone, ExTimeZoneHelperForMigrationOnly.ValidationLevel.High);
                value = this.ExTimeZone.ConvertDateTime((ExDateTime)value);
            }
            object originalValue = null;
            StorePropertyDefinition storePropertyDefinition = InternalSchema.ToStorePropertyDefinition(propertyDefinition);
            bool flag = (storePropertyDefinition.PropertyFlags & PropertyFlags.TrackChange) == PropertyFlags.TrackChange;

            if (!(value is PropertyError) && flag && this.propertyValues.ContainsKey(propertyDefinition))
            {
                originalValue = this.propertyValues[propertyDefinition];
            }
            this.propertyValues[propertyDefinition] = value;
            if (this.deletedProperties != null)
            {
                this.deletedProperties.Remove(propertyDefinition);
            }
            this.ChangedProperties.TryAdd(propertyDefinition);
            this.AddTrackingInformation(storePropertyDefinition, PropertyTrackingInformation.Modified, originalValue);
        }
        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));
            }
        }
Beispiel #6
0
 protected override object ReadValue()
 {
     if (this.IsLargeValue())
     {
         StorageGlobals.ContextTraceError(ExTraceGlobals.CcInboundTnefTracer, "InboundMsgConverter::ReadValue: large property value");
         throw new ConversionFailedException(ConversionFailureReason.CorruptContent);
     }
     return(ExTimeZoneHelperForMigrationOnly.ToExDateTimeIfObjectIsDateTime(this.PropertyReader.ReadValue()));
 }
 public EndDateRecurrenceRange(ExDateTime startDate, ExDateTime endDate)
 {
     ExTimeZoneHelperForMigrationOnly.CheckValidationLevel(startDate.TimeZone == endDate.TimeZone, ExTimeZoneHelperForMigrationOnly.ValidationLevel.Mid, "EndDateRecurrenceRange constructor.\nstartDate.TimeZone={0}\nendDateTime.TimeZone={1}", new object[]
     {
         startDate.TimeZone,
         endDate.TimeZone
     });
     this.StartDate = startDate;
     this.EndDate   = endDate;
 }
Beispiel #8
0
        private bool WriteRecipientProperty(ConversionRecipientEntry recipient, NativeStorePropertyDefinition property)
        {
            object obj = recipient.TryGetProperty(property);

            if (!PropertyError.IsPropertyError(obj))
            {
                obj = ExTimeZoneHelperForMigrationOnly.ToLegacyUtcIfDateTime(obj);
                this.tnefWriter.WriteProperty(property, obj);
                return(true);
            }
            return(false);
        }
 protected override void SetValidatedStoreProperty(StorePropertyDefinition propertyDefinition, object propertyValue)
 {
     SchemaConverter.Setter setter = this.schemaConverter.GetSetter(propertyDefinition);
     if (!this.isReadOnly && setter != null)
     {
         setter((IPropertyBag)this.underlyingPropertyBag, ExTimeZoneHelperForMigrationOnly.ToUtcIfDateTime(propertyValue));
         return;
     }
     throw PropertyError.ToException(new PropertyError[]
     {
         new PropertyError(propertyDefinition, PropertyErrorCode.NotSupported)
     });
 }
 protected override object TryGetStoreProperty(StorePropertyDefinition propertyDefinition)
 {
     SchemaConverter.Getter getter = this.schemaConverter.GetGetter(propertyDefinition);
     if (getter != null)
     {
         object obj = getter(this.underlyingPropertyBag);
         if (obj is PropertyErrorCode)
         {
             obj = new PropertyError(propertyDefinition, (PropertyErrorCode)obj);
         }
         return(ExTimeZoneHelperForMigrationOnly.ToExDateTimeIfObjectIsDateTime(this.exTimeZone, obj));
     }
     return(new PropertyError(propertyDefinition, PropertyErrorCode.NotSupported));
 }
        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()));
        }
        public static ExTimeZone GetExTimeZoneFromItem(Item item)
        {
            ExTimeZone exTimeZone = TimeZoneHelper.GetRecurringTimeZoneFromPropertyBag(item.PropertyBag);

            if (exTimeZone == null)
            {
                exTimeZone = TimeZoneHelper.GetTimeZoneFromProperties("Customized Time Zone", null, item.GetValueOrDefault <byte[]>(InternalSchema.TimeZoneDefinitionStart));
            }
            if (exTimeZone == null)
            {
                if (item.Session != null && item.Session.ExTimeZone != ExTimeZone.UtcTimeZone)
                {
                    exTimeZone = item.Session.ExTimeZone;
                }
                else
                {
                    ExTimeZoneHelperForMigrationOnly.CheckValidationLevel(false, ExTimeZoneHelperForMigrationOnly.ValidationLevel.Low, "TimeZoneHelper.GetTimeZoneFromItem: no time zone", new object[0]);
                    exTimeZone = ExTimeZone.CurrentTimeZone;
                }
            }
            return(exTimeZone);
        }
        private static void WriteRecipient(BinaryWriter writer, BlobRecipient recipient)
        {
            List <PropValue> list = new List <PropValue>(recipient.PropertyValues.Count);

            foreach (PropValue item in PropValue.ConvertEnumerator <PropertyDefinition>(recipient.PropertyValues))
            {
                if (!PropertyError.IsPropertyError(item.Value) && !((PropTag)((PropertyTagPropertyDefinition)item.Property).PropertyTag).IsNamedProperty())
                {
                    list.Add(item);
                }
            }
            uint count = (uint)list.Count;
            uint value = 0U;

            writer.Write(count);
            writer.Write(value);
            foreach (PropValue propValue in list)
            {
                PropertyTagPropertyDefinition propertyTagPropertyDefinition = (PropertyTagPropertyDefinition)propValue.Property;
                object value2 = ExTimeZoneHelperForMigrationOnly.ToUtcIfDateTime(propValue.Value);
                BlobRecipientParser.WritePropValue(writer, (PropTag)propertyTagPropertyDefinition.PropertyTag, value2);
            }
        }
        internal static object GetValueFromPropValue(StoreSession storeSession, ExTimeZone exTimeZone, StorePropertyDefinition propertyDefinition, PropValue propertyValue)
        {
            if (propertyValue.IsError())
            {
                int num = propertyValue.GetErrorValue();
                if (num == -2147220732 && (propertyDefinition.SpecifiedWith == PropertyTypeSpecifier.GuidId || propertyDefinition.SpecifiedWith == PropertyTypeSpecifier.GuidString))
                {
                    num = -2147221233;
                }
                return(MapiPropertyBag.CreatePropertyError(num, propertyDefinition));
            }
            PropType propType = propertyValue.PropTag.ValueType();

            if (propType == PropType.Restriction)
            {
                if (storeSession == null)
                {
                    throw new NotSupportedException("PT_RESTRICTION is not supported when we do not have a session. This very likely is an attachment.");
                }
                return(FilterRestrictionConverter.CreateFilter(storeSession, storeSession.Mailbox.MapiStore, (Restriction)propertyValue.Value, false));
            }
            else
            {
                if (propertyValue.Value == null)
                {
                    return(MapiPropertyBag.CreatePropertyError(-2147221233, propertyDefinition));
                }
                if (propType == PropType.Actions)
                {
                    if (storeSession == null)
                    {
                        throw new NotSupportedException("RuleAction type not supported without a session.");
                    }
                    RuleAction[] array  = (RuleAction[])propertyValue.Value;
                    RuleAction[] array2 = new RuleAction[array.Length];
                    for (int i = 0; i < array2.Length; i++)
                    {
                        array2[i] = RuleActionConverter.ConvertRuleAction(storeSession, exTimeZone, array[i]);
                    }
                    return(array2);
                }
                else if (propType == PropType.SysTime)
                {
                    DateTime dateTime = (DateTime)propertyValue.Value;
                    if (ExDateTime.IsValidDateTime(dateTime))
                    {
                        return(new ExDateTime(exTimeZone, dateTime));
                    }
                    return(MapiPropertyBag.CreatePropertyError(-2147221221, propertyDefinition));
                }
                else
                {
                    if (propType == PropType.SysTimeArray)
                    {
                        DateTime[] array3 = (DateTime[])propertyValue.Value;
                        foreach (DateTime dateTime2 in array3)
                        {
                            if (!ExDateTime.IsValidDateTime(dateTime2))
                            {
                                return(MapiPropertyBag.CreatePropertyError(-2147221221, propertyDefinition));
                            }
                        }
                        return(ExTimeZoneHelperForMigrationOnly.ToExDateTimeArray(exTimeZone, array3));
                    }
                    return(propertyValue.Value);
                }
            }
        }
Beispiel #15
0
 internal void WritePropValue(PropTag propertyTag, object value)
 {
     this.WriteInt((int)propertyTag);
     if (value is int)
     {
         this.WriteInt((int)value);
         return;
     }
     if (value is bool)
     {
         this.WritePropValueBool((bool)value);
         return;
     }
     if (value is DateTime)
     {
         ExTimeZoneHelperForMigrationOnly.CheckValidationLevel(false, ExTimeZoneHelperForMigrationOnly.ValidationLevel.High, "OutlookBlobWriter.WritePropValue is being passed a DateTime argument.", new object[0]);
         this.WritePropValueDateTime((DateTime)value);
         return;
     }
     if (value is DateTime[])
     {
         ExTimeZoneHelperForMigrationOnly.CheckValidationLevel(false, ExTimeZoneHelperForMigrationOnly.ValidationLevel.High, "OutlookBlobWriter.WritePropValue is being passed a DateTime[] argument.", new object[0]);
         DateTime[] array = (DateTime[])value;
         this.WriteInt(array.Length);
         foreach (DateTime dateTime in array)
         {
             this.WritePropValueDateTime(dateTime);
         }
         return;
     }
     if (value is ExDateTime)
     {
         this.WritePropValueDateTime((DateTime)((ExDateTime)value));
         return;
     }
     if (value is ExDateTime[])
     {
         ExDateTime[] array3 = (ExDateTime[])value;
         this.WriteInt(array3.Length);
         foreach (ExDateTime exDateTime in array3)
         {
             this.WritePropValueDateTime((DateTime)exDateTime);
         }
         return;
     }
     if (value is string)
     {
         this.WritePropValueString((string)value, propertyTag.ValueType());
         return;
     }
     if (value is string[])
     {
         string[] array5 = (string[])value;
         this.WriteInt(array5.Length);
         foreach (string value2 in array5)
         {
             this.WritePropValueString(value2, propertyTag.ValueType());
         }
         return;
     }
     if (value is byte[])
     {
         byte[] array7 = (byte[])value;
         this.WriteShort((short)array7.Length);
         this.WriteByteArray(array7);
         return;
     }
     if (value is byte[][])
     {
         byte[][] array8 = (byte[][])value;
         this.WriteInt(array8.Length);
         foreach (byte[] array10 in array8)
         {
             this.WriteInt(array10.Length);
             this.WriteByteArray(array10);
         }
         return;
     }
     throw new NotSupportedException();
 }