コード例 #1
0
 // Token: 0x0600079C RID: 1948 RVA: 0x000364A4 File Offset: 0x000346A4
 private static void AutoAcceptEvents(MailboxSession session, CalendarItemBase originalCalItem)
 {
     if (originalCalItem != null && !originalCalItem.IsCancelled)
     {
         bool flag;
         if (session.IsGroupMailbox())
         {
             CalendarProcessing.ProcessingRequestTracer.TraceDebug <IExchangePrincipal>(0L, "Processing meeting request for group mailbox {0}", session.MailboxOwner);
             originalCalItem.Reminder.IsSet = false;
             flag = false;
         }
         else
         {
             CalendarProcessing.ProcessingRequestTracer.TraceDebug <IExchangePrincipal>(0L, "Processing sent to self meeting request. Mailbox owner: {0}", session.MailboxOwner);
             flag = originalCalItem.ResponseRequested;
         }
         using (MeetingResponse meetingResponse = originalCalItem.RespondToMeetingRequest(ResponseType.Accept, true, flag, null, null))
         {
             if (flag)
             {
                 meetingResponse.Send();
             }
         }
         originalCalItem.Load();
     }
 }
コード例 #2
0
        private bool ShouldProcessMessage(MailboxSession session, StoreDriverDeliveryEventArgsImpl argsImpl)
        {
            MessageItem messageItem = argsImpl.MessageItem;

            if (!StoreDriverConfig.Instance.IsGroupEscalationAgentEnabled)
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the feature is disabled via app config.");
                return(false);
            }
            if (!GroupEscalation.IsEscalationEnabled())
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the feature is disabled.");
                return(false);
            }
            if (session == null || !session.IsGroupMailbox())
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the session is not for a group mailbox.");
                return(false);
            }
            if (this.processedMessages.IsAlreadyProcessedForStage(messageItem.InternetMessageId, messageItem.SentTime, session.MailboxGuid, DeliveryStage.CreatedMessageEventHandled))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as it was already processed earlier.");
                return(false);
            }
            if (!ObjectClass.IsMessage(argsImpl.MessageClass, false) && !ObjectClass.IsMeetingMessage(argsImpl.MessageClass) && !ObjectClass.IsMeetingMessageSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug <string>((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring messages that are not messages nor meeting messages. Message class {0}", argsImpl.MessageClass);
                return(false);
            }
            if (ObjectClass.IsMeetingForwardNotification(argsImpl.MessageClass) || ObjectClass.IsMeetingForwardNotificationSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: item class is meeting forward notification. Do not process.");
                return(false);
            }
            if (ObjectClass.IsMeetingResponse(argsImpl.MessageClass) || ObjectClass.IsMeetingResponseSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: item class is meeting response. Do not process.");
                return(false);
            }
            if (GroupEscalationAgent.IsEHAMigrationMeetingMessage(argsImpl.MailItem))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring EHA migration messages.");
                return(false);
            }
            if (GroupEscalationAgent.IsRepairUpdateMessage(argsImpl.MessageItem))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring RUM messages.");
                return(false);
            }
            if (GroupEscalationAgent.IsOofOrDsnMessage(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring OOF or DSN messages.");
                return(false);
            }
            return(true);
        }
コード例 #3
0
        internal void Enforce(Func <ICollection <MapiAclTableRestriction.ExternalUserPermission> > getExternalUserPermissions)
        {
            if ((this.session == null || !this.session.IsMoveUser) && this.coreFolder.IsPermissionChangeBlocked())
            {
                ExTraceGlobals.StorageTracer.TraceDebug <string>((long)this.GetHashCode(), "{0}: Cannot change permissions on permission-change-blocked folder.", this.session.DisplayAddress);
                throw new CannotChangePermissionsOnFolderException();
            }
            MailboxSession mailboxSession = this.session as MailboxSession;

            if (mailboxSession == null || mailboxSession.IsGroupMailbox())
            {
                return;
            }
            this.EnforceSharingPolicy(mailboxSession, getExternalUserPermissions());
        }
コード例 #4
0
        public void OnDeliveredMessageHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args)
        {
            StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = (StoreDriverDeliveryEventArgsImpl)args;
            MailboxSession mailboxSession = storeDriverDeliveryEventArgsImpl.MailboxSession;

            if (mailboxSession == null || !mailboxSession.IsGroupMailbox())
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.OnDeliveredMessageHandler: Session null or not a group mailbox.");
                return;
            }
            MessageItem messageItem = storeDriverDeliveryEventArgsImpl.MessageItem;

            messageItem.Load(new PropertyDefinition[]
            {
                ItemSchema.InternetMessageId,
                ItemSchema.SentTime
            });
            this.processedMessages.ClearMessageFromProcessedList(messageItem.InternetMessageId, messageItem.SentTime, mailboxSession.MailboxGuid);
        }
コード例 #5
0
        // Token: 0x0600077A RID: 1914 RVA: 0x00034F74 File Offset: 0x00033174
        private void HandlePermissionChange(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item, List <KeyValuePair <string, object> > customDataToLog)
        {
            if (mapiEvent.ItemEntryId == null || itemStore.IsGroupMailbox())
            {
                return;
            }
            StoreObjectId storeObjectId   = StoreObjectId.FromProviderSpecificId(mapiEvent.ItemEntryId, StoreObjectType.Folder);
            StoreObjectId defaultFolderId = itemStore.GetDefaultFolderId(DefaultFolderType.Root);

            if (storeObjectId != null && defaultFolderId != null)
            {
                if (!storeObjectId.Equals(defaultFolderId) && !ObjectClass.IsCalendarFolder(mapiEvent.ObjectClass))
                {
                    return;
                }
                using (Folder folder = Folder.Bind(itemStore, storeObjectId))
                {
                    string text = CalendarLoggingHelper.GetCalendarPermissionsLog(itemStore, folder);
                    if (!string.IsNullOrEmpty(text))
                    {
                        text = string.Format("Client Type: {0} New Permission Table:\n{1}", mapiEvent.ClientType, text);
                    }
                    else
                    {
                        text = string.Format("Client Type: {0} Mailbox session or folder was null", mapiEvent.ClientType);
                    }
                    CalendarPermissionsLog.LogEntry(itemStore, text, new object[0]);
                    return;
                }
            }
            if (storeObjectId == null)
            {
                CalendarAssistant.GeneralTracer.TraceError <object, byte[]>((long)this.GetHashCode(), "{0}: Unable to bind to a calendar folder with FolderId {1}", TraceContext.Get(), mapiEvent.ItemEntryId);
                return;
            }
            CalendarAssistant.GeneralTracer.TraceError <object, Guid>((long)this.GetHashCode(), "{0}: Unable to bind to the root folder for Mailbox {1}", TraceContext.Get(), mapiEvent.MailboxGuid);
        }
コード例 #6
0
        private bool ShouldGenerateMfn()
        {
            MessageItem    messageItem    = this.item.Item;
            MailboxSession mailboxSession = messageItem.Session as MailboxSession;

            if (mailboxSession == null)
            {
                TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the session is not a mailboxsession.");
                return(false);
            }
            if (!ObjectClass.IsMeetingRequest(messageItem.ClassName) && !ObjectClass.IsMeetingRequestSeries(messageItem.ClassName))
            {
                TraceHelper.MeetingForwardNotificationTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Not a meeting request {0} - skipping MFN generation.", messageItem.ClassName);
                return(false);
            }
            string text = null;
            bool   result;

            try
            {
                string text2 = MfnSubmitter.SafeGetProperty <string>(messageItem, MessageItemSchema.ReceivedRepresentingEmailAddress, string.Empty);
                if (!string.IsNullOrEmpty(text2))
                {
                    text = string.Format("Skipping MFN generation as the update/forward was made by a delegate {0}. From: {1}, Sender {2}, Subject: {3}", new object[]
                    {
                        text2,
                        messageItem.From,
                        messageItem.Sender,
                        messageItem.Subject ?? "<No subject found>"
                    });
                    result = false;
                }
                else
                {
                    int num = MfnSubmitter.SafeGetProperty <int>(messageItem, MeetingMessageSchema.AppointmentAuxiliaryFlags, 0);
                    if ((num & 32) != 0)
                    {
                        text   = string.Format("Skipping MFN generation for RUMs.  From: {0}, Sender {1} , Subject: {2}", messageItem.From, messageItem.Sender, messageItem.Subject ?? "<No subject found>");
                        result = false;
                    }
                    else if (messageItem.IsResponseRequested && (num & 256) != 0)
                    {
                        text   = string.Format("Skipping MFN generation for events added from group calendar.  From: {0}, Sender {1} , Subject: {2}", messageItem.From, messageItem.Sender, messageItem.Subject ?? "<No subject found>");
                        result = false;
                    }
                    else
                    {
                        if ((num & 4) == 0)
                        {
                            if (mailboxSession.IsGroupMailbox())
                            {
                                TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the meeting was created/updated on the group calendar. From: {0}, Sender {1}, Auxilliary Flags {2}, Subject {3}", new object[]
                                {
                                    messageItem.From,
                                    messageItem.Sender,
                                    num,
                                    messageItem.Subject ?? "<No subject found>"
                                });
                                return(false);
                            }
                            if (Participant.HasSameEmail(messageItem.From, messageItem.Sender, mailboxSession, true))
                            {
                                TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the update was made by the organizer. From: {0}, Sender {1}, Auxilliary Flags {2}, Subject {3}", new object[]
                                {
                                    messageItem.From,
                                    messageItem.Sender,
                                    num,
                                    messageItem.Subject ?? "<No subject found>"
                                });
                                return(false);
                            }
                            bool?flag = this.IsDelegateOfOrganizer();
                            if (flag != null && flag.Value)
                            {
                                text = string.Format("Skipping MFN generation as the update was made by a delegate. From: {0}, Sender {1}. Auxilliary Flags {2}, Subject {3}", new object[]
                                {
                                    messageItem.From,
                                    messageItem.Sender,
                                    num,
                                    messageItem.Subject ?? "<No subject found>"
                                });
                                return(false);
                            }
                        }
                        if (MeetingMessage.IsFromExternalParticipant(messageItem.From.RoutingType))
                        {
                            text = string.Format("Skipping MFN generation as the organizer is external. From: {0}, RoutingType {1}, Sender {2}, Auxilliary Flags {3} Subject : {4}", new object[]
                            {
                                messageItem.From,
                                messageItem.From.RoutingType,
                                messageItem.Sender,
                                num,
                                messageItem.Subject ?? "<No subject found>"
                            });
                            result = false;
                        }
                        else
                        {
                            text = string.Format("Generating MFN as the meeting was forwarded. From: {0}, RoutingType {1}, Sender {2}, Auxilliary Flags {3}, Subject {4}", new object[]
                            {
                                messageItem.From,
                                messageItem.From.RoutingType,
                                messageItem.Sender,
                                num,
                                messageItem.Subject ?? "<No subject found>"
                            });
                            result = true;
                        }
                    }
                }
            }
            finally
            {
                if (text != null)
                {
                    TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, text);
                    MfnLog.LogEntry(mailboxSession, text);
                }
            }
            return(result);
        }
コード例 #7
0
 // Token: 0x06000793 RID: 1939 RVA: 0x00035B83 File Offset: 0x00033D83
 private static bool IsAutoAcceptanceProcessingRequired(MailboxSession session, MeetingMessage mtgMessage, CalendarItemBase calendarItem)
 {
     return(calendarItem != null && mtgMessage is MeetingRequest && !calendarItem.IsOrganizer() && calendarItem.ResponseType != ResponseType.Accept && (session.IsGroupMailbox() || OldMessageDeletion.IsSelfForwardedEvent(mtgMessage, session)));
 }
コード例 #8
0
 // Token: 0x0600077C RID: 1916 RVA: 0x00035104 File Offset: 0x00033304
 private bool GetDelegatesRuleLoggerStatus(MailboxSession session)
 {
     return(session != null && session.MailboxOwner != null && !session.IsGroupMailbox() && this.IsDelegateRulesLoggerEnabled(session.MailboxOwner));
 }
コード例 #9
0
        // Token: 0x060007B4 RID: 1972 RVA: 0x000371A0 File Offset: 0x000353A0
        private List <VersionedId> QueryMatchingItems(MailboxSession itemStore, MeetingMessage item, byte[] itemGlobalObjId, string sentRepresenting, int itemSequenceNumber, ref OldMessageDeletion.LatestItemInfo latestInfo)
        {
            ExDateTime         utcNow = ExDateTime.UtcNow;
            List <VersionedId> list   = new List <VersionedId>();
            bool flag  = true;
            bool flag2 = (bool)Utils.SafeGetProperty(item, MessageItemSchema.MapiHasAttachment, false);
            bool flag3 = item.Body != null && item.Body.Size > 0L;
            bool flag4 = item is MeetingRequest;
            bool flag5 = item is MeetingResponse;
            bool flag6 = item is MeetingCancellation;

            SortBy[] sortColumns = new SortBy[]
            {
                new SortBy(CalendarItemBaseSchema.GlobalObjectId, SortOrder.Ascending),
                new SortBy(StoreObjectSchema.ItemClass, SortOrder.Descending)
            };
            ComparisonFilter seekFilter = new ComparisonFilter(ComparisonOperator.Equal, CalendarItemBaseSchema.GlobalObjectId, itemGlobalObjId);

            using (Folder folder = Folder.Bind(itemStore, item.ParentId))
            {
                using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, null, sortColumns, OldMessageDeletion.OMDColumnsToQuery))
                {
                    queryResult.SeekToCondition(SeekReference.OriginBeginning, seekFilter);
                    while (flag)
                    {
                        object[][] rows = queryResult.GetRows(25);
                        if (rows.Length < 1)
                        {
                            break;
                        }
                        ExDateTime itemOwnerChangeTime = (ExDateTime)Utils.SafeGetProperty(item, CalendarItemBaseSchema.OwnerCriticalChangeTime, utcNow);
                        foreach (object[] array in rows)
                        {
                            string text = array[0] as string;
                            if (!string.IsNullOrEmpty(text))
                            {
                                if (!itemStore.IsGroupMailbox())
                                {
                                    if ((flag4 || flag6) && !ObjectClass.IsMeetingRequest(text) && !ObjectClass.IsMeetingCancellation(text))
                                    {
                                        flag = false;
                                        break;
                                    }
                                    if (flag5 && !ObjectClass.IsMeetingResponse(text))
                                    {
                                        goto IL_186;
                                    }
                                }
                                byte[] rowGlobalObjectId = (array[2] is byte[]) ? (array[2] as byte[]) : null;
                                if (!OldMessageDeletion.GlobalObjectIdMatches(itemGlobalObjId, rowGlobalObjectId))
                                {
                                    flag = false;
                                    break;
                                }
                                this.DetermineIfWeDelete(list, item, array, itemOwnerChangeTime, sentRepresenting, itemSequenceNumber, ref latestInfo, ref flag2, ref flag3);
                            }
                            IL_186 :;
                        }
                    }
                }
            }
            return(list);
        }
コード例 #10
0
        // Token: 0x060007AC RID: 1964 RVA: 0x00036880 File Offset: 0x00034A80
        public void PerformCleanUp(MailboxSession itemStore, StoreObject item, CalendarConfiguration mailboxConfig, CalendarItemBase originalCalItem, IEnumerable <VersionedId> duplicates)
        {
            bool flag = false;

            if (mailboxConfig.RemoveOldMeetingMessages && !(item is MeetingForwardNotification))
            {
                this.DeleteOldMessages(itemStore, (MeetingMessage)item, originalCalItem, out flag);
            }
            if (item is MeetingMessage)
            {
                bool           flag2          = false;
                MeetingMessage meetingMessage = (MeetingMessage)item;
                if (meetingMessage.IsRepairUpdateMessage)
                {
                    flag2 = (!flag || (!(meetingMessage is MeetingRequest) && !(meetingMessage is MeetingCancellation)));
                    if (flag2)
                    {
                        meetingMessage.MarkAsOutOfDate();
                        meetingMessage.IsRead = true;
                        try
                        {
                            int num = 3;
                            ConflictResolutionResult saveResults;
                            do
                            {
                                saveResults = meetingMessage.Save(SaveMode.ResolveConflicts);
                                meetingMessage.Load();
                                num--;
                            }while (num > 0 && !CalendarProcessing.CheckSaveResults(meetingMessage, saveResults, meetingMessage.InternetMessageId));
                        }
                        catch (ObjectNotFoundException arg)
                        {
                            flag2 = false;
                            OldMessageDeletion.Tracer.TraceWarning <object, ObjectNotFoundException>((long)this.GetHashCode(), "{0}: Tried to mark a RUM as Outdated, which does not exist anymore. Exception: {1}", TraceContext.Get(), arg);
                        }
                    }
                }
                if (!flag2 && item is MeetingForwardNotification)
                {
                    bool   flag3 = itemStore.IsGroupMailbox();
                    string text  = null;
                    flag2 = (mailboxConfig.RemoveForwardedMeetingNotifications || !meetingMessage.IsResponseRequested || flag3);
                    if (!flag2)
                    {
                        Participant participant = null;
                        flag2 = OldMessageDeletion.IsSenderSame(meetingMessage.From, itemStore, out participant);
                        if (participant != null)
                        {
                            text = participant.EmailAddress;
                        }
                    }
                    string text2;
                    if (flag2)
                    {
                        text2 = string.Format("Deleting MFN message as it was forwarded by the organizer. ParticipantFromEmail: {0}, Message From: {1},  From RoutingType: {2},  Mailbox owner : {3}, Mailboxconfig.RemoveMFN setting {4}, IsResponseRequested {5}, Subject: {6}, IsGroupMailbox: {7} ", new object[]
                        {
                            text ?? "unspecified",
                            meetingMessage.From,
                            (meetingMessage.From != null) ? meetingMessage.From.RoutingType : "unspecified",
                            itemStore.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(),
                            mailboxConfig.RemoveForwardedMeetingNotifications,
                            meetingMessage.IsResponseRequested,
                            meetingMessage.Subject,
                            flag3
                        });
                    }
                    else
                    {
                        text2 = string.Format("Not deleting MFN message as it was forwarded by someone other than the organizer. ParticipantFromEmail {0}, Message From: {1}, From RoutingType: {2},  Mailbox owner : {3}, Mailboxconfig.RemoveMFN setting {4}, IsResponseRequested {5}, Subject: {6} ", new object[]
                        {
                            text ?? "unspecified",
                            meetingMessage.From,
                            (meetingMessage.From != null) ? meetingMessage.From.RoutingType : "unspecified",
                            itemStore.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(),
                            mailboxConfig.RemoveForwardedMeetingNotifications,
                            meetingMessage.IsResponseRequested,
                            meetingMessage.Subject
                        });
                    }
                    OldMessageDeletion.Tracer.TraceDebug((long)this.GetHashCode(), text2);
                    MfnLog.LogEntry(itemStore, text2);
                }
                if (!flag2 && OldMessageDeletion.IsSelfForwardedEventAndAccepted(meetingMessage, itemStore, originalCalItem))
                {
                    flag2 = true;
                    OldMessageDeletion.Tracer.TraceDebug((long)this.GetHashCode(), "{0}: Marked the meeting request for deletion as sent to self", new object[]
                    {
                        TraceContext.Get()
                    });
                }
                if (flag2)
                {
                    this.DeleteMessage(itemStore, item);
                }
            }
            if (duplicates != null)
            {
                foreach (VersionedId versionedId in duplicates)
                {
                    itemStore.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[]
                    {
                        versionedId
                    });
                    OldMessageDeletion.Tracer.TraceDebug <object, VersionedId>((long)this.GetHashCode(), "{0}: Deleted a duplicate item ID: {1}.", TraceContext.Get(), versionedId);
                }
            }
        }
コード例 #11
0
        // Token: 0x060007AE RID: 1966 RVA: 0x00036C68 File Offset: 0x00034E68
        private void DeleteOldMessages(MailboxSession itemStore, MeetingMessage item, CalendarItemBase originalCalItem, out bool fullUpdateDeleted)
        {
            fullUpdateDeleted = false;
            string text = (string)Utils.SafeGetProperty(item, ItemSchema.InternetMessageId, "<null>");

            if (item is MeetingRequest || item is MeetingCancellation)
            {
                bool flag = (bool)Utils.SafeGetProperty(item, MeetingMessageSchema.HijackedMeeting, false);
                if (flag)
                {
                    CalendarAssistantLog.LogEntry(itemStore, "Message {0} has been hijacked, skipping deletion of old messages.", new object[]
                    {
                        text
                    });
                    return;
                }
            }
            int num = (int)Utils.SafeGetProperty(item, CalendarItemBaseSchema.AppointmentSequenceNumber, -1);

            if (num < 0)
            {
                OldMessageDeletion.Tracer.TraceError <object, string>((long)this.GetHashCode(), "{0}: Message does not have a sequence number, skipping {1}", TraceContext.Get(), text);
                CalendarAssistantLog.LogEntry(itemStore, "Message does not have a sequence number, skipping {0}", new object[]
                {
                    text
                });
                return;
            }
            if (OldMessageDeletion.ShouldIgnoreFolder(itemStore, item.ParentId))
            {
                return;
            }
            string text2 = (string)Utils.SafeGetProperty(item, MessageItemSchema.ReceivedRepresentingEmailAddress, string.Empty);
            string text3 = (string)Utils.SafeGetProperty(item, CalendarItemBaseSchema.OrganizerEmailAddress, string.Empty);

            byte[] array = (byte[])Utils.SafeGetProperty(item, CalendarItemBaseSchema.GlobalObjectId, null);
            if (array == null)
            {
                OldMessageDeletion.Tracer.TraceError <object, string>((long)this.GetHashCode(), "{0}: Message {1} does not have a globalObjectId, skipping the message.", TraceContext.Get(), text);
                CalendarAssistantLog.LogEntry(itemStore, "Message {0} does not have a globalObjectId, skipping the message.", new object[]
                {
                    text
                });
                return;
            }
            OldMessageDeletion.Tracer.TraceDebug <object, string, string>((long)item.GetHashCode(), "{0}: Received representing={1} sent representing={2}", TraceContext.Get(), text2, text3);
            CalendarAssistant.TracerPfd.TracePfd((long)item.GetHashCode(), "PFD IWC {0} {1}: Received representing={2} sent representing={3}", new object[]
            {
                22679,
                TraceContext.Get(),
                text2,
                text3
            });
            if (!itemStore.IsGroupMailbox() && string.Compare(text2, text3, true) == 0)
            {
                Participant participant = null;
                if (!OldMessageDeletion.IsSenderSame(item.Sender, itemStore, out participant))
                {
                    return;
                }
                AggregateOperationResult aggregateOperationResult = itemStore.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[]
                {
                    item.Id
                });
                OldMessageDeletion.Tracer.TraceDebug <object, string, OperationResult>((long)this.GetHashCode(), "{0}: Moving the item {1} to the Deleted Items folder returned:{2}", TraceContext.Get(), text, aggregateOperationResult.OperationResult);
                return;
            }
            else
            {
                if (item.IsRepairUpdateMessage)
                {
                    RUMOldMessageDeletion.CleanUp(itemStore, item, originalCalItem, OldMessageDeletion.Tracer, out fullUpdateDeleted);
                    return;
                }
                OldMessageDeletion.LatestItemInfo latestItemInfo;
                latestItemInfo.FullUpdateDeleted      = fullUpdateDeleted;
                latestItemInfo.RollingHighlight       = (int)Utils.SafeGetProperty(item, CalendarItemBaseSchema.ChangeHighlight, 0);
                latestItemInfo.LatestOldStartTime     = ExDateTime.MinValue;
                latestItemInfo.LatestOldEndTime       = ExDateTime.MinValue;
                latestItemInfo.LatestOldLocationStr   = string.Empty;
                latestItemInfo.LatestSequenceNumber   = -1;
                latestItemInfo.LatestItemId           = item.Id;
                latestItemInfo.LatestClientSubmitTime = (ExDateTime)Utils.SafeGetProperty(item, ItemSchema.SentTime, ExDateTime.MinValue);
                this.QueryAndDeleteMatchingItems(itemStore, item, originalCalItem, array, text, text3, num, ref latestItemInfo);
                fullUpdateDeleted = latestItemInfo.FullUpdateDeleted;
                return;
            }
        }
コード例 #12
0
 private void OnPromotedMessageHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args)
 {
     if (StoreDriverConfig.Instance.IsAutoAcceptForGroupAndSelfForwardedEventEnabled)
     {
         StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = (StoreDriverDeliveryEventArgsImpl)args;
         if ((ObjectClass.IsMeetingRequest(storeDriverDeliveryEventArgsImpl.MessageClass) || ObjectClass.IsMeetingResponse(storeDriverDeliveryEventArgsImpl.MessageClass)) && !this.IsEHAMigrationMeetingMessage(storeDriverDeliveryEventArgsImpl.MailItem))
         {
             MailboxSession mailboxSession = storeDriverDeliveryEventArgsImpl.MailboxSession;
             if (mailboxSession == null || storeDriverDeliveryEventArgsImpl.ReplayItem == null)
             {
                 MeetingMessageProcessingAgent.tracer.TraceError((long)this.GetHashCode(), "MeetingMessageProcessingAgent::OnPromotedMessageHandler() MailboxSession or StoreDriverDeliveryEventArgsImpl.ReplayItem is null");
                 return;
             }
             if (ObjectClass.IsMeetingRequest(storeDriverDeliveryEventArgsImpl.MessageClass) && !mailboxSession.IsGroupMailbox())
             {
                 MeetingRequest meetingRequest = null;
                 try
                 {
                     meetingRequest = (Item.ConvertFrom(storeDriverDeliveryEventArgsImpl.ReplayItem, mailboxSession) as MeetingRequest);
                     if (meetingRequest != null && MeetingMessageProcessing.IsSentToSelf(meetingRequest, mailboxSession))
                     {
                         MeetingMessageProcessingAgent.tracer.TraceDebug <string, IExchangePrincipal>((long)this.GetHashCode(), "Attempting to deliver self forwarded message {0} to mailbox {1} to Deleted Items", meetingRequest.InternetMessageId, mailboxSession.MailboxOwner);
                         this.DeliverToDeletedItems(mailboxSession, meetingRequest, storeDriverDeliveryEventArgsImpl);
                     }
                 }
                 finally
                 {
                     if (meetingRequest != null)
                     {
                         Item.SafeDisposeConvertedItem(storeDriverDeliveryEventArgsImpl.ReplayItem, meetingRequest);
                     }
                 }
             }
             if (ObjectClass.IsMeetingResponse(storeDriverDeliveryEventArgsImpl.MessageClass) && mailboxSession.IsGroupMailbox())
             {
                 MeetingResponse meetingResponse = Item.ConvertFrom(storeDriverDeliveryEventArgsImpl.ReplayItem, mailboxSession) as MeetingResponse;
                 if (meetingResponse != null && meetingResponse.IsSilent)
                 {
                     ADRecipient adrecipient = null;
                     if (meetingResponse.From.TryGetADRecipient(mailboxSession.GetADRecipientSession(true, ConsistencyMode.IgnoreInvalid), out adrecipient) && adrecipient != null && adrecipient.RecipientDisplayType != RecipientDisplayType.ConferenceRoomMailbox && adrecipient.RecipientDisplayType != RecipientDisplayType.SyncedConferenceRoomMailbox && adrecipient.RecipientDisplayType != RecipientDisplayType.EquipmentMailbox && adrecipient.RecipientDisplayType != RecipientDisplayType.SyncedEquipmentMailbox && !meetingResponse.IsCounterProposal)
                     {
                         MeetingMessageProcessingAgent.tracer.TraceDebug <string, IExchangePrincipal>((long)this.GetHashCode(), "Attempting to deliver empty response {0} to mailbox {1} to Deleted Items", meetingResponse.InternetMessageId, mailboxSession.MailboxOwner);
                         this.DeliverToDeletedItems(mailboxSession, meetingResponse, storeDriverDeliveryEventArgsImpl);
                     }
                 }
             }
         }
     }
 }
コード例 #13
0
 private static bool ShouldBlockMessageForGroup(MailboxSession session, string messageClass)
 {
     return(session != null && session.IsGroupMailbox() && GroupEscalationAgent.IsOofOrDsnMessage(messageClass));
 }
コード例 #14
0
 private static bool ShouldGenerateIrmNdr(MailboxSession session, MessageItem messageItem, MiniRecipient mailboxOwner)
 {
     return(session != null && session.IsGroupMailbox() && messageItem.IsRestricted && !GroupEscalationAgent.IsIrmEnabledGroup(mailboxOwner));
 }