Ejemplo n.º 1
0
 private bool EventMeetsCriteriaForSummaryReport(RecipientTrackingEvent recipEvent)
 {
     if (!this.Identity.IsSender && !this.trackedUser.IsAddressOneOfProxies((string)recipEvent.RecipientAddress))
     {
         return(false);
     }
     if (this.Identity.IsSender && this.Recipients != null && this.Recipients.Length > 0)
     {
         bool   flag = false;
         string text = recipEvent.RecipientAddress.ToString();
         foreach (string value in this.Recipients)
         {
             if (text.IndexOf(value, StringComparison.OrdinalIgnoreCase) != -1)
             {
                 flag = true;
                 break;
             }
         }
         if (!flag && !this.IsAddressOneOfRecipientFilterProxies(text))
         {
             return(false);
         }
     }
     return(this.status == null || !(recipEvent.Status != this.status));
 }
Ejemplo n.º 2
0
        private bool EventMeetsCriteriaForPathReport(RecipientTrackingEvent recipEvent)
        {
            bool result = this.BypassDelegateChecking;

            if (this.Identity.IsSender)
            {
                if (recipEvent.EventDescriptionEnum == EventDescription.MovedToFolderByInboxRule || recipEvent.EventDescriptionEnum == EventDescription.ForwardedToDelegateAndDeleted)
                {
                    return(result);
                }
            }
            else if (recipEvent.BccRecipient)
            {
                if (recipEvent.EventDescriptionEnum == EventDescription.Expanded)
                {
                    return(result);
                }
                if (!recipEvent.RecipientAddress.Equals(this.trackedUser.SmtpAddress))
                {
                    if (recipEvent.EventDescriptionEnum == EventDescription.PendingModeration || recipEvent.EventDescriptionEnum == EventDescription.ApprovedModeration || recipEvent.EventDescriptionEnum == EventDescription.FailedModeration)
                    {
                        return(result);
                    }
                    recipEvent.RecipientAddress     = this.trackedUser.SmtpAddress;
                    recipEvent.RecipientDisplayName = this.trackedUser.DisplayName;
                }
            }
            return(true);
        }
Ejemplo n.º 3
0
        private static RecipientTrackingEvent[] GetRecipientEventsForSummaryReport(IConfigurationSession configurationSession, IRecipientSession recipientSession, MultiValuedProperty <CultureInfo> userLanguages, bool returnHelpDeskMessages, bool trackingAsSender, RecipientTrackingEvent[] internalRecipientTrackingEvents)
        {
            Dictionary <string, RecipientTrackingEvent> dictionary = new Dictionary <string, RecipientTrackingEvent>(StringComparer.OrdinalIgnoreCase);

            for (int i = 0; i < internalRecipientTrackingEvents.Length; i++)
            {
                if (!MessageTrackingReport.ShouldHideEvent(true, internalRecipientTrackingEvents[i], returnHelpDeskMessages, trackingAsSender))
                {
                    RecipientTrackingEvent recipientTrackingEvent = RecipientTrackingEvent.Create(true, configurationSession, userLanguages, returnHelpDeskMessages, internalRecipientTrackingEvents[i]);
                    if (recipientTrackingEvent == null)
                    {
                        ExTraceGlobals.TaskTracer.TraceDebug <string, SmtpAddress>(0L, "Event: {0} not translateable for end-user for recipient: {1}, substituting with generic pending event", Names <EventDescription> .Map[(int)internalRecipientTrackingEvents[i].EventDescription], internalRecipientTrackingEvents[i].RecipientAddress);
                        RecipientTrackingEvent internalRecipientTrackingEvent = new RecipientTrackingEvent(null, internalRecipientTrackingEvents[i].RecipientAddress, internalRecipientTrackingEvents[i].RecipientDisplayName, DeliveryStatus.Pending, EventType.Pending, EventDescription.Pending, null, internalRecipientTrackingEvents[i].Server, internalRecipientTrackingEvents[i].Date, internalRecipientTrackingEvents[i].InternalMessageId, null, internalRecipientTrackingEvents[i].HiddenRecipient, new bool?(internalRecipientTrackingEvents[i].BccRecipient), internalRecipientTrackingEvents[i].RootAddress, null, null);
                        recipientTrackingEvent = RecipientTrackingEvent.Create(true, configurationSession, userLanguages, returnHelpDeskMessages, internalRecipientTrackingEvent);
                        if (recipientTrackingEvent == null)
                        {
                            throw new InvalidOperationException("Generic pending event should always be creatable");
                        }
                    }
                    RecipientTrackingEvent recipientTrackingEvent2;
                    if (!dictionary.TryGetValue(recipientTrackingEvent.RecipientAddress.ToString(), out recipientTrackingEvent2) || recipientTrackingEvent2.Status != _DeliveryStatus.Delivered)
                    {
                        dictionary[recipientTrackingEvent.RecipientAddress.ToString()] = recipientTrackingEvent;
                    }
                }
            }
            if (dictionary.Count == 0)
            {
                return(null);
            }
            return(dictionary.Values.ToArray <RecipientTrackingEvent>());
        }
 private static RecipientTrackingEvent GetIntermediateTransferredEvent(RecipientTrackingEvent originalInternalEvent)
 {
     if (originalInternalEvent.EventDescription != Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.TransferredToPartnerOrg && originalInternalEvent.EventDescription != Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.SmtpSendCrossForest)
     {
         throw new ArgumentException("GetIntermediateTransferredEvent can only be called for TransferredToPartnerOrg or SmtpSendCrossForest");
     }
     return(new RecipientTrackingEvent(CoreStrings.EventTransferredIntermediate.ToString(Thread.CurrentThread.CurrentCulture), originalInternalEvent.EventDescription, originalInternalEvent.InternalMessageId, originalInternalEvent.BccRecipient, originalInternalEvent.Date, _DeliveryStatus.Transferred, null, EventType.Transferred, originalInternalEvent.RecipientAddress, originalInternalEvent.RecipientDisplayName, originalInternalEvent.Server));
 }
Ejemplo n.º 5
0
 private static bool ShouldHideEvent(bool isLastKnownStatus, RecipientTrackingEvent trackingEvent, bool returnHelpDeskMessages, bool trackingAsSender)
 {
     if (isLastKnownStatus && (trackingEvent.EventDescription == EventDescription.TransferredToPartnerOrg || trackingEvent.EventDescription == EventDescription.SmtpSendCrossForest))
     {
         return(false);
     }
     if (trackingEvent.HiddenRecipient && trackingAsSender && !returnHelpDeskMessages)
     {
         ExTraceGlobals.TaskTracer.TraceDebug <SmtpAddress>(0L, "Should hide recipient {0}, as it is a hidden recipient and may not be shown to InfoWorker role", trackingEvent.RecipientAddress);
         return(true);
     }
     return(false);
 }
 private RecipientTrackingEvent(RecipientTrackingEvent internalRecipientTrackingEvent, string eventDescription)
 {
     this.eventDescriptionEnum = internalRecipientTrackingEvent.EventDescription;
     this.internalMessageId    = internalRecipientTrackingEvent.InternalMessageId;
     this.bccRecipient         = internalRecipientTrackingEvent.BccRecipient;
     this[RecipientTrackingEventSchema.EventDescription]     = eventDescription;
     this[RecipientTrackingEventSchema.Date]                 = internalRecipientTrackingEvent.Date;
     this[RecipientTrackingEventSchema.DeliveryStatus]       = (_DeliveryStatus)internalRecipientTrackingEvent.Status;
     this[RecipientTrackingEventSchema.EventData]            = internalRecipientTrackingEvent.EventData;
     this[RecipientTrackingEventSchema.EventTypeValue]       = internalRecipientTrackingEvent.EventType;
     this[RecipientTrackingEventSchema.RecipientAddress]     = internalRecipientTrackingEvent.RecipientAddress;
     this[RecipientTrackingEventSchema.RecipientDisplayName] = internalRecipientTrackingEvent.RecipientDisplayName;
     this[RecipientTrackingEventSchema.Server]               = internalRecipientTrackingEvent.Server;
 }
 private static RecipientTrackingEvent.FormatterMethod[] CreateIWFormatTable()
 {
     RecipientTrackingEvent.FormatterMethod[] array = new RecipientTrackingEvent.FormatterMethod[RecipientTrackingEvent.EventDescriptionsLength];
     array[0] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventSubmitted);
     array[1] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventSubmittedCrossSite);
     array[2] = null;
     array[3] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("Expanded must have group name and group email address arguments");
         }
         return(CoreStrings.EventExpanded(args[1]));
     };
     array[4] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventDelivered);
     array[5] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 1)
         {
             throw new FormatException("MovedToFolderByInboxRule must have folder name argument");
         }
         return(CoreStrings.EventMovedToFolderByInboxRuleIW(args[0]));
     };
     array[6]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventRulesCc);
     array[7]  = RecipientTrackingEvent.FailedGeneralDelegate();
     array[8]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventFailedModerationIW);
     array[9]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventFailedTransportRulesIW);
     array[10] = null;
     array[11] = null;
     array[12] = null;
     array[13] = null;
     array[14] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventForwarded);
     array[15] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventPending);
     array[16] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventPendingModerationIW);
     array[17] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventApprovedModerationIW);
     array[18] = null;
     array[20] = null;
     array[21] = RecipientTrackingEvent.ForeignOrgDelegate();
     array[22] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventTransferredToLegacyExchangeServer);
     array[24] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventDelayedAfterTransferToPartnerOrgIW);
     array[25] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventRead);
     array[26] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventNotRead);
     array[27] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventForwardedToDelegateAndDeleted);
     array[28] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventModerationExpired);
     return(array);
 }
Ejemplo n.º 8
0
        private static RecipientTrackingEvent[] GetRecipientEventsForRecipientPathReport(IConfigurationSession configurationSession, IRecipientSession recipientSession, MultiValuedProperty <CultureInfo> userLanguages, bool returnHelpDeskMessages, bool trackingAsSender, RecipientTrackingEvent[] internalRecipientTrackingEvents, bool isCompleteReport)
        {
            List <RecipientTrackingEvent> list = new List <RecipientTrackingEvent>(internalRecipientTrackingEvents.Length);
            RecipientTrackingEvent        recipientTrackingEvent = null;

            if (isCompleteReport)
            {
                recipientTrackingEvent = RecipientTrackingEvent.GetExplanatoryMessage(internalRecipientTrackingEvents);
            }
            bool flag = false;

            for (int i = 0; i < internalRecipientTrackingEvents.Length; i++)
            {
                bool flag2 = i == internalRecipientTrackingEvents.Length - 1;
                if (!MessageTrackingReport.ShouldHideEvent(flag2, internalRecipientTrackingEvents[i], returnHelpDeskMessages, trackingAsSender) && (!flag || internalRecipientTrackingEvents[i].EventDescription != EventDescription.FailedGeneral) && (internalRecipientTrackingEvents[i].EventDescription != EventDescription.TransferredToForeignOrg || flag2) && (internalRecipientTrackingEvents[i].EventDescription != EventDescription.FailedTransportRules || returnHelpDeskMessages || (!flag && (i + 1 >= internalRecipientTrackingEvents.Length || (internalRecipientTrackingEvents[i + 1].EventDescription != EventDescription.FailedTransportRules && internalRecipientTrackingEvents[i + 1].EventDescription != EventDescription.FailedGeneral)))))
                {
                    RecipientTrackingEvent recipientTrackingEvent2 = RecipientTrackingEvent.Create(flag2, configurationSession, userLanguages, returnHelpDeskMessages, internalRecipientTrackingEvents[i]);
                    if (recipientTrackingEvent2 != null)
                    {
                        if (internalRecipientTrackingEvents[i].EventDescription == EventDescription.FailedTransportRules || internalRecipientTrackingEvents[i].EventDescription == EventDescription.FailedGeneral)
                        {
                            flag = true;
                        }
                        list.Add(recipientTrackingEvent2);
                    }
                    else
                    {
                        ExTraceGlobals.TaskTracer.TraceDebug <string, SmtpAddress>(0L, "Event: {0} for recipient {1} not translateable for end-user. It will be dropped", Names <EventDescription> .Map[(int)internalRecipientTrackingEvents[i].EventDescription], internalRecipientTrackingEvents[i].RecipientAddress);
                    }
                }
            }
            if (list.Count == 0)
            {
                return(null);
            }
            if (recipientTrackingEvent != null)
            {
                list.Add(recipientTrackingEvent);
            }
            return(list.ToArray());
        }
 private static RecipientTrackingEvent.FormatterMethod FailedGeneralDelegate()
 {
     return(delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args != null && args.Length > 0)
         {
             string text;
             if (!LastError.TryParseSmtpResponseString(args[0], out text))
             {
                 text = args[0];
             }
             SmtpResponse key;
             if (SmtpResponse.TryParse(text, out key))
             {
                 if (key.SmtpResponseType == SmtpResponseType.PermanentError && args.Length >= 2 && string.Equals(args[1], "Content Filter Agent"))
                 {
                     return CoreStrings.RejectedExplanationContentFiltering;
                 }
                 LocalizedString result;
                 if (AckReason.EnhancedTextGetter.TryGetValue(key, out result))
                 {
                     return result;
                 }
                 if (!string.IsNullOrEmpty(key.EnhancedStatusCode))
                 {
                     if (DsnShortMessages.TryGetResourceRecipientExplanation(key.EnhancedStatusCode, out result))
                     {
                         return result;
                     }
                     LocalizedString?customDsnCode = RecipientTrackingEvent.GetCustomDsnCode(key.EnhancedStatusCode, source.ConfigSession, source.UserLanguages);
                     if (customDsnCode != null)
                     {
                         return customDsnCode.Value;
                     }
                 }
             }
         }
         return CoreStrings.EventFailedGeneral;
     });
 }
        internal static RecipientTrackingEvent GetExplanatoryMessage(IList <RecipientTrackingEvent> events)
        {
            if (events.Count == 0)
            {
                return(null);
            }
            DateTime utcNow = DateTime.UtcNow;
            RecipientTrackingEvent recipientTrackingEvent  = events[0];
            RecipientTrackingEvent recipientTrackingEvent2 = events[events.Count - 1];

            if (recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.SmtpSendCrossSite || recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.SmtpSend)
            {
                if (utcNow > recipientTrackingEvent2.Date && utcNow - recipientTrackingEvent2.Date > RecipientTrackingEvent.SmtpHandshakeMaximumSkew)
                {
                    return(new RecipientTrackingEvent(CoreStrings.TrackingExplanationLogsDeleted.ToString(Thread.CurrentThread.CurrentCulture), Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.Pending, recipientTrackingEvent2.InternalMessageId, recipientTrackingEvent2.BccRecipient, utcNow, _DeliveryStatus.Pending, null, EventType.Pending, recipientTrackingEvent2.RecipientAddress, recipientTrackingEvent2.RecipientDisplayName, recipientTrackingEvent2.Server));
                }
            }
            else if (recipientTrackingEvent2.Status == DeliveryStatus.Pending)
            {
                if (recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.PendingModeration || recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.SmtpSendCrossForest || recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.TransferredToPartnerOrg)
                {
                    return(null);
                }
                TimeSpan t = utcNow.Subtract(recipientTrackingEvent.Date);
                if (t < RecipientTrackingEvent.MaximumDelayForNormalMessage)
                {
                    if (recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.QueueRetry || recipientTrackingEvent2.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.QueueRetryNoRetryTime)
                    {
                        return(null);
                    }
                    return(new RecipientTrackingEvent(CoreStrings.TrackingExplanationNormalTimeSpan.ToString(Thread.CurrentThread.CurrentCulture), Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.Pending, recipientTrackingEvent2.InternalMessageId, recipientTrackingEvent2.BccRecipient, utcNow, _DeliveryStatus.Pending, null, EventType.Pending, recipientTrackingEvent2.RecipientAddress, recipientTrackingEvent2.RecipientDisplayName, recipientTrackingEvent2.Server));
                }
                else if (t >= RecipientTrackingEvent.ExcessiveDelayTimeSpan)
                {
                    return(new RecipientTrackingEvent(CoreStrings.TrackingExplanationExcessiveTimeSpan.ToString(Thread.CurrentThread.CurrentCulture), Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.Pending, recipientTrackingEvent2.InternalMessageId, recipientTrackingEvent2.BccRecipient, utcNow, _DeliveryStatus.Pending, null, EventType.Pending, recipientTrackingEvent2.RecipientAddress, recipientTrackingEvent2.RecipientDisplayName, recipientTrackingEvent2.Server));
                }
            }
            return(null);
        }
Ejemplo n.º 11
0
        internal static MessageTrackingReport Create(IConfigurationSession configurationSession, IRecipientSession recipientSession, MultiValuedProperty <CultureInfo> userLanguages, bool summaryEvents, bool returnHelpDeskMessages, bool trackingAsSender, MessageTrackingReport internalMessageTrackingReport, bool doNotResolve, bool isCompleteReport)
        {
            RecipientTrackingEvent[] recipientTrackingEvents = internalMessageTrackingReport.RecipientTrackingEvents;
            if (!doNotResolve && recipientTrackingEvents.Length > 256)
            {
                ExTraceGlobals.TaskTracer.TraceDebug <int, int>(0L, "Recipient events ({0}) are more than MaxDisplaynameLookupsAllowed ({1}), turning off display-names", recipientTrackingEvents.Length, 256);
                doNotResolve = true;
            }
            RecipientTrackingEvent[] array;
            if (summaryEvents)
            {
                array = MessageTrackingReport.GetRecipientEventsForSummaryReport(configurationSession, recipientSession, userLanguages, returnHelpDeskMessages, trackingAsSender, recipientTrackingEvents);
            }
            else
            {
                array = MessageTrackingReport.GetRecipientEventsForRecipientPathReport(configurationSession, recipientSession, userLanguages, returnHelpDeskMessages, trackingAsSender, recipientTrackingEvents, isCompleteReport);
            }
            if (array == null)
            {
                return(null);
            }
            int capacity = summaryEvents ? array.Length : 1;
            BulkRecipientLookupCache bulkRecipientLookupCache = new BulkRecipientLookupCache(capacity);

            if (!doNotResolve)
            {
                RecipientTrackingEvent.FillDisplayNames(bulkRecipientLookupCache, array, recipientSession);
            }
            MessageTrackingReport messageTrackingReport = new MessageTrackingReport(internalMessageTrackingReport, array);

            if (summaryEvents)
            {
                messageTrackingReport.FillDisplayNames(bulkRecipientLookupCache, recipientSession);
            }
            messageTrackingReport.PrepareRecipientTrackingEvents(returnHelpDeskMessages, summaryEvents);
            return(messageTrackingReport);
        }
 internal static RecipientTrackingEvent Create(bool isLastKnownStatus, IConfigurationSession session, MultiValuedProperty <CultureInfo> userLanguages, bool returnHelpDeskMessages, RecipientTrackingEvent internalRecipientTrackingEvent)
 {
     if (isLastKnownStatus && (internalRecipientTrackingEvent.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.SmtpSendCrossForest || internalRecipientTrackingEvent.EventDescription == Microsoft.Exchange.InfoWorker.Common.MessageTracking.EventDescription.TransferredToPartnerOrg))
     {
         return(RecipientTrackingEvent.GetIntermediateTransferredEvent(internalRecipientTrackingEvent));
     }
     RecipientTrackingEvent.FormatterMethod[] array           = returnHelpDeskMessages ? RecipientTrackingEvent.helpDeskFormatters : RecipientTrackingEvent.iWFormatters;
     RecipientTrackingEvent.FormatterSource   source          = new RecipientTrackingEvent.FormatterSource(session, userLanguages, internalRecipientTrackingEvent);
     RecipientTrackingEvent.FormatterMethod   formatterMethod = array[(int)internalRecipientTrackingEvent.EventDescription];
     if (formatterMethod != null)
     {
         LocalizedString localizedString;
         try
         {
             localizedString = formatterMethod(source, internalRecipientTrackingEvent.EventData);
         }
         catch (FormatException ex)
         {
             ExTraceGlobals.SearchLibraryTracer.TraceError(0L, ex.Message);
             return(null);
         }
         string eventDescription = localizedString.ToString(Thread.CurrentThread.CurrentCulture);
         RecipientTrackingEvent recipientTrackingEvent = new RecipientTrackingEvent(internalRecipientTrackingEvent, eventDescription);
         EventType eventType;
         if (RecipientTrackingEvent.descriptionToTypeMap.TryGetValue(internalRecipientTrackingEvent.EventDescription, out eventType))
         {
             recipientTrackingEvent.EventType = eventType;
         }
         else
         {
             recipientTrackingEvent.EventType = EventType.Pending;
         }
         return(recipientTrackingEvent);
     }
     return(null);
 }
 internal FormatterSource(IConfigurationSession configSession, MultiValuedProperty <CultureInfo> userLanguages, RecipientTrackingEvent recipientTrackingEvent)
 {
     this.ConfigSession          = configSession;
     this.UserLanguages          = userLanguages;
     this.RecipientTrackingEvent = recipientTrackingEvent;
 }
 private static RecipientTrackingEvent.FormatterMethod[] CreateHelpDeskFormatTable()
 {
     RecipientTrackingEvent.FormatterMethod[] array = new RecipientTrackingEvent.FormatterMethod[RecipientTrackingEvent.EventDescriptionsLength];
     array[0] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args == null || args.Length < 1)
         {
             return(CoreStrings.EventSubmitted);
         }
         return(CoreStrings.EventSubmittedHelpDesk(args[0]));
     };
     array[1] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args == null || args.Length < 1)
         {
             return(CoreStrings.EventSubmittedCrossSite);
         }
         return(CoreStrings.EventSubmittedCrossSiteHelpDesk(args[0]));
     };
     array[2] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args == null || args.Length < 2)
         {
             return(CoreStrings.EventResolvedHelpDesk);
         }
         return(CoreStrings.EventResolvedWithDetailsHelpDesk(args[0], args[1]));
     };
     array[3] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("Expanded must have group name and group email address arguments");
         }
         return(CoreStrings.EventExpanded(args[1]));
     };
     array[4] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventDelivered);
     array[5] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 1)
         {
             throw new FormatException("MovedToFolderByInboxRule must have folder name argument");
         }
         return(CoreStrings.EventMovedToFolderByInboxRuleHelpDesk(args[0]));
     };
     array[6]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventRulesCc);
     array[7]  = RecipientTrackingEvent.FailedGeneralDelegate();
     array[8]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventFailedModerationHelpDesk);
     array[9]  = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventFailedTransportRulesHelpDesk);
     array[10] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("SmtpSend must have sending and receiving server names");
         }
         return(CoreStrings.EventSmtpSendHelpDesk(args[0], args[1]));
     };
     array[11] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("SmtpSendCrossSite must have sending and receiving server names");
         }
         return(CoreStrings.EventSmtpSendHelpDesk(args[0], args[1]));
     };
     array[12] = ((RecipientTrackingEvent.FormatterSource source, string[] args) => CoreStrings.EventSmtpSendHelpDesk(args[0], args[1]));
     array[13] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("SmtpReceive must have sending and receiving server names");
         }
         return(CoreStrings.EventSmtpReceiveHelpDesk(args[0], args[1]));
     };
     array[14] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventForwarded);
     array[15] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventPending);
     array[16] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventPendingModerationHelpDesk);
     array[17] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventApprovedModerationHelpDesk);
     array[18] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 5)
         {
             throw new FormatException("QueueRetry must have server, inRetrySinceTime, lastAttemptTime, serverTimeZone, errorMessage arguments");
         }
         if (!string.IsNullOrEmpty(args[4]))
         {
             return(CoreStrings.EventQueueRetryHelpDesk(args[0], args[1], args[2], args[3], args[4]));
         }
         return(CoreStrings.EventQueueRetryNoErrorHelpDesk(args[0], args[1], args[2], args[3]));
     };
     array[19] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("QueueRetryNoRetryTime must have queue name and error message");
         }
         return(CoreStrings.EventQueueRetryNoRetryTimeHelpDesk(args[0], args[1]));
     };
     array[20] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventMessageDefer);
     array[21] = RecipientTrackingEvent.ForeignOrgDelegate();
     array[22] = delegate(RecipientTrackingEvent.FormatterSource source, string[] args)
     {
         if (args.Length < 2)
         {
             throw new FormatException("TransferredToLegacyExchangeServer must have both local exchange server name and remote legacy exchange server name");
         }
         return(CoreStrings.EventTransferredToLegacyExchangeServerHelpDesk(args[0], args[1]));
     };
     array[25] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventRead);
     array[26] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventNotRead);
     array[27] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventForwardedToDelegateAndDeleted);
     array[28] = RecipientTrackingEvent.SimpleDelegate(CoreStrings.EventModerationExpired);
     return(array);
 }
Ejemplo n.º 15
0
        private MessageTrackingReport FilterReport(MessageTrackingReport report)
        {
            if (report == null)
            {
                return(report);
            }
            if (!this.Identity.IsSender)
            {
                report.RecipientAddresses = new SmtpAddress[]
                {
                    this.trackedUser.SmtpAddress
                };
                report.RecipientDisplayNames = new string[]
                {
                    this.trackedUser.DisplayName
                };
            }
            if (report.RecipientTrackingEvents.Length == 0)
            {
                return(report);
            }
            bool flag = false;
            List <RecipientTrackingEvent> list = null;

            RecipientTrackingEvent[] recipientTrackingEvents = report.RecipientTrackingEvents;
            int i = 0;

            while (i < recipientTrackingEvents.Length)
            {
                RecipientTrackingEvent recipientTrackingEvent = recipientTrackingEvents[i];
                if (this.ReportTemplate == ReportTemplate.Summary)
                {
                    if (this.EventMeetsCriteriaForSummaryReport(recipientTrackingEvent))
                    {
                        report.IncrementEventTypeCount(recipientTrackingEvent.Status);
                        goto IL_A7;
                    }
                }
                else if (this.EventMeetsCriteriaForPathReport(recipientTrackingEvent))
                {
                    goto IL_A7;
                }
IL_109:
                i++;
                continue;
IL_A7:
                if (flag)
                {
                    goto IL_109;
                }
                if (list != null && (long)list.Count >= (long)((ulong)this.ResultSize.Value))
                {
                    flag = true;
                    if (this.ReportTemplate != ReportTemplate.Summary)
                    {
                        break;
                    }
                    goto IL_109;
                }
                else
                {
                    if (list == null)
                    {
                        list = new List <RecipientTrackingEvent>();
                    }
                    if (this.ResultSize.Value > 0U)
                    {
                        list.Add(recipientTrackingEvent);
                    }
                    if (this.Identity.IsSender || this.ReportTemplate != ReportTemplate.Summary)
                    {
                        goto IL_109;
                    }
                    break;
                }
            }
            if (flag && this.ReportTemplate != ReportTemplate.Summary)
            {
                this.WriteWarning(CoreStrings.TrackingWarningTooManyEvents);
            }
            if (list == null)
            {
                return(null);
            }
            if (0 < list.Count && !this.BypassDelegateChecking)
            {
                EventDescription eventDescription = EventDescription.Submitted;
                bool             flag2            = false;
                if (!this.Identity.IsSender)
                {
                    eventDescription = ((this.ReportTemplate == ReportTemplate.Summary) ? list[0].EventDescriptionEnum : list[list.Count - 1].EventDescriptionEnum);
                    flag2            = true;
                }
                else if (ReportTemplate.RecipientPath == this.ReportTemplate)
                {
                    eventDescription = list[list.Count - 1].EventDescriptionEnum;
                    flag2            = true;
                }
                EventDescriptionInformation eventDescriptionInformation;
                if (!EnumAttributeInfo <EventDescription, EventDescriptionInformation> .TryGetValue((int)eventDescription, out eventDescriptionInformation))
                {
                    throw new InvalidOperationException(string.Format("Value {0} was not annotated", eventDescription));
                }
                if (flag2 && eventDescriptionInformation.IsTerminal)
                {
                    this.getMessageTrackingReport.Errors.ResetAllErrors();
                }
            }
            report.RecipientTrackingEvents = list.ToArray();
            return(report);
        }