public override void SetCalendarProcessingSteps(CalendarProcessingSteps stepComplete)
        {
            this.CheckDisposed("SetCalendarProcessingSteps");
            EnumValidator.ThrowIfInvalid <CalendarProcessingSteps>(stepComplete, "stepComplete");
            CalendarProcessingSteps?valueAsNullable         = base.GetValueAsNullable <CalendarProcessingSteps>(InternalSchema.CalendarProcessingSteps);
            CalendarProcessingSteps calendarProcessingSteps = stepComplete;

            if (valueAsNullable != null)
            {
                if ((valueAsNullable.Value & stepComplete) == stepComplete)
                {
                    return;
                }
                calendarProcessingSteps = (valueAsNullable.Value | stepComplete);
            }
            base.LocationIdentifierHelperInstance.SetLocationIdentifier(60021U, LastChangeAction.SetCalendarProcessingSteps);
            this[InternalSchema.CalendarProcessingSteps] = calendarProcessingSteps;
        }
Esempio n. 2
0
 // Token: 0x0600079D RID: 1949 RVA: 0x00036558 File Offset: 0x00034758
 private void ProcessMeetingResponse(MailboxSession itemStore, MeetingResponse mtgMessage, ref CalendarItemBase originalCalItem, string internetMessageId)
 {
     try
     {
         if (!mtgMessage.IsRepairUpdateMessage && originalCalItem != null && !originalCalItem.ResponseRequested)
         {
             CalendarProcessing.ProcessingResponseTracer.TraceDebug <object, string>((long)mtgMessage.GetHashCode(), "{0}: Skipping processing the MeetingResponse since the organizer has not requested a response: {1}", TraceContext.Get(), internetMessageId);
             CalendarProcessingSteps calendarProcessingSteps = CalendarProcessingSteps.PropsCheck | CalendarProcessingSteps.LookedForOutOfDate | CalendarProcessingSteps.UpdatedCalItem;
             mtgMessage.SetCalendarProcessingSteps(calendarProcessingSteps);
         }
         else if (mtgMessage.TryUpdateCalendarItem(ref originalCalItem, false))
         {
             mtgMessage.Load();
             try
             {
                 itemStore.COWSettings.TemporaryDisableHold = true;
                 ConflictResolutionResult conflictResolutionResult = originalCalItem.Save(SaveMode.ResolveConflicts);
                 originalCalItem.Load();
                 if (conflictResolutionResult.SaveStatus == SaveResult.IrresolvableConflict)
                 {
                     throw new SaveConflictException(ServerStrings.ExSaveFailedBecauseOfConflicts(originalCalItem.Id), conflictResolutionResult);
                 }
             }
             finally
             {
                 itemStore.COWSettings.TemporaryDisableHold = false;
             }
         }
         CalendarAssistantPerformanceCounters.MeetingResponses.Increment();
         CalendarProcessing.TracerPfd.TracePfd <int, object, string>((long)mtgMessage.GetHashCode(), "PFD IWC {0} {1}:completed Processing Meeting Response for {2}", 20631, TraceContext.Get(), internetMessageId);
     }
     catch (ObjectNotFoundException innerException)
     {
         throw new TransientException(Strings.descTransientErrorInResponse, innerException);
     }
 }
        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 override CalendarItemBase PreProcess(bool createNewItem, bool processExternal, int defaultReminderMinutes)
        {
            this.CheckDisposed("PreProcess");
            base.LocationIdentifierHelperInstance.SetLocationIdentifier(44661U, LastChangeAction.PreProcessMeetingMessage);
            bool             canUpdatePrincipalCalendar = true;
            CalendarItemBase calendarItemBase           = null;
            bool             flag = false;

            if (base.GetValueOrDefault <MeetingMessageType>(InternalSchema.MeetingRequestType) == MeetingMessageType.Outdated)
            {
                return(null);
            }
            try
            {
                calendarItemBase = this.GetCorrelatedItem();
                if (base.IsOutOfDate(calendarItemBase))
                {
                    base.MarkAsOutOfDate();
                    base.LocationIdentifierHelperInstance.SetLocationIdentifier(59381U, LastChangeAction.MeetingMessageOutdated);
                    return(null);
                }
                if (base.SkipMessage(processExternal, calendarItemBase))
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, bool, bool>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping meeting message processing. (ProcessExternal: {1}; IsRepairUpdateMessage: {2})", this.GlobalObjectId, processExternal, base.IsRepairUpdateMessage);
                    return(null);
                }
                CalendarProcessingSteps valueOrDefault = base.GetValueOrDefault <CalendarProcessingSteps>(InternalSchema.CalendarProcessingSteps);
                bool flag2 = (valueOrDefault & CalendarProcessingSteps.CreatedOnPrincipal) == CalendarProcessingSteps.CreatedOnPrincipal;
                bool flag3 = (valueOrDefault & CalendarProcessingSteps.UpdatedCalItem) == CalendarProcessingSteps.UpdatedCalItem;
                flag = (flag2 || flag3);
                if (flag)
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping meeting message processing because it was already created.", this.GlobalObjectId);
                }
                else if (createNewItem || calendarItemBase != null)
                {
                    MeetingRequest meetingRequest = this as MeetingRequest;
                    if (meetingRequest != null)
                    {
                        flag = meetingRequest.TryUpdateCalendarItem(ref calendarItemBase, defaultReminderMinutes, canUpdatePrincipalCalendar);
                    }
                    else
                    {
                        MeetingCancellation meetingCancellation = this as MeetingCancellation;
                        if (meetingCancellation != null)
                        {
                            flag = meetingCancellation.TryUpdateCalendarItem(ref calendarItemBase, canUpdatePrincipalCalendar);
                        }
                    }
                }
                else
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Skipping new meeting request.", this.GlobalObjectId);
                }
            }
            finally
            {
                if (!flag && calendarItemBase != null)
                {
                    ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.PreProcess: GOID={0}. Disposing calendar item; preconditions failed.", this.GlobalObjectId);
                    calendarItemBase.Dispose();
                    calendarItemBase = null;
                }
            }
            return(calendarItemBase);
        }
Esempio n. 5
0
 public virtual void SetCalendarProcessingSteps(CalendarProcessingSteps stepComplete)
 {
     throw new NotSupportedException();
 }