private bool TryUpdateCalendarItemInternal(ref CalendarItemBase originalCalendarItem, bool shouldThrow, bool canUpdatePrincipalCalendar) { this.CheckDisposed("MeetingRequest::TryUpdateCalendarItem"); bool flag = originalCalendarItem == null; CalendarProcessingSteps calendarProcessingSteps = CalendarProcessingSteps.None; ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.TryUpdateCalendarItemInternal: GOID={0}", this.GlobalObjectId); base.CheckPreConditionForDelegatedMeeting(canUpdatePrincipalCalendar); if (originalCalendarItem != this.externalCorrelatedCalendarItem) { throw new CalendarProcessingException(ServerStrings.ExInvalidCallToTryUpdateCalendarItem); } if (!this.CheckPreConditions(originalCalendarItem, shouldThrow, canUpdatePrincipalCalendar)) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.TryUpdateCalendarItemInternal: GOID={0}; failed pre-conditions", this.GlobalObjectId); return(false); } if (originalCalendarItem != null) { originalCalendarItem.IsCorrelated = false; } calendarProcessingSteps |= CalendarProcessingSteps.PropsCheck; DelegateRuleType?delegateRuleType; if (MeetingMessage.TryGetDelegateRuleTypeFromSession(base.Session as MailboxSession, out delegateRuleType)) { if (delegateRuleType == DelegateRuleType.ForwardAndSetAsInformationalUpdate) { ExTraceGlobals.MeetingMessageTracer.Information((long)this.GetHashCode(), "Storage.MeetingMessage.TryUpdateCalendarItemInternal: Setting PrincipalWantsCopy on meetingmessage."); MeetingMessageType valueOrDefault = base.GetValueOrDefault <MeetingMessageType>(InternalSchema.MeetingRequestType, MeetingMessageType.NewMeetingRequest); base.LocationIdentifierHelperInstance.SetLocationIdentifier(53365U); this[InternalSchema.OriginalMeetingType] = valueOrDefault; this[InternalSchema.MeetingRequestType] = MeetingMessageType.PrincipalWantsCopy; } calendarProcessingSteps |= CalendarProcessingSteps.PrincipalWantsCopyChecked; } int num = flag ? 1 : this.CompareToCalendarItem(originalCalendarItem); calendarProcessingSteps |= CalendarProcessingSteps.LookedForOutOfDate; if ((!base.CalendarProcessed && num == 0) || num > 0) { base.LocationIdentifierHelperInstance.SetLocationIdentifier(57461U, LastChangeAction.UpdateCalendarItem); this.UpdateCalendarItemInternal(ref originalCalendarItem); base.CalendarProcessed = true; if (originalCalendarItem != null) { originalCalendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(32885U, LastChangeAction.UpdateCalendarItem); } MeetingMessageInstance.SetVersionInfo(originalCalendarItem); calendarProcessingSteps |= CalendarProcessingSteps.UpdatedCalItem; } else { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, bool, int>((long)this.GetHashCode(), "Storage.MeetingMessage.TryUpdateCalendarItemInternal: GOID={0}; NOOP: calendarprocessed = {1}, originalCalendarItem={2}", this.GlobalObjectId, base.CalendarProcessed, (originalCalendarItem == null) ? -1 : originalCalendarItem.GetHashCode()); } if (flag && originalCalendarItem != null) { this.externalCorrelatedCalendarItem = originalCalendarItem; calendarProcessingSteps |= CalendarProcessingSteps.CreatedOnPrincipal; } if (originalCalendarItem != null) { originalCalendarItem.CharsetDetector.DetectionOptions = base.CharsetDetector.DetectionOptions; } this.SetCalendarProcessingSteps(calendarProcessingSteps); return(true); }
public static bool IsDelegateOnlyFromSession(MailboxSession session) { DelegateRuleType?delegateRuleType; return(MeetingMessage.TryGetDelegateRuleTypeFromSession(session, out delegateRuleType) && delegateRuleType == DelegateRuleType.ForwardAndDelete); }