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(); }
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); }
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); }