private static bool HasTimerFired(ReliableTimer.Feature feature, IItem item) { StorePropertyDefinition storePropertyDefinition = ReliableTimer.featureToStorePropertyMapping[feature]; item.Load(new List <PropertyDefinition> { storePropertyDefinition }); object obj = item.TryGetProperty(storePropertyDefinition); if (PropertyError.IsPropertyNotFound(obj)) { ExTraceGlobals.ReliableTimerTracer.TraceDebug <ReliableTimer.Feature>(0L, "Timer not set for feature={0}", feature); return(false); } if (PropertyError.IsPropertyError(obj)) { PropertyError propertyError = (PropertyError)obj; ExTraceGlobals.ReliableTimerTracer.TraceError <ReliableTimer.Feature, PropertyErrorCode>(0L, "Property error for feature={0}, propertyErrorCode={1}", feature, propertyError.PropertyErrorCode); throw PropertyError.ToException(new PropertyError[] { propertyError }); } ExDateTime exDateTime = (ExDateTime)obj; ExTraceGlobals.ReliableTimerTracer.TraceDebug <ReliableTimer.Feature, ExDateTime>(0L, "Timer value for feature={0}, timerValue={1}", feature, exDateTime); return(exDateTime == ReliableTimer.FiredTimerPropertyValue); }
// Token: 0x06000604 RID: 1540 RVA: 0x0002E2C8 File Offset: 0x0002C4C8 private bool AreItemsLegallyEqual(ICollection <PropertyDefinition> legalTrackingProperties, Item originalItem, Item currentItem) { using (IEnumerator <PropertyDefinition> enumerator = legalTrackingProperties.GetEnumerator()) { while (enumerator.MoveNext()) { PropertyDefinition legalTrackingProperty = enumerator.Current; object value = originalItem.GetValue(legalTrackingProperty); object value2 = currentItem.GetValue(legalTrackingProperty); if (value != null && value2 != null) { if (!PropertyError.IsPropertyNotFound(value) || !PropertyError.IsPropertyNotFound(value2)) { if (PropertyError.IsPropertyValueTooBig(value) && PropertyError.IsPropertyValueTooBig(value2)) { if (!this.CompareStreams(() => originalItem.GetStream(legalTrackingProperty), () => currentItem.GetStream(legalTrackingProperty))) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, legalTrackingProperty); return(false); } } else if (!PropertyError.IsPropertyError(value) && !PropertyError.IsPropertyError(value2)) { if (legalTrackingProperty.Type.IsArray) { if (!((Array)value).Compare((Array)value2)) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, legalTrackingProperty); return(false); } } else if (!value.Equals(value2)) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, legalTrackingProperty); return(false); } } } } else if (value != null || value2 != null) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, legalTrackingProperty); return(false); } } } if (originalItem is MessageItem && !this.CompareRecipients(((MessageItem)originalItem).Recipients, ((MessageItem)currentItem).Recipients)) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, "Recipients"); return(false); } if (!this.CompareAttachments(originalItem.AttachmentCollection, currentItem.AttachmentCollection)) { this.LogDirtyProperty(currentItem.Id, originalItem.Id, originalItem.ClassName, "Attachments"); return(false); } return(true); }
// Token: 0x0600012E RID: 302 RVA: 0x000076F8 File Offset: 0x000058F8 private static bool ShouldLicenseMessage(MessageItem item) { return(item.IsRestricted && (PropertyError.IsPropertyNotFound(item.TryGetProperty(MessageItemSchema.DRMRights)) || PropertyError.IsPropertyNotFound(item.TryGetProperty(MessageItemSchema.DRMExpiryTime)))); }
public void OnPromotedMessageHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args) { ConversationsProcessingAgent.tracer.TraceDebug(0L, "Called ConversationsProcessingAgent.OnPromotedMessageHandler"); if (args == null) { return; } StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = (StoreDriverDeliveryEventArgsImpl)args; if (ConversationsProcessingAgent.ShouldSkipMessageProcessing(storeDriverDeliveryEventArgsImpl)) { return; } if (storeDriverDeliveryEventArgsImpl.MailboxOwner == null) { return; } MailboxSession mailboxSession = storeDriverDeliveryEventArgsImpl.MailboxSession; if (mailboxSession.MailboxOwner.MailboxInfo.Location.ServerVersion <= 1937801369) { if (ConversationsProcessingAgent.tracer.IsTraceEnabled(TraceType.DebugTrace)) { ConversationsProcessingAgent.tracer.TraceDebug <string, string>((long)this.GetHashCode(), "Backend server version (0x{0}) is less than minimum required (0x{1})", mailboxSession.MailboxOwner.MailboxInfo.Location.ServerVersion.ToString("X"), 1937801369.ToString("X")); } return; } ConversationsProcessingAgent.tracer.TraceDebug((long)this.GetHashCode(), "Processing incoming message"); Stopwatch stopwatch = Stopwatch.StartNew(); try { if (storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies == null) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies = new Dictionary <PropertyDefinition, object>(); } ConversationIndexTrackingEx conversationIndexTrackingEx = ConversationIndexTrackingEx.Create(); this.performanceContext = ConversationsProcessingAgent.conversationLatencyDetectionContextFactory.CreateContext("15.00.1497.012", "FIXUP", new IPerformanceDataProvider[0]); if (!this.isBodyTagCalculated) { ConversationsProcessingAgent.tracer.TraceDebug((long)this.GetHashCode(), "Calculating body tag"); Stopwatch stopwatch2 = Stopwatch.StartNew(); if (storeDriverDeliveryEventArgsImpl.ReplayItem.IsRestricted) { if (!this.TryCalculateIrmBodyTag(storeDriverDeliveryEventArgsImpl)) { this.bodyTag = null; } } else if (PropertyError.IsPropertyNotFound(storeDriverDeliveryEventArgsImpl.ReplayItem.TryGetProperty(ItemSchema.BodyTag))) { this.bodyTag = storeDriverDeliveryEventArgsImpl.ReplayItem.Body.CalculateBodyTag(out this.latestMessageWordCount); } else { this.bodyTag = storeDriverDeliveryEventArgsImpl.ReplayItem.GetValueOrDefault <byte[]>(ItemSchema.BodyTag); this.latestMessageWordCount = storeDriverDeliveryEventArgsImpl.ReplayItem.GetValueOrDefault <int>(MessageItemSchema.LatestMessageWordCount, int.MinValue); } stopwatch2.Stop(); conversationIndexTrackingEx.Trace("BT", stopwatch2.ElapsedMilliseconds.ToString()); this.isBodyTagCalculated = true; } if (this.bodyTag != null) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.BodyTag] = this.bodyTag; if (this.latestMessageWordCount >= 0) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[MessageItemSchema.LatestMessageWordCount] = this.latestMessageWordCount; storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(MessageItemSchema.LatestMessageWordCount, this.latestMessageWordCount); } } if (this.forceAllAttachmentsHidden) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[MessageItemSchema.AllAttachmentsHidden] = true; } if (!ConversationIndex.CompareTopics(storeDriverDeliveryEventArgsImpl.ReplayItem.TryGetProperty(ItemSchema.ConversationTopic) as string, storeDriverDeliveryEventArgsImpl.ReplayItem.TryGetProperty(ItemSchema.NormalizedSubject) as string)) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationTopic] = ((storeDriverDeliveryEventArgsImpl.ReplayItem.TryGetProperty(ItemSchema.NormalizedSubject) as string) ?? string.Empty); } if (!storeDriverDeliveryEventArgsImpl.MessageClass.Equals("IPM.WorkingSet.Signal", StringComparison.InvariantCulture)) { ConversationAggregationResult conversationAggregationResult = new ConversationAggregationResult(); ConversationsProcessingAgent.tracer.TraceDebug((long)this.GetHashCode(), "Fixing up the conversation id"); try { IConversationAggregator conversationAggregator; if (ConversationAggregatorFactory.TryInstantiateAggregatorForDelivery(mailboxSession, storeDriverDeliveryEventArgsImpl.MailboxOwner, conversationIndexTrackingEx, out conversationAggregator)) { conversationAggregationResult = conversationAggregator.Aggregate(storeDriverDeliveryEventArgsImpl.ReplayItem.CoreItem); } else { ConversationsProcessingAgent.tracer.TraceError((long)this.GetHashCode(), "Not able to identify a valid conversationAggregator"); conversationAggregationResult.ConversationIndex = ConversationIndex.CreateNew(); conversationAggregationResult.Stage = ConversationIndex.FixupStage.Error; } } catch (ObjectNotFoundException arg) { ConversationsProcessingAgent.tracer.TraceError <ObjectNotFoundException>((long)this.GetHashCode(), "Exception - {0}", arg); conversationAggregationResult.ConversationIndex = ConversationIndex.CreateNew(); conversationAggregationResult.Stage = ConversationIndex.FixupStage.Error; } this.performanceContext.StopAndFinalizeCollection(); conversationIndexTrackingEx.Trace("FIXUP", this.performanceContext.Elapsed.TotalMilliseconds.ToString()); ConversationsProcessingAgent.tracer.TraceDebug <int>((long)this.GetHashCode(), "FixupStage = {0}", (int)conversationAggregationResult.Stage); ConversationId conversationId = ConversationId.Create(conversationAggregationResult.ConversationIndex); ConversationsProcessingAgent.tracer.TraceDebug <ConversationId>((long)this.GetHashCode(), "ConversationId (CID) for item: {0}", conversationId); storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationIndex] = conversationAggregationResult.ConversationIndex.ToByteArray(); storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(ItemSchema.ConversationIndex, storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationIndex]); storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationFamilyId] = conversationAggregationResult.ConversationFamilyId; storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(ItemSchema.ConversationFamilyId, storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationFamilyId]); storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.SupportsSideConversation] = conversationAggregationResult.SupportsSideConversation; storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(ItemSchema.SupportsSideConversation, storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.SupportsSideConversation]); byte[] value; if (this.TryCalculateConversationCreatorSid(mailboxSession, storeDriverDeliveryEventArgsImpl.MailboxOwner, conversationAggregationResult, storeDriverDeliveryEventArgsImpl.ReplayItem.PropertyBag, out value)) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationCreatorSID] = value; storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(ItemSchema.ConversationCreatorSID, storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationCreatorSID]); } conversationIndexTrackingEx.TraceVersionAndHeuristics(conversationAggregationResult.Stage.ToString()); storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationIndexTrackingEx] = conversationIndexTrackingEx.ToString(); if (conversationAggregationResult.Stage != ConversationIndex.FixupStage.L1) { storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationIndexTracking] = true; storeDriverDeliveryEventArgsImpl.ReplayItem.SafeSetProperty(ItemSchema.ConversationIndexTracking, storeDriverDeliveryEventArgsImpl.PropertiesForAllMessageCopies[ItemSchema.ConversationIndexTracking]); } ConversationsProcessingAgent.tracer.TraceDebug <ConversationIndexTrackingEx>((long)this.GetHashCode(), "Time Spent in different stages - {0}", conversationIndexTrackingEx); ConversationsProcessingAgent.tracer.TraceDebug((long)this.GetHashCode(), "Processing conversation actions"); if (!ConversationIndex.IsFixUpCreatingNewConversation(conversationAggregationResult.Stage)) { this.ProcessConversationActions(conversationId, storeDriverDeliveryEventArgsImpl); } if (ConversationIndex.IsFixupAddingOutOfOrderMessageToConversation(conversationAggregationResult.Stage)) { if (storeDriverDeliveryEventArgsImpl.SharedPropertiesBetweenAgents == null) { storeDriverDeliveryEventArgsImpl.SharedPropertiesBetweenAgents = new Dictionary <PropertyDefinition, object>(); } storeDriverDeliveryEventArgsImpl.SharedPropertiesBetweenAgents[ItemSchema.ConversationLoadRequiredByInference] = true; } } } finally { stopwatch.Stop(); MSExchangeConversationsProcessing.LastMessageProcessingTime.RawValue = stopwatch.ElapsedMilliseconds; ConversationsProcessingAgent.averageMessageProcessingTime.Update(stopwatch.ElapsedMilliseconds); ConversationsProcessingAgent.tracer.TraceDebug <long>((long)this.GetHashCode(), "Exiting ConversationsProcessing.ProcessMessage. Total execution time = {0} ms.", stopwatch.ElapsedMilliseconds); } }
public bool TryGetSendAsSubscription(MessageItem item, SendAsManager sendAsManager, out ISendAsSource subscription) { subscription = null; MailboxSession mailboxSession = item.Session as MailboxSession; object obj = item.TryGetProperty(MessageItemSchema.SharingInstanceGuid); if (PropertyError.IsPropertyNotFound(obj)) { if (mailboxSession != null && mailboxSession.MailboxOwner != null && mailboxSession.MailboxOwner.MailboxInfo.IsAggregated) { TraceHelper.MapiStoreDriverSubmissionTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "The message was submitted from an aggregated mailbox. There must be one associated send as subscription."); bool flag; if (!sendAsManager.TryGetSendAsSubscription(mailboxSession, out subscription, out flag)) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, "Could not find a unique send as subscription. Rejecting the message."); if (flag) { throw new SmtpResponseException(AckReason.AmbiguousSubscription); } throw new SmtpResponseException(AckReason.SubscriptionNotFound); } } } else { TraceHelper.MapiStoreDriverSubmissionTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "The message has a subscription id on it. Subscription id: {0}", new object[] { obj }); if (mailboxSession == null) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail <Type>(TraceHelper.MessageProbeActivityId, 0L, "The session is not the right type. Actual type: {0}", item.Session.GetType()); throw new SmtpResponseException(AckReason.UnrecognizedSendAsMessage); } if (!sendAsManager.TryGetSendAsSubscription(item, mailboxSession, out subscription)) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, "The subscription could not be found. Rejecting the message. Subscription id: {0}", new object[] { obj }); throw new SmtpResponseException(AckReason.SubscriptionNotFound); } if (!sendAsManager.IsSubscriptionEnabled(subscription)) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, "The subscription is not enabled. Rejecting the message. Subscription id: {0}", new object[] { obj }); throw new SmtpResponseException(AckReason.SubscriptionDisabled); } if (!sendAsManager.IsSendAsEnabled(subscription)) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, "The subscription is not enabled for send as. Rejecting the message. Subscription id: {0}", new object[] { obj }); throw new SmtpResponseException(AckReason.SubscriptionNotEnabledForSendAs); } if (!sendAsManager.IsValidSendAsMessage(subscription, item)) { TraceHelper.MapiStoreDriverSubmissionTracer.TraceFail(TraceHelper.MessageProbeActivityId, 0L, "The message does not have valid sent representing properties. Rejecting the message. Subscription id: {0}", new object[] { obj }); throw new SmtpResponseException(AckReason.InvalidSendAsProperties); } } return(subscription != null); }