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);
     }
 }
示例#3
0
 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);
     }
 }