public override SubmissionItem CreateSubmissionItem(MailItemSubmitter context) { return(new MapiSubmissionItem(this, context, this.storeDriverTracer)); }
internal StoreDriverSubmissionEventArgsImpl(MailItem mailItem, SubmissionItem submissionItem, MailItemSubmitter mailItemSubmitter) { this.mailItem = mailItem; this.submissionItem = submissionItem; this.mailItemSubmitter = mailItemSubmitter; }
public Exception CallDoneWithMessageWithRetry(StoreSession session, MessageItem item, int retryCount, MailItemSubmitter context) { TraceHelper.MapiStoreDriverSubmissionTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Move message from outbox"); Exception result = null; ExTraceGlobals.FaultInjectionTracer.TraceTest(3689295165U); if (!session.Capabilities.CanSend) { string message = "Store session does not have CanSend capability, DoneWithMessage is not called."; TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, message); return(new InvalidOperationException(message)); } for (int i = 0; i < retryCount; i++) { ExDateTime dt = (context == null) ? default(ExDateTime) : ExDateTime.UtcNow; try { session.DoneWithMessage(item); return(null); } catch (StoragePermanentException ex) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail <StoragePermanentException>(TraceHelper.MessageProbeActivityId, 0L, "DoneWithMessage failed with permanent exception {0}", ex); result = ex; } catch (StorageTransientException ex2) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail <int, StorageTransientException>(TraceHelper.MessageProbeActivityId, 0L, "DoneWithMessage failed at attempt {0} with transient exception {1}", i, ex2); result = ex2; if (retryCount - 1 > i) { Thread.Sleep(TimeSpan.FromMilliseconds((double)(i * 10))); } } finally { if (context != null) { TimeSpan additionalLatency = ExDateTime.UtcNow - dt; context.AddRpcLatency(additionalLatency, "Done with message"); } } } return(result); }