public static bool DetectDeliveryHang(out string hangBreadcrumb) { if (StoreDriverDeliveryDiagnostics.HangDetector == null) { StoreDriverDeliveryDiagnostics.Diag.TraceDebug(0L, "Store driver component is being initialized and HangDetector hasn't been created yet, we are not hanging."); hangBreadcrumb = null; return(false); } ulong num; MailItemDeliver mailItemDeliver; if (StoreDriverDeliveryDiagnostics.HangDetector.DetectHang(Components.Configuration.AppConfig.RemoteDelivery.StoreDriverRecipientDeliveryHangThreshold, out num, out mailItemDeliver)) { hangBreadcrumb = mailItemDeliver.DeliveryBreadcrumb.ToString(); string[] messageArgs = new string[] { num.ToString(), (mailItemDeliver.Recipient == null) ? "NotSet" : mailItemDeliver.Recipient.Email.ToString(), Components.Configuration.AppConfig.RemoteDelivery.StoreDriverRecipientDeliveryHangThreshold.ToString(), hangBreadcrumb }; if (mailItemDeliver.MbxTransportMailItem != null) { PoisonMessage.Context = new MessageContext(mailItemDeliver.MbxTransportMailItem.RecordId, mailItemDeliver.MbxTransportMailItem.InternetMessageId, MessageProcessingSource.StoreDriverLocalDelivery); } StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_DeliveryHang, "DeliveryHang", messageArgs); return(true); } hangBreadcrumb = null; return(false); }
public void Start(bool initiallyPaused, ServiceState targetRunningState) { lock (this.syncObject) { ADNotificationAdapter.RunADOperation(delegate() { try { StoreDriverDelivery.localIp = Dns.GetHostEntry("localhost"); StoreDriverDelivery.localFqdn = StoreDriverDelivery.localIp.HostName; StoreDriverDelivery.localDomain = StoreDriverDelivery.GetDomainNameFromFqdn(StoreDriverDelivery.localFqdn); StoreDriverDelivery.localHostName = StoreDriverDelivery.GetShortNameFromFqdn(StoreDriverDelivery.localFqdn); } catch (SocketException ex) { StoreDriverDeliveryDiagnostics.Diag.TraceError <string>(0L, "Start failed: {0}", ex.ToString()); StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_StoreDriverGetLocalIPFailure, null, new object[] { ex }); throw new TransportComponentLoadFailedException(ex.Message, ex); } ProcessAccessManager.RegisterComponent(this); StoreDriverDeliveryDiagnostics.Diag.TraceDebug(0L, "Start delivery"); }, 1); } }
private void ValidateLegacyDN(MailRecipient recipient, string legacyDN) { if (string.IsNullOrEmpty(legacyDN)) { string text = recipient.Email.ToString(); StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_DeliveryFailedNoLegacyDN, text, new object[] { text }); throw new SmtpResponseException(AckReason.NoLegacyDN, MessageAction.Reroute); } }
public override void MarkPoisonMessageHandled(string poisonId) { try { base.MarkPoisonMessageHandled(poisonId); } catch (UnauthorizedAccessException ex) { StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_PoisonMessageMarkFailedRegistryAccessDenied, null, new object[] { ex.Message }); } }
public override void SavePoisonContext() { try { base.SavePoisonContext(); } catch (UnauthorizedAccessException ex) { StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_PoisonMessageSaveFailedRegistryAccessDenied, null, new object[] { ex.Message }); } }
public override void Load() { try { base.Load(); } catch (UnauthorizedAccessException ex) { StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_PoisonMessageLoadFailedRegistryAccessDenied, null, new object[] { ex.Message }); throw new TransportComponentLoadFailedException(Strings.PoisonMessageRegistryAccessFailed, ex); } }