Exemplo n.º 1
0
 public UniqueItemHash(string internetMsgId, string topic, BodyTagInfo btInfo, bool sentItems)
 {
     this.internetMessageId = internetMsgId;
     this.conversationTopic = topic;
     this.bodyTagInfo       = btInfo;
     this.isSentItems       = sentItems;
 }
Exemplo n.º 2
0
 private static BodyTagInfo DeserializeBodyTagInfoFromString(string bodyTagInfoString)
 {
     if (string.IsNullOrEmpty(bodyTagInfoString))
     {
         return(null);
     }
     byte[] bytes = CTSGlobals.AsciiEncoding.GetBytes(bodyTagInfoString);
     return(BodyTagInfo.FromByteArray(bytes));
 }
Exemplo n.º 3
0
 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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public ExtractionData(BodyFragmentInfo childFragment, BodyTagInfo parentBodyTag)
 {
     childFragment.ExtractNestedBodyParts(parentBodyTag, out this.bodyFragment, out this.childUniqueBody, out this.childDisclaimer);
     this.originalTagInfo = parentBodyTag;
 }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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);
        }