Esempio n. 1
0
        protected override int GetNodePriorities(Node node, out int secondaryPriority)
        {
            MessageTrackingLogEntry logEntry = (MessageTrackingLogEntry)node.Value;

            secondaryPriority = EventTree.GetSecondaryPriority(node, true);
            return(EventTree.GetEventPriorityForBestResultLeaf(logEntry, this.deprioritizeHa));
        }
Esempio n. 2
0
        public List <List <MessageTrackingLogEntry> > GetHandedOffRecipPaths()
        {
            EventTree          tree      = this.context.Tree;
            ICollection <Node> leafNodes = tree.GetLeafNodes();

            if (leafNodes == null || leafNodes.Count == 0)
            {
                return(null);
            }
            List <List <MessageTrackingLogEntry> > list = null;

            foreach (Node node in leafNodes)
            {
                MessageTrackingLogEntry messageTrackingLogEntry = (MessageTrackingLogEntry)node.Value;
                if ((messageTrackingLogEntry.EventId == MessageTrackingEvent.SEND && messageTrackingLogEntry.Source == MessageTrackingSource.SMTP) || (messageTrackingLogEntry.EventId == MessageTrackingEvent.EXPAND && messageTrackingLogEntry.FederatedDeliveryAddress != null) || messageTrackingLogEntry.EventId == MessageTrackingEvent.INITMESSAGECREATED)
                {
                    ICollection <Node>             pathToLeaf = tree.GetPathToLeaf(node.Key);
                    List <MessageTrackingLogEntry> list2      = new List <MessageTrackingLogEntry>(pathToLeaf.Count);
                    foreach (Node node2 in pathToLeaf)
                    {
                        MessageTrackingLogEntry messageTrackingLogEntry2 = (MessageTrackingLogEntry)node2.Value;
                        messageTrackingLogEntry2.RecipientAddress = node2.Key;
                        list2.Add(messageTrackingLogEntry2);
                    }
                    if (list == null)
                    {
                        list = new List <List <MessageTrackingLogEntry> >();
                    }
                    list.Add(list2);
                }
            }
            return(list);
        }
Esempio n. 3
0
        private static int GetSecondaryPriority(Node node, bool forPathPicking)
        {
            MessageTrackingLogEntry messageTrackingLogEntry = (MessageTrackingLogEntry)node.Value;
            bool recipientMatchesRoot = !forPathPicking || string.Equals(node.Key, messageTrackingLogEntry.RootAddress, StringComparison.OrdinalIgnoreCase);

            return(EventTree.GetSecondaryPriority(messageTrackingLogEntry.BccRecipient == null || messageTrackingLogEntry.BccRecipient.Value, messageTrackingLogEntry.HiddenRecipient, recipientMatchesRoot));
        }
Esempio n. 4
0
        protected override int GetNodePriorities(Node node, out int secondaryPriority)
        {
            RecipientTrackingEvent      recipientTrackingEvent = (RecipientTrackingEvent)node.Value;
            EventDescriptionInformation eventDescriptionInformation;

            if (!EnumAttributeInfo <EventDescription, EventDescriptionInformation> .TryGetValue((int)recipientTrackingEvent.EventDescription, out eventDescriptionInformation))
            {
                throw new InvalidOperationException(string.Format("Value {0} was not annotated", Names <EventDescription> .Map[(int)recipientTrackingEvent.EventDescription]));
            }
            secondaryPriority = EventTree.GetSecondaryPriority(recipientTrackingEvent.BccRecipient, recipientTrackingEvent.HiddenRecipient, string.Equals(recipientTrackingEvent.RootAddress, (string)recipientTrackingEvent.RecipientAddress, StringComparison.OrdinalIgnoreCase));
            return(eventDescriptionInformation.EventPriority);
        }
Esempio n. 5
0
 private static bool IsEntryProcessed(MessageTrackingLogEntry entry, EventTree tree)
 {
     return(entry.ProcessedBy == tree);
 }
Esempio n. 6
0
        private Node FindParentMatchingParameters(MessageTrackingLogEntry childEntryValue, long?mailItemId, MessageTrackingEvent[] eventTypes, EventTree.EventMatchingCondition eventMatchingCondition, MessageTrackingSource?source, LinkedList <Node> possibleParents)
        {
            Node node = null;

            foreach (Node node2 in possibleParents)
            {
                MessageTrackingLogEntry messageTrackingLogEntry = (MessageTrackingLogEntry)node2.Value;
                if (messageTrackingLogEntry != childEntryValue && !messageTrackingLogEntry.SharesRowDataWithEntry(childEntryValue) && string.IsNullOrEmpty(messageTrackingLogEntry.FederatedDeliveryAddress))
                {
                    if (mailItemId != null)
                    {
                        long num;
                        if (messageTrackingLogEntry.EventId == MessageTrackingEvent.TRANSFER || messageTrackingLogEntry.EventId == MessageTrackingEvent.RESUBMIT)
                        {
                            num = messageTrackingLogEntry.InternalMessageId;
                        }
                        else
                        {
                            num = messageTrackingLogEntry.ServerLogKeyMailItemId;
                        }
                        if (mailItemId != num)
                        {
                            continue;
                        }
                    }
                    if (eventTypes != null)
                    {
                        bool flag  = eventMatchingCondition == EventTree.EventMatchingCondition.MustMatch;
                        bool flag2 = !flag;
                        foreach (MessageTrackingEvent messageTrackingEvent in eventTypes)
                        {
                            if (messageTrackingEvent == messageTrackingLogEntry.EventId)
                            {
                                flag2 = flag;
                                break;
                            }
                        }
                        if (!flag2)
                        {
                            continue;
                        }
                    }
                    if ((source == null || source.Value == messageTrackingLogEntry.Source) && (node == null || EventTree.GetSecondaryPriority(node, false) >= EventTree.GetSecondaryPriority(node2, false)))
                    {
                        node = node2;
                    }
                }
            }
            return(node);
        }
Esempio n. 7
0
 public MailItemTracker(List <MessageTrackingLogEntry> entries, EventTree tree)
 {
     this.tree = tree;
     this.entriesForMailItem = entries;
 }