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