// Token: 0x06000024 RID: 36 RVA: 0x000030E0 File Offset: 0x000012E0 public void HandleEvent(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item) { MailboxTransportSubmissionAssistant.IdentifyProbeMessage(mapiEvent); Thread currentThread = Thread.CurrentThread; try { Interlocked.Increment(ref this.concurrentEvents); this.SubmissionsInProgress[currentThread] = new SubmissionsInProgress.Entry(ExDateTime.UtcNow, this.databaseInfo.Guid, mapiEvent); using (new SenderGuidTraceFilter(this.databaseInfo.Guid, mapiEvent.MailboxGuid)) { bool flag = true; MailboxTransportSubmissionAssistant.LatencyRecord latencyRecord; LatencyTracker latencyTracker; if (MailboxTransportSubmissionAssistant.eventCounterToLatencyMap.TryGetValue(mapiEvent.EventCounter, out latencyRecord)) { MailboxTransportSubmissionAssistant.eventCounterToLatencyMap.Remove(mapiEvent.EventCounter); latencyTracker = latencyRecord.LatencyTracker; LatencyTracker.EndTrackLatency(latencyRecord.LatencyComponent, latencyTracker, true); flag = false; } else { latencyTracker = LatencyTracker.CreateInstance(LatencyComponent.MailboxTransportSubmissionService); LatencyTracker.TrackPreProcessLatency(LatencyComponent.SubmissionAssistant, latencyTracker, mapiEvent.CreateTime); } LatencyTracker.BeginTrackLatency(LatencyComponent.MailboxTransportSubmissionService, latencyTracker); string text = this.FormatMapiEventInfo(mapiEvent); this.LogMapiEventIntoCrimsonChannelPeriodically(text); this.SubmissionsInProgress[Thread.CurrentThread].LatencyTracker = latencyTracker; if (MailboxTransportSubmissionAssistant.ShouldLogNotifyEvents && (flag || MailboxTransportSubmissionAssistant.ShouldLogTemporaryFailures)) { LatencyFormatter latencyFormatter = new LatencyFormatter(latencyTracker, Components.Configuration.LocalServer.TransportServer.Fqdn, mapiEvent.CreateTime, mapiEvent.CreateTime, true, false, false); MsgTrackMapiSubmitInfo msgTrackInfo = new MsgTrackMapiSubmitInfo(text, null, string.Empty, StoreDriverSubmission.LocalIPAddress, Components.Configuration.LocalServer.TransportServer.Name, string.Empty, string.Empty, MailboxTransportSubmissionAssistant.ItemEntryId(mapiEvent), latencyFormatter.FormatAndUpdatePerfCounters(), null, false, true); MessageTrackingLog.TrackNotify(msgTrackInfo, false); } MSExchangeSubmission.PendingSubmissions.Increment(); new HashSet <string>(); DateTime createTime = mapiEvent.CreateTime; MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TracePfdPass <int, Guid, long>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "PFD EMS {0} SubmitMail for mailbox {1} at entry {2}", 22427, mapiEvent.MailboxGuid, mapiEvent.EventCounter); LatencyFormatter latencyFormatter2 = new LatencyFormatter(latencyTracker, Components.Configuration.LocalServer.TransportServer.Fqdn, createTime, createTime, false, true, false); bool isPublicFolder = mapiEvent.ExtendedEventFlags.HasFlag(MapiExtendedEventFlags.PublicFolderMailbox); LatencyTracker.BeginTrackLatency(LatencyComponent.MailboxTransportSubmissionStoreDriverSubmission, latencyTracker); ISubmissionProvider submissionProvider = (ISubmissionProvider)Components.StoreDriverSubmission; MailSubmissionResult mailSubmissionResult = submissionProvider.SubmitMessage(Components.Configuration.LocalServer.TransportServer.ExchangeLegacyDN, mapiEvent.MailboxGuid, this.databaseInfo.Guid, this.databaseInfo.DatabaseName, mapiEvent.EventCounter, mapiEvent.ItemEntryId, mapiEvent.ParentEntryId, Components.Configuration.LocalServer.TransportServer.Fqdn, new IPAddress(StoreDriverSubmission.LocalIPAddress.GetAddressBytes()), mapiEvent.CreateTime, isPublicFolder, (mapiEvent.TenantHint == null) ? null : TenantPartitionHint.FromPersistablePartitionHint(mapiEvent.TenantHint), latencyFormatter2.FormatAndUpdatePerfCounters(), MailboxTransportSubmissionService.QuarantineHandler, MailboxTransportSubmissionService.SubmissionPoisonHandler, latencyTracker); MailSubmissionResult result = mailSubmissionResult; LatencyTracker.EndTrackLatency(LatencyComponent.MailboxTransportSubmissionStoreDriverSubmission, latencyTracker); LatencyTracker.EndTrackLatency(LatencyComponent.MailboxTransportSubmissionService, latencyTracker); this.LogAndUpdateCounters(mapiEvent, latencyTracker, createTime, result); this.HandleEventError(mapiEvent, result, latencyTracker, text); } } finally { MSExchangeSubmission.PendingSubmissions.Decrement(); Interlocked.Decrement(ref this.concurrentEvents); this.SubmissionsInProgress.Remove(currentThread); } }
// Token: 0x0600003D RID: 61 RVA: 0x00003D68 File Offset: 0x00001F68 private void HandleEventError(MapiEvent mapiEvent, MailSubmissionResult result, LatencyTracker latencyTracker, string eventContext) { uint errorCode = result.ErrorCode; if (errorCode == 22U) { MailboxTransportSubmissionAssistant.IncrementSuccessfulPoisonNdrSubmissionPerfmon(); } else if (errorCode == 23U) { MailboxTransportSubmissionAssistant.IncrementPermanentFailedPoisonNdrSubmissionPerfmon(); } else if (HResult.IsHandled(errorCode)) { if (HResult.IsNonActionable(errorCode)) { MailboxTransportSubmissionAssistant.IncrementNonActionableFailedSubmissionPerfmon(); } else if (!HResult.IsMessageSubmittedOrHasNoRcpts(errorCode)) { MailboxTransportSubmissionAssistant.IncrementFailedSubmissionPerfmon(); } } else if (HResult.IsRetryableAtCurrentHub(errorCode)) { MailboxTransportSubmissionAssistant.IncrementTemporarySubmissionFailuresPerfmon(); } MailboxTransportSubmissionAssistant.ComputePercentSubmissionsPerfmon(false); if (11U == errorCode) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission for message {0} was throttled, retry happens in 1 minute.", mapiEvent.ItemEntryIdString); MailboxTransportSubmissionAssistant.BeginTrackLatency(mapiEvent, latencyTracker, LatencyComponent.SubmissionAssistantThrottling); throw new TransientMailboxException(MailboxTransportSubmissionAssistant.RetryScheduleMessageThrottling); } if (errorCode == 1140850696U) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <uint, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Resource is in Quarantined State. Error Code: {0}; Event Context: {1}", errorCode, eventContext); throw new TransientMailboxException(new RetrySchedule(FinalAction.RetryForever, TimeSpan.MaxValue, new TimeSpan[] { result.QuarantineTimeSpan })); } if (24U == errorCode) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <uint, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "NDR for Poison Message was not successful. Retry. Error Code: {0}, Event context: {1}.", errorCode, eventContext); MailboxTransportSubmissionAssistant.IncrementTemporaryPoisonNdrSubmissionFailuresPerfmon(); throw new TransientServerException(MailboxTransportSubmissionAssistant.RetrySchedulePoisonNdr); } if (HResult.IsHandled(errorCode)) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <uint, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission was handled. Error code {0}, event context {1}.", errorCode, eventContext); return; } if (2684354560U == errorCode) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission for message {0} was throttled at smtp, retry happens in 1 minute.", mapiEvent.ItemEntryIdString); throw new TransientMailboxException(MailboxTransportSubmissionAssistant.RetryScheduleGeneric); } if (HResult.IsRetryableAtCurrentHub(errorCode)) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <uint, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission was not successful. Retry at current hub error code {0}, event context {1}.", errorCode, eventContext); if (HResult.IsRetryMailbox(errorCode)) { throw new TransientMailboxException(MailboxTransportSubmissionAssistant.RetryScheduleGeneric); } if (HResult.IsRetryMailboxDatabase(errorCode)) { throw new TransientDatabaseException(MailboxTransportSubmissionAssistant.RetryScheduleGeneric); } if (HResult.IsRetryMailboxServer(errorCode)) { throw new TransientServerException(MailboxTransportSubmissionAssistant.RetryScheduleGeneric); } return; } else { if (HResult.IsRetryableAtOtherHub(errorCode)) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TraceFail <uint, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission was not successful. Retry other hub error code {0}, event context {1}.", errorCode, eventContext); throw new TransientServerException(MailboxTransportSubmissionAssistant.RetryScheduleGeneric); } throw new InvalidOperationException("Internal error. ErrorCode is: " + errorCode); } }
// Token: 0x06000039 RID: 57 RVA: 0x00003A30 File Offset: 0x00001C30 private void LogAndUpdateCounters(MapiEvent mapiEvent, LatencyTracker latencyTracker, DateTime arrivalTime, MailSubmissionResult result) { LatencyFormatter latencyFormatter = new LatencyFormatter(latencyTracker, Components.Configuration.LocalServer.TransportServer.Fqdn, arrivalTime, arrivalTime, true, false, true); string text = latencyFormatter.FormatAndUpdatePerfCounters(); this.LogMessageTrackingInfo(result.RemoteHostName, StoreDriverSubmission.LocalIPAddress, Components.Configuration.LocalServer.TransportServer.Name, mapiEvent, result, text); if (result.ErrorCode == 0U) { MailboxTransportSubmissionAssistant.IncrementSuccessfulSubmissionPerfmon(); if (MailboxTransportSubmissionService.StoreDriverTracer.IsMessageAMapiSubmitLAMProbe) { MailItemSubmitter.WriteLamNotificationEvent("EventHandled", text, result.MessageId, mapiEvent.MailboxGuid, MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeLamNotificationIdParts); } } }
// Token: 0x0600003A RID: 58 RVA: 0x00003ACC File Offset: 0x00001CCC private void LogMessageTrackingInfo(string remoteHostName, IPAddress localIP, string localServerName, MapiEvent mapiEvent, MailSubmissionResult result, string latencyString) { SubmissionRecord.Drop(this.successHistory, this.failureHistory, mapiEvent, result); string text = this.FormatMapiEventInfo(mapiEvent); MsgTrackMapiSubmitInfo msgTrackInfo; if (result.ErrorCode == 0U) { MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TracePass <string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission succeeded for {0}", text); msgTrackInfo = new MsgTrackMapiSubmitInfo(text, null, remoteHostName, localIP, localServerName, result.Sender, result.From, result.MessageId, MailboxTransportSubmissionAssistant.ItemEntryId(mapiEvent), Components.Configuration.LocalServer.TransportServer.MessageTrackingLogSubjectLoggingEnabled ? result.Subject : "[Undisclosed]", latencyString, result.DiagnosticInfo, null != mapiEvent, result.ExternalOrganizationId, result.OrganizationId, result.RecipientAddresses, MailDirectionality.Originating, result.NetworkMessageId, result.OriginalClientIPAddress); } else { string text2 = HResult.GetStringForErrorCode(result.ErrorCode); if (!string.IsNullOrEmpty(result.DiagnosticInfo)) { text2 = "Error: " + text2 + ", Diagnostic Information: " + result.DiagnosticInfo; } MailboxTransportSubmissionService.StoreDriverTracer.ServiceTracer.TracePass <string, string>(MailboxTransportSubmissionService.StoreDriverTracer.MessageProbeActivityId, (long)this.GetHashCode(), "Submission failed for {0}, error: {1}", text, text2); if (!HResult.IsHandled(result.ErrorCode) && !MailboxTransportSubmissionAssistant.ShouldLogTemporaryFailures) { return; } msgTrackInfo = new MsgTrackMapiSubmitInfo(text, null, remoteHostName, localIP, localServerName, result.Sender, result.MessageId, MailboxTransportSubmissionAssistant.ItemEntryId(mapiEvent), latencyString, text2, HResult.IsHandled(result.ErrorCode), null != mapiEvent, result.ExternalOrganizationId, result.OrganizationId, result.RecipientAddresses, MailDirectionality.Originating, result.NetworkMessageId); } if (11U == result.ErrorCode) { MessageTrackingLog.TrackThrottle(MessageTrackingSource.STOREDRIVER, msgTrackInfo, result.Sender, result.MessageId, MailDirectionality.Originating); return; } MessageTrackingLog.TrackMapiSubmit(msgTrackInfo); }
// Token: 0x0600004F RID: 79 RVA: 0x0000422C File Offset: 0x0000242C public static void Drop(Breadcrumbs <SubmissionRecord.Success> successHistory, Breadcrumbs <SubmissionRecord.Failure> failureHistory, object submissionData, MailSubmissionResult result) { if (result.ErrorCode == 0U) { successHistory.Drop(new SubmissionRecord.Success(submissionData, result.Sender, result.MessageId, result.Subject)); return; } failureHistory.Drop(new SubmissionRecord.Failure(submissionData, HResult.GetStringForErrorCode(result.ErrorCode), result.DiagnosticInfo)); }