public static void SaveUserOofSettings(MailboxSession itemStore, UserOofSettings userOofSettings)
        {
            UserOofSettingsSerializer o = UserOofSettingsSerializer.Serialize(userOofSettings);

            using (StringWriter stringWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings
                {
                    CheckCharacters = false
                }))
                {
                    UserOofSettingsSerializer.Serializer.Serialize(xmlWriter, o);
                    string      body        = stringWriter.ToString();
                    VersionedId versionedId = UserOofSettingsStorage.settingsStorageHandler.SetItemContent(itemStore, body);
                    itemStore.Mailbox[MailboxSchema.UserOofSettingsItemId] = versionedId.ObjectId.ProviderLevelItemId;
                }
            }
            UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: Adding OOF rules", itemStore.MailboxOwner);
            using (RuleGenerator ruleGenerator = new RuleGenerator(itemStore, userOofSettings))
            {
                ruleGenerator.OnUserOofSettingsChanges();
            }
            UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: OOF rules added, setting OOF mailbox table properties.", itemStore.MailboxOwner);
            OofStateHandler.Set(itemStore, userOofSettings.OofState == OofState.Enabled, (userOofSettings.UserChangeTime != null) ? userOofSettings.UserChangeTime.Value : DateTime.UtcNow);
            itemStore.Mailbox[MailboxSchema.OofScheduleStart] = ((userOofSettings.OofState == OofState.Scheduled) ? ((ExDateTime)userOofSettings.StartTime) : UserOofSettingsStorage.Date1601Utc);
            itemStore.Mailbox[MailboxSchema.OofScheduleEnd]   = ((userOofSettings.OofState == OofState.Scheduled) ? ((ExDateTime)userOofSettings.EndTime) : UserOofSettingsStorage.Date1601Utc);
            itemStore.Mailbox.Save();
            itemStore.Mailbox.Load();
        }
Esempio n. 2
0
 private void Write6_UserOofSettingsSerializer(string n, string ns, UserOofSettingsSerializer o, bool isNullable, bool needType)
 {
     if (o == null)
     {
         if (isNullable)
         {
             base.WriteNullTagLiteral(n, ns);
         }
         return;
     }
     if (!needType)
     {
         Type type = o.GetType();
         if (!(type == typeof(UserOofSettingsSerializer)))
         {
             throw base.CreateUnknownTypeException(o);
         }
     }
     base.WriteStartElement(n, ns, o, false, null);
     if (needType)
     {
         base.WriteXsiType("UserOofSettingsSerializer", "");
     }
     this.Write2_Duration("Duration", "", o.Duration, false, false);
     base.WriteElementString("OofState", "", this.Write3_OofState(o.OofState));
     base.WriteElementString("ExternalAudience", "", this.Write4_ExternalAudience(o.ExternalAudience));
     this.Write5_ReplyBodySerializer("InternalReply", "", o.InternalReply, false, false);
     this.Write5_ReplyBodySerializer("ExternalReply", "", o.ExternalReply, false, false);
     base.WriteElementStringRaw("SetByLegacyClient", "", XmlConvert.ToString(o.SetByLegacyClient));
     if (o.UserChangeTime != null)
     {
         base.WriteNullableStringLiteralRaw("UserChangeTime", "", XmlSerializationWriter.FromDateTime(o.UserChangeTime.Value));
     }
     else
     {
         base.WriteNullTagLiteral("UserChangeTime", "");
     }
     base.WriteEndElement(o);
 }
Esempio n. 3
0
        private UserOofSettingsSerializer Read7_UserOofSettingsSerializer(bool isNullable, bool checkType)
        {
            XmlQualifiedName xmlQualifiedName = checkType ? base.GetXsiType() : null;
            bool             flag             = false;

            if (isNullable)
            {
                flag = base.ReadNull();
            }
            if (checkType && !(xmlQualifiedName == null) && (xmlQualifiedName.Name != this.id3_UserOofSettingsSerializer || xmlQualifiedName.Namespace != this.id2_Item))
            {
                throw base.CreateUnknownTypeException(xmlQualifiedName);
            }
            if (flag)
            {
                return(null);
            }
            UserOofSettingsSerializer userOofSettingsSerializer = new UserOofSettingsSerializer();

            bool[] array = new bool[7];
            while (base.Reader.MoveToNextAttribute())
            {
                if (!base.IsXmlnsAttribute(base.Reader.Name))
                {
                    base.UnknownNode(userOofSettingsSerializer);
                }
            }
            base.Reader.MoveToElement();
            if (base.Reader.IsEmptyElement)
            {
                base.Reader.Skip();
                return(userOofSettingsSerializer);
            }
            base.Reader.ReadStartElement();
            base.Reader.MoveToContent();
            int num         = 0;
            int readerCount = base.ReaderCount;

            while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != XmlNodeType.None)
            {
                if (base.Reader.NodeType == XmlNodeType.Element)
                {
                    if (!array[0] && base.Reader.LocalName == this.id4_Duration && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.Duration = this.Read2_Duration(false, true);
                        array[0] = true;
                    }
                    else if (!array[1] && base.Reader.LocalName == this.id5_OofState && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.OofState = this.Read3_OofState(base.Reader.ReadElementString());
                        array[1] = true;
                    }
                    else if (!array[2] && base.Reader.LocalName == this.id6_ExternalAudience && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.ExternalAudience = this.Read4_ExternalAudience(base.Reader.ReadElementString());
                        array[2] = true;
                    }
                    else if (!array[3] && base.Reader.LocalName == this.id7_InternalReply && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.InternalReply = this.Read5_ReplyBodySerializer(false, true);
                        array[3] = true;
                    }
                    else if (!array[4] && base.Reader.LocalName == this.id8_ExternalReply && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.ExternalReply = this.Read5_ReplyBodySerializer(false, true);
                        array[4] = true;
                    }
                    else if (!array[5] && base.Reader.LocalName == this.id9_SetByLegacyClient && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.SetByLegacyClient = XmlConvert.ToBoolean(base.Reader.ReadElementString());
                        array[5] = true;
                    }
                    else if (!array[6] && base.Reader.LocalName == this.id10_UserChangeTime && base.Reader.NamespaceURI == this.id2_Item)
                    {
                        userOofSettingsSerializer.UserChangeTime = this.Read6_NullableOfDateTime(true);
                        array[6] = true;
                    }
                    else
                    {
                        base.UnknownNode(userOofSettingsSerializer, ":Duration, :OofState, :ExternalAudience, :InternalReply, :ExternalReply, :SetByLegacyClient, :UserChangeTime");
                    }
                }
                else
                {
                    base.UnknownNode(userOofSettingsSerializer, ":Duration, :OofState, :ExternalAudience, :InternalReply, :ExternalReply, :SetByLegacyClient, :UserChangeTime");
                }
                base.Reader.MoveToContent();
                base.CheckReaderCount(ref num, ref readerCount);
            }
            base.ReadEndElement();
            return(userOofSettingsSerializer);
        }
        public static UserOofSettings LoadUserOofSettings(MailboxSession itemStore)
        {
            UserOofSettings userOofSettings = null;
            string          text            = null;
            string          text2           = null;

            try
            {
                text2 = UserOofSettingsStorage.LoadUserOofSettingsByItemId(itemStore);
                if (string.IsNullOrEmpty(text2))
                {
                    text2 = UserOofSettingsStorage.settingsStorageHandler.GetItemContent(itemStore);
                }
            }
            catch (ObjectNotFoundException arg)
            {
                UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal, ObjectNotFoundException>(0L, "Mailbox:{0}: Exception on loading useroofsettings, exception = {1}, re-creating default useroofsettings.", itemStore.MailboxOwner, arg);
            }
            catch (VirusException arg2)
            {
                UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal, VirusException>(0L, "Mailbox:{0}: Exception on loading useroofsettings, exception = {1}, re-creating default useroofsettings.", itemStore.MailboxOwner, arg2);
                text = Strings.descOOFVirusDetectedOofReplyMessage;
            }
            if (string.IsNullOrEmpty(text2))
            {
                userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                if (text != null)
                {
                    userOofSettings.InternalReply.RawMessage = text;
                }
            }
            else
            {
                using (StringReader stringReader = new StringReader(text2))
                {
                    using (XmlReader xmlReader = XmlReader.Create(stringReader, new XmlReaderSettings
                    {
                        CheckCharacters = false
                    }))
                    {
                        try
                        {
                            UserOofSettingsSerializer userOofSettingsSerializer = (UserOofSettingsSerializer)UserOofSettingsSerializer.Serializer.Deserialize(xmlReader);
                            userOofSettings = userOofSettingsSerializer.Deserialize();
                            userOofSettings.InternalReply.SetByLegacyClient = userOofSettings.SetByLegacyClient;
                            userOofSettings.ExternalReply.SetByLegacyClient = userOofSettings.SetByLegacyClient;
                        }
                        catch (InvalidOperationException)
                        {
                            UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal>(0L, "Mailbox:{0}: Cannot read user OOF settings, InvalidOperationException", itemStore.MailboxOwner);
                            userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                        }
                        catch (InvalidUserOofSettingsXmlDocument)
                        {
                            userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                        }
                    }
                }
                UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: Loaded existing OOF settings", itemStore.MailboxOwner);
            }
            if (userOofSettings.OofState == OofState.Scheduled && userOofSettings.EndTime < DateTime.UtcNow)
            {
                userOofSettings.OofState = OofState.Disabled;
            }
            if (userOofSettings.OofState != OofState.Scheduled)
            {
                DateTime utcNow   = DateTime.UtcNow;
                DateTime dateTime = utcNow.AddDays(1.0);
                Duration duration = new Duration(DateTime.SpecifyKind(new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, utcNow.Hour, 0, 0), DateTimeKind.Utc), DateTime.SpecifyKind(new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0), DateTimeKind.Utc));
                userOofSettings.Duration = duration;
            }
            return(userOofSettings);
        }