public UniqueItemHash(string internetMsgId, string topic, BodyTagInfo btInfo, bool sentItems) { this.internetMessageId = internetMsgId; this.conversationTopic = topic; this.bodyTagInfo = btInfo; this.isSentItems = sentItems; }
private static BodyTagInfo DeserializeBodyTagInfoFromString(string bodyTagInfoString) { if (string.IsNullOrEmpty(bodyTagInfoString)) { return(null); } byte[] bytes = CTSGlobals.AsciiEncoding.GetBytes(bodyTagInfoString); return(BodyTagInfo.FromByteArray(bytes)); }
private static string SerializeBodyTagInfoToString(BodyTagInfo bodyTagInfo) { if (bodyTagInfo == null) { return(null); } byte[] array = bodyTagInfo.ToByteArray(); return(CTSGlobals.AsciiEncoding.GetString(array, 0, array.Length)); }
public bool IsBodyPartPresent(BodyFragmentInfo childBodyFragment, IStorePropertyBag parentPropertyBag, bool ignoreCache, out ExtractionData extractionData) { StoreObjectId objectId = ((VersionedId)parentPropertyBag.TryGetProperty(ItemSchema.Id)).ObjectId; KeyValuePair <ConversationBodyScanner, StoreObjectId> key = new KeyValuePair <ConversationBodyScanner, StoreObjectId>(childBodyFragment.BodyScanner, objectId); if (this.loadStatus.TryGetValue(key, out extractionData)) { bool flag = extractionData != null && extractionData.BodyFragment != null; if (flag || !ignoreCache) { return(flag); } } if (!ignoreCache && this.loadedItemParts.ContainsKey(objectId)) { extractionData = new ExtractionData(); } else { byte[] array = parentPropertyBag.TryGetProperty(ItemSchema.BodyTag) as byte[]; if (array == null && ignoreCache) { LoadedItemPart loadedItemPart = null; if (this.loadedItemParts.TryGetValue(objectId, out loadedItemPart) && loadedItemPart.BodyFragmentInfo != null && loadedItemPart.BodyFragmentInfo.BodyTag != null) { array = loadedItemPart.BodyFragmentInfo.BodyTag.ToByteArray(); } } this.optimizationInfo.IncrementBodyTagMatchingAttempts(); if (array != null) { extractionData = new ExtractionData(childBodyFragment, BodyTagInfo.FromByteArray(array)); if (extractionData.BodyFragment != null) { this.loadStatus[key] = extractionData; if (!extractionData.IsFormatReliable) { this.optimizationInfo.UpdateItemBodyFormatMismatched(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } else { this.optimizationInfo.UpdateItemBodyTagMismatched(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } else { extractionData = new ExtractionData(); this.optimizationInfo.UpdateItemBodyTagNotPresent(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } this.loadStatus[key] = extractionData; return(extractionData.BodyFragment != null); }
private ItemId PopulateItemIdFromItemExtendedPropertyValues(ExtendedPropertyType[] extendedProperties) { string id = null; string parentFolder = null; string primaryItemId = null; uint size = 0U; string subject = null; int documentId = 0; string text = null; string sender = null; string senderSmtpAddress = null; DateTime minValue = DateTime.MinValue; DateTime minValue2 = DateTime.MinValue; string importance = null; bool isRead = false; string text2 = null; BodyTagInfo btInfo = null; bool sentItems = false; if (extendedProperties != null) { foreach (ExtendedPropertyType extendedPropertyType in extendedProperties) { if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertySetId, Constants.MailboxItemIdPropertyIdSet, StringComparison.OrdinalIgnoreCase) == 0) { if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemIdExtendedProperty.PropertyType) { id = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyType) { parentFolder = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyType) { primaryItemId = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemSizeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemSizeExtendedProperty.PropertyType) { uint.TryParse(extendedPropertyType.Item as string, out size); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.DocumentIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.DocumentIdExtendedProperty.PropertyType) { int.TryParse(extendedPropertyType.Item as string, out documentId); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SubjectExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SubjectExtendedProperty.PropertyType) { subject = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType) { sender = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderSmtpAddressExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType) { senderSmtpAddress = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyType) { DateTime.TryParse(extendedPropertyType.Item as string, out minValue); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SentTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SentTimeExtendedProperty.PropertyType) { DateTime.TryParse(extendedPropertyType.Item as string, out minValue2); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ImportanceExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ImportanceExtendedProperty.PropertyType) { importance = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsReadExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsReadExtendedProperty.PropertyType) { bool.TryParse(extendedPropertyType.Item as string, out isRead); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyType) { text = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ConversationTopicExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ConversationTopicExtendedProperty.PropertyType) { text2 = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsSentItemsExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsSentItemsExtendedProperty.PropertyType) { sentItems = bool.Parse((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyType) { string s = (string)extendedPropertyType.Item; byte[] byteArray = Convert.FromBase64String(s); btInfo = BodyTagInfo.FromByteArray(byteArray); } } } string uniqueHash = null; if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2)) { uniqueHash = new UniqueItemHash(text, text2, btInfo, sentItems).ToString(); } return(new ItemId { Id = id, ParentFolder = parentFolder, PrimaryItemId = primaryItemId, Size = size, Subject = subject, DocumentId = documentId, InternetMessageId = text, Sender = sender, SenderSmtpAddress = senderSmtpAddress, ReceivedTime = minValue, SentTime = minValue2, Importance = importance, IsRead = isRead, UniqueHash = uniqueHash, SourceId = this.sourcePrimarySmtpAddress }); } return(null); }
public ExtractionData(BodyFragmentInfo childFragment, BodyTagInfo parentBodyTag) { childFragment.ExtractNestedBodyParts(parentBodyTag, out this.bodyFragment, out this.childUniqueBody, out this.childDisclaimer); this.originalTagInfo = parentBodyTag; }
public static UniqueItemHash Parse(string serializedUniqueItemHash) { if (string.IsNullOrEmpty(serializedUniqueItemHash)) { return(null); } bool sentItems = false; if (serializedUniqueItemHash.Substring(0, 1) == "1") { sentItems = true; } else if (serializedUniqueItemHash.Substring(0, 1) != "0") { throw new ArgumentException("Expected sent items serialized value is not either 1 or 0."); } int num = 1; int num2 = 0; if (!int.TryParse(serializedUniqueItemHash.Substring(num, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2)) { throw new ArgumentException("Cannot read the length indicator value of internet message id part."); } num += 4; string internetMsgId = null; if (num2 != 0) { internetMsgId = serializedUniqueItemHash.Substring(num, num2); num += num2; } if (!int.TryParse(serializedUniqueItemHash.Substring(num, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2)) { throw new ArgumentException("Cannot read the length indicator value of conversation topic part."); } num += 4; string topic = null; if (num2 != 0) { topic = serializedUniqueItemHash.Substring(num, num2); num += num2; } if (!int.TryParse(serializedUniqueItemHash.Substring(num, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2)) { throw new ArgumentException("Cannot read the length indicator value of body tag info part."); } num += 4; BodyTagInfo btInfo = null; if (num2 != 0) { string bodyTagInfoString = serializedUniqueItemHash.Substring(num, num2); btInfo = UniqueItemHash.DeserializeBodyTagInfoFromString(bodyTagInfoString); num += num2; } if (num != serializedUniqueItemHash.Length) { throw new ArgumentException(string.Format("The serialized unique item hash has not been completely parsed. Start index = {0}, Length = {1}", num, serializedUniqueItemHash.Length)); } return(new UniqueItemHash(internetMsgId, topic, btInfo, sentItems)); }
public static UniqueItemHash Create(IStorePropertyBag propertyBag, bool isOnSentItems) { string internetMsgId = propertyBag.TryGetProperty(ItemSchema.InternetMessageId) as string; string text = propertyBag.TryGetProperty(ItemSchema.ConversationTopic) as string; byte[] array = propertyBag.TryGetProperty(ItemSchema.BodyTag) as byte[]; return(new UniqueItemHash(internetMsgId, string.IsNullOrEmpty(text) ? string.Empty : text, (array != null) ? BodyTagInfo.FromByteArray(array) : null, isOnSentItems)); }
private static UniqueItemHash CalculateUniqueItemHash(StoreSession mailboxSession, object[] row, PagingInfo pagingInfo, StoreId sentItemsFolderId) { UniqueItemHash result = null; Dictionary <PropertyDefinition, object> dictionary = new Dictionary <PropertyDefinition, object>(4); int num = 0; foreach (PropertyDefinition key in pagingInfo.DataColumns) { dictionary.Add(key, row[num]); num++; } object obj = null; object obj2 = null; object obj3 = null; object obj4 = null; object obj5 = null; object obj6 = null; object obj7 = null; dictionary.TryGetValue(ItemSchema.Id, out obj); dictionary.TryGetValue(StoreObjectSchema.ParentItemId, out obj2); dictionary.TryGetValue(ItemSchema.InternetMessageId, out obj3); dictionary.TryGetValue(ItemSchema.ConversationId, out obj4); dictionary.TryGetValue(ItemSchema.ConversationTopic, out obj5); dictionary.TryGetValue(ItemSchema.BodyTag, out obj6); dictionary.TryGetValue(StoreObjectSchema.ItemClass, out obj7); if (obj != null && obj2 != null && obj3 != null && obj4 != null && obj5 != null) { StoreId storeId = (StoreId)obj; string internetMsgId = obj3 as string; string text = obj5 as string; StoreId storeId2 = obj2 as StoreId; bool flag = storeId2 != null && sentItemsFolderId != null && storeId2.Equals(sentItemsFolderId); if (obj6 == null && !flag && ObjectClass.IsMessage(obj7 as string, false)) { using (Item item = Item.Bind(mailboxSession, storeId)) { if (item.Body != null) { obj6 = item.Body.CalculateBodyTag(); } } } byte[] array = obj6 as byte[]; result = new UniqueItemHash(internetMsgId, text ?? string.Empty, (array != null) ? BodyTagInfo.FromByteArray(array) : null, flag); } return(result); }