internal ContentRestrictionData(Restriction.ContentRestriction r)
 {
     this.Flags       = (int)r.Flags;
     this.PropTag     = (int)r.PropTag;
     this.MultiValued = r.MultiValued;
     this.Value       = DataConverter <PropValueConverter, PropValue, PropValueData> .GetData(r.PropValue);
 }
        Stream ISupportMime.GetMimeStream(MessageRec message, out PropValueData[] extraPropValues)
        {
            extraPropValues = null;
            Properties properties = this.FetchMessageItem(message);

            if (properties == null || properties.Body == null || string.IsNullOrEmpty(properties.Body.Data))
            {
                throw new UnableToFetchMimeStreamException(EasMailbox.GetStringId(message.EntryId));
            }
            if (properties.Flag != null)
            {
                extraPropValues = new PropValueData[]
                {
                    new PropValueData((PropTag)277872643U, properties.Flag.Status)
                };
            }
            string       data         = properties.Body.Data;
            MemoryStream memoryStream = new MemoryStream(data.Length);
            Stream       result;

            using (DisposeGuard disposeGuard = memoryStream.Guard())
            {
                using (StreamWriter streamWriter = new StreamWriter(memoryStream, Encoding.UTF8, 1024, true))
                {
                    streamWriter.Write(data);
                }
                memoryStream.Seek(0L, SeekOrigin.Begin);
                disposeGuard.Success();
                result = memoryStream;
            }
            return(result);
        }
Example #3
0
 PropValueData[] IMailbox.GetProps(PropTag[] ptags)
 {
     MrsTracer.Provider.Function("StorageMailbox.GetProps", new object[0]);
     base.VerifyMailboxConnection(VerifyMailboxConnectionFlags.None);
     object[] properties;
     using (base.RHTracker.Start())
     {
         PropertyDefinition[] array = this.ConvertPropTagsToDefinitions(ptags);
         this.StoreSession.Mailbox.ForceReload(array);
         properties = this.StoreSession.Mailbox.GetProperties(array);
     }
     PropValueData[] array2 = new PropValueData[properties.Length];
     for (int i = 0; i < ptags.Length; i++)
     {
         object  obj     = properties[i];
         PropTag propTag = ptags[i];
         if (obj is ExDateTime)
         {
             obj = (DateTime)((ExDateTime)obj);
         }
         if (obj is PropertyError)
         {
             propTag = propTag.ChangePropType(PropType.Error);
             obj     = (int)((PropertyError)obj).PropertyErrorCode;
         }
         if (obj == null)
         {
             propTag = propTag.ChangePropType(PropType.Null);
         }
         array2[i] = new PropValueData(propTag, obj);
     }
     return(array2);
 }
Example #4
0
 internal PropertyRestrictionData(StoreSession storeSession, ComparisonFilter comparisonFilter)
 {
     this.RelOp       = base.GetRelOpFromComparisonOperator(comparisonFilter.ComparisonOperator);
     this.PropTag     = base.GetPropTagFromDefinition(storeSession, comparisonFilter.Property);
     this.MultiValued = (comparisonFilter is MultivaluedInstanceComparisonFilter);
     this.Value       = new PropValueData((PropTag)this.PropTag, comparisonFilter.PropertyValue);
 }
Example #5
0
 internal PropertyRestrictionData(Restriction.PropertyRestriction r)
 {
     this.RelOp       = (int)r.Op;
     this.PropTag     = (int)r.PropTag;
     this.MultiValued = r.MultiValued;
     this.Value       = DataConverter <PropValueConverter, PropValue, PropValueData> .GetData(r.PropValue);
 }
Example #6
0
 private void TranslatePropValue(PropValueData pvd)
 {
     if (PrincipalTranslator.IsParticipantEntryIdTag(pvd.PropTag))
     {
         string text = PrincipalTranslator.LegDNFromParticipantEntryId(pvd.Value as byte[]);
         if (text != null)
         {
             string text2 = this.targetMapper.LookupLegDnByExProxy(text);
             pvd.Value = PrincipalTranslator.ParticipanEntryIdFromLegDN(pvd.Value as byte[], text2);
             MrsTracer.Service.Debug("Translating '{0}' to '{1}'", new object[]
             {
                 text,
                 text2
             });
             return;
         }
     }
     else if (PrincipalTranslator.IsSearchKeyTag(pvd.PropTag))
     {
         string text = PrincipalTranslator.LegDNFromSearchKey(pvd.Value as byte[]);
         if (text != null)
         {
             string text3 = this.targetMapper.LookupLegDnByExProxy(text);
             pvd.Value = PrincipalTranslator.SearchKeyFromLegDN(text3);
             MrsTracer.Service.Debug("Translating '{0}' to '{1}'", new object[]
             {
                 text,
                 text3
             });
         }
     }
 }
Example #7
0
 protected MessageRec CreateMessageRec(string uniqueId, long messageSize)
 {
     PropValueData[] messageProps = SyncEmailUtils.GetMessageProps(default(SyncEmailContext), this.Mailbox.PopConnection.ConnectionContext.UserName, this.FolderId, new PropValueData[0]);
     PropValueData[] array        = new PropValueData[messageProps.Length + 1];
     messageProps.CopyTo(array, 0);
     array[array.Length - 1] = new PropValueData(PropTag.LastModificationTime, CommonUtils.DefaultLastModificationTime);
     return(new MessageRec(PopEntryId.CreateMessageEntryId(uniqueId), this.FolderId, CommonUtils.DefaultLastModificationTime, (int)messageSize, MsgRecFlags.None, array));
 }
        protected override void EnumPropValuesInternal(CommonUtils.EnumPropValueDelegate del)
        {
            base.EnumPropValuesInternal(del);
            PropValueData propValueData = new PropValueData(PropTag.RuleFolderEntryID, this.FolderEntryID);

            del(propValueData);
            this.FolderEntryID = (byte[])propValueData.Value;
        }
Example #9
0
        protected override void EnumPropValuesInternal(CommonUtils.EnumPropValueDelegate del)
        {
            base.EnumPropValuesInternal(del);
            PropValueData propValueData = new PropValueData(PropTag.ReplyTemplateID, this.ReplyTemplateMessageEntryID);

            del(propValueData);
            this.ReplyTemplateMessageEntryID = (byte[])propValueData.Value;
        }
Example #10
0
        internal static EasMessageCategory FindMessageCategory(MessageRec message)
        {
            PropValueData propValueData = Array.Find <PropValueData>(message.AdditionalProps, (PropValueData pdv) => pdv.PropTag == 268304387);

            if (propValueData == null)
            {
                throw new EasMissingMessageCategoryException();
            }
            return((EasMessageCategory)propValueData.Value);
        }
Example #11
0
 PropValueData[] IMailbox.GetProps(PropTag[] ptags)
 {
     MrsTracer.Provider.Function("ImapMailbox.GetProps", new object[0]);
     base.VerifyMailboxConnection(VerifyMailboxConnectionFlags.None);
     PropValueData[] array = new PropValueData[ptags.Length];
     for (int i = 0; i < ptags.Length; i++)
     {
         PropTag propTag = ptags[i];
         propTag  = propTag.ChangePropType(PropType.Null);
         array[i] = new PropValueData(propTag, null);
     }
     return(array);
 }
Example #12
0
        private void WriteEntryIdReference(PropTagFolderMapping ptfm, byte[] folderId, FolderHierarchy.GetPropsDelegate getProps, FolderHierarchy.SetPropsDelegate setProps)
        {
            InboxNamedPropFolderMapping inboxNamedPropFolderMapping = ptfm as InboxNamedPropFolderMapping;
            PropTag propTag;

            if (inboxNamedPropFolderMapping != null)
            {
                propTag = this.MbxWrapper.NamedPropMapper.MapNamedProp(inboxNamedPropFolderMapping.NamedPropData, PropType.Binary);
            }
            else
            {
                propTag = ptfm.Ptag;
            }
            MrsTracer.Service.Debug("Writing WKF reference {0}: {1} -> {2}", new object[]
            {
                ptfm.WKFType,
                propTag,
                TraceUtils.DumpEntryId(folderId)
            });
            InboxIndexedFolderMapping inboxIndexedFolderMapping = ptfm as InboxIndexedFolderMapping;
            object value;

            if (inboxIndexedFolderMapping != null)
            {
                List <byte[]>   list  = new List <byte[]>();
                PropValueData[] array = getProps(new PropTag[]
                {
                    propTag
                });
                byte[][] array2 = array[0].Value as byte[][];
                if (array2 != null)
                {
                    list.AddRange(array2);
                }
                while (list.Count < inboxIndexedFolderMapping.EntryIndex + 1)
                {
                    list.Add(Array <byte> .Empty);
                }
                list[inboxIndexedFolderMapping.EntryIndex] = folderId;
                value = list.ToArray();
            }
            else
            {
                value = folderId;
            }
            PropValueData[] pvda = new PropValueData[]
            {
                new PropValueData(propTag, value)
            };
            setProps(pvda);
        }
Example #13
0
        private void SetProps(IPropertyBag propertyBag, PropValueData[] pvda)
        {
            if (pvda == null)
            {
                return;
            }
            int i = 0;

            while (i < pvda.Length)
            {
                PropValueData propValueData = pvda[i];
                object        obj           = propValueData.Value;
                if (obj is DateTime)
                {
                    obj = new ExDateTime(ExTimeZone.TimeZoneFromKind(((DateTime)obj).Kind), (DateTime)obj);
                }
                PropTag propTag  = (PropTag)propValueData.PropTag;
                PropTag propTag2 = propTag;
                if (propTag2 == PropTag.MessageFlags)
                {
                    MessageFlags messageFlags = StorageFxProxyPool.UpdateMessageFlags(propertyBag, (MessageFlags)((int)obj));
                    obj = (int)messageFlags;
                    goto IL_8B;
                }
                if (propTag2 != (PropTag)276824067U)
                {
                    goto IL_8B;
                }
                if (StorageFxProxyPool.ShouldUpdateIconIndex(propertyBag, (IconIndex)obj))
                {
                    goto Block_5;
                }
IL_B5:
                i++;
                continue;
Block_5:
                try
                {
IL_8B:
                    propertyBag.SetProperty(new PropertyValue(new PropertyTag((uint)propValueData.PropTag), obj));
                }
                catch (ArgumentException ex)
                {
                    throw new ExArgumentException(ex.Message, ex);
                }
                goto IL_B5;
            }
        }
        Stream ISupportMime.GetMimeStream(MessageRec message, out PropValueData[] extraPropValues)
        {
            extraPropValues = null;
            string     messageUid = PopEntryId.ParseUid(message.EntryId);
            Stream     result;
            ExDateTime?exDateTime;

            this.FetchMessage(messageUid, out result, out exDateTime);
            if (exDateTime != null)
            {
                extraPropValues = new PropValueData[]
                {
                    new PropValueData(PropTag.MessageDeliveryTime, exDateTime.Value.ToUtc())
                };
            }
            return(result);
        }
Example #15
0
 private void EnumerateMessagesHelper(List <uint> messageIds, PropTag[] additionalPtagsToLoad, List <MessageRec> messageList)
 {
     foreach (uint num in messageIds)
     {
         IMessage        message         = null;
         PropValueData[] additionalProps = null;
         PropertyValue   property        = PstFolder.errorPropertyValue;
         PropertyValue   property2       = PstFolder.errorPropertyValue;
         try
         {
             message = this.folder.PstMailbox.IPst.ReadMessage(num);
         }
         catch (PSTIOException innerException)
         {
             throw new UnableToGetPSTFolderPropsTransientException(BitConverter.ToUInt32(this.folderId, 0), innerException);
         }
         catch (PSTExceptionBase pstexceptionBase)
         {
             MrsTracer.Provider.Error("PstFolder.EnumerateMessages failed while reading message: {0}", new object[]
             {
                 pstexceptionBase
             });
         }
         if (message != null)
         {
             using (PSTMessage pstmessage = new PSTMessage(this.folder.PstMailbox, message))
             {
                 if (additionalPtagsToLoad != null)
                 {
                     additionalProps = new PropValueData[additionalPtagsToLoad.Length];
                     PropertyValue[] array = new PropertyValue[additionalPtagsToLoad.Length];
                     for (int i = 0; i < additionalPtagsToLoad.Length; i++)
                     {
                         array[i] = pstmessage.RawPropertyBag.GetProperty(PstMailbox.MoMTPtagFromPtag(additionalPtagsToLoad[i]));
                     }
                     additionalProps = DataConverter <PropValueConverter, PropValue, PropValueData> .GetData(PstMailbox.PvaFromMoMTPva(array));
                 }
                 property  = pstmessage.RawPropertyBag.GetProperty(PropertyTag.CreationTime);
                 property2 = pstmessage.RawPropertyBag.GetProperty(PropertyTag.MessageSize);
             }
         }
         byte[]     entryId = PstMailbox.CreateEntryIdFromNodeId(this.folder.PstMailbox.IPst.MessageStore.Guid, num);
         MessageRec item    = new MessageRec(entryId, this.FolderId, property.IsError ? DateTime.MinValue : ((DateTime)((ExDateTime)property.Value)), property2.IsError ? 1000 : ((int)property2.Value), this.folder.PstMailbox.IPst.CheckIfAssociatedMessageId(num) ? MsgRecFlags.Associated : MsgRecFlags.None, additionalProps);
         messageList.Add(item);
     }
 }
Example #16
0
        private void EnumeratePropValue(PropValueData pvd)
        {
            string text = null;

            if (PrincipalTranslator.IsParticipantEntryIdTag(pvd.PropTag))
            {
                text = PrincipalTranslator.LegDNFromParticipantEntryId(pvd.Value as byte[]);
            }
            else if (PrincipalTranslator.IsSearchKeyTag(pvd.PropTag))
            {
                text = PrincipalTranslator.LegDNFromSearchKey(pvd.Value as byte[]);
            }
            if (!string.IsNullOrEmpty(text))
            {
                this.sourceMapper.AddLegDN(text);
            }
        }
Example #17
0
 PropValueData[][] IFolder.GetACL(SecurityProp secProp)
 {
     if (!this.HasSecurityDescriptor(secProp))
     {
         return(null);
     }
     if (this.Mailbox.ServerVersion >= Server.E15MinVersion)
     {
         MrsTracer.Provider.Warning("MAPI provider does not support GetACL against E15+ mailboxes", new object[0]);
         return(null);
     }
     PropValueData[][] result;
     using (this.Mailbox.RHTracker.Start())
     {
         using (MapiModifyTable mapiModifyTable = (MapiModifyTable)this.Folder.OpenProperty(PropTag.AclTable, InterfaceIds.IExchangeModifyTable, 0, OpenPropertyFlags.DeferredErrors))
         {
             GetTableFlags getTableFlags = GetTableFlags.DeferredErrors;
             if (secProp == SecurityProp.FreeBusyNTSD)
             {
                 getTableFlags |= GetTableFlags.FreeBusy;
             }
             using (MapiTable table = mapiModifyTable.GetTable(getTableFlags))
             {
                 PropTag[] propTags = new PropTag[]
                 {
                     PropTag.EntryId,
                     PropTag.MemberId,
                     PropTag.MemberRights,
                     PropTag.MemberName
                 };
                 table.SeekRow(BookMark.Beginning, 0);
                 PropValue[][]     array  = MapiUtils.QueryAllRows(table, null, propTags);
                 PropValueData[][] array2 = new PropValueData[array.Length][];
                 int num = 0;
                 foreach (PropValue[] a in array)
                 {
                     array2[num++] = DataConverter <PropValueConverter, PropValue, PropValueData> .GetData(a);
                 }
                 result = array2;
             }
         }
     }
     return(result);
 }
Example #18
0
        private void TranslatePropValue(PropValueData pvd)
        {
            PropTag propTag = (PropTag)pvd.PropTag;

            if (propTag != PropTag.ParentEntryId)
            {
                if (propTag == PropTag.ReplyTemplateID)
                {
                    pvd.Value = null;
                    return;
                }
                if (propTag != PropTag.RuleFolderEntryID)
                {
                    return;
                }
            }
            byte[] array = pvd.Value as byte[];
            if (array != null)
            {
                pvd.Value = (this.TranslateFolderId(array) ?? array);
            }
        }
Example #19
0
 PropValueData[] IFolder.GetProps(PropTag[] pta)
 {
     MrsTracer.Provider.Function("StorageFolder.GetProps: {0}", new object[]
     {
         this.DisplayNameForTracing
     });
     PropValueData[]      array  = new PropValueData[pta.Length];
     PropertyDefinition[] array2 = this.Mailbox.ConvertPropTagsToDefinitions(pta);
     PropValueData[]      result;
     using (this.Mailbox.RHTracker.Start())
     {
         this.CoreFolder.PropertyBag.Load(array2);
         for (int i = 0; i < pta.Length; i++)
         {
             PropTag propTag = pta[i];
             object  value   = this.CoreFolder.PropertyBag.TryGetProperty(array2[i]);
             array[i] = new PropValueData(propTag, value);
         }
         result = array;
     }
     return(result);
 }
 internal ContentRestrictionData(StoreSession storeSession, ContentFilter contentFilter)
 {
     this.Flags       = (int)base.GetContentFlags(contentFilter.MatchFlags, contentFilter.MatchOptions);
     this.PropTag     = base.GetPropTagFromDefinition(storeSession, contentFilter.Property);
     this.MultiValued = ((PropTag)this.PropTag).IsMultiValued();
     if (contentFilter is TextFilter)
     {
         TextFilter textFilter = (TextFilter)contentFilter;
         this.Value = new PropValueData(((PropTag)this.PropTag).ChangePropType(PropType.String), textFilter.Text);
         return;
     }
     if (contentFilter is BinaryFilter)
     {
         BinaryFilter binaryFilter = (BinaryFilter)contentFilter;
         this.Value = new PropValueData(((PropTag)this.PropTag).ChangePropType(PropType.Binary), binaryFilter.BinaryData);
         return;
     }
     MrsTracer.Common.Error("Unknown content filter type '{0}' in content restriction data constructor", new object[]
     {
         contentFilter.GetType()
     });
     throw new CorruptRestrictionDataException();
 }
Example #21
0
		public RuleActionTagData(RuleAction.Tag ruleAction) : base(ruleAction)
		{
			this.Value = DataConverter<PropValueConverter, PropValue, PropValueData>.GetData(ruleAction.Value);
		}
Example #22
0
        public override void Apply(CoreFolder folder)
        {
            if (this.Value == null)
            {
                return;
            }
            ModifyTableOptions modifyTableOptions = this.Flags.HasFlag(AclFlags.FreeBusyAcl) ? ModifyTableOptions.FreeBusyAware : ModifyTableOptions.None;

            modifyTableOptions |= ModifyTableOptions.ExtendedPermissionInformation;
            using (IModifyTable permissionTableDoNotLoadEntries = folder.GetPermissionTableDoNotLoadEntries(modifyTableOptions))
            {
                foreach (PropValueData[] array in this.Value)
                {
                    List <PropValue> list = new List <PropValue>();
                    int j = 0;
                    while (j < array.Length)
                    {
                        PropValueData propValueData = array[j];
                        int           propTag       = propValueData.PropTag;
                        if (propTag <= 1718747166)
                        {
                            if (propTag != 268370178)
                            {
                                if (propTag != 1718681620)
                                {
                                    if (propTag != 1718747166)
                                    {
                                        goto IL_168;
                                    }
                                    list.Add(new PropValue(PermissionSchema.MemberName, (string)propValueData.Value));
                                }
                            }
                            else
                            {
                                byte[] array2 = (byte[])propValueData.Value;
                                if (array2 != null)
                                {
                                    list.Add(new PropValue(PermissionSchema.MemberEntryId, array2));
                                }
                            }
                        }
                        else if (propTag != 1718812675)
                        {
                            if (propTag != 1718878466)
                            {
                                if (propTag != 1718943755)
                                {
                                    goto IL_168;
                                }
                                list.Add(new PropValue(PermissionSchema.MemberIsGroup, (bool)propValueData.Value));
                            }
                            else
                            {
                                list.Add(new PropValue(PermissionSchema.MemberSecurityIdentifier, (byte[])propValueData.Value));
                            }
                        }
                        else
                        {
                            list.Add(new PropValue(PermissionSchema.MemberRights, (MemberRights)propValueData.Value));
                        }
IL_191:
                        j++;
                        continue;
IL_168:
                        MrsTracer.Provider.Warning("StorageDestinationFolder.SetAcl: Unknown PropTag 0x{0:x}", new object[]
                        {
                            propValueData.PropTag
                        });
                        goto IL_191;
                    }
                    permissionTableDoNotLoadEntries.AddRow(list.ToArray());
                }
                permissionTableDoNotLoadEntries.ApplyPendingChanges();
            }
        }
Example #23
0
        List <MessageRec> IFolder.LookupMessages(PropTag ptagToLookup, List <byte[]> keysToLookup, PropTag[] additionalPtagsToLoad)
        {
            EntryIdMap <MessageRec> result = new EntryIdMap <MessageRec>();

            ContentsTableFlags[] array = new ContentsTableFlags[]
            {
                ContentsTableFlags.None,
                ContentsTableFlags.Associated
            };
            List <PropTag> pta        = new List <PropTag>(5);
            int            idxEntryId = pta.Count;

            pta.Add(PropTag.EntryId);
            int idxMessageSize = pta.Count;

            pta.Add(PropTag.MessageSize);
            int idxCreationTime = pta.Count;

            pta.Add(PropTag.CreationTime);
            int idxExtraPtags = pta.Count;

            if (additionalPtagsToLoad != null)
            {
                pta.AddRange(additionalPtagsToLoad);
            }
            for (int i = 0; i < array.Length; i++)
            {
                if (result.Count >= keysToLookup.Count)
                {
                    break;
                }
                ContentsTableFlags flags = ContentsTableFlags.DeferredErrors | array[i];
                bool doingFAI            = (flags & ContentsTableFlags.Associated) != ContentsTableFlags.None;
                ExecutionContext.Create(new DataContext[]
                {
                    new OperationDataContext("MapiFolder.GetContentsTable", OperationType.None),
                    new SimpleValueDataContext("Flags", flags)
                }).Execute(delegate
                {
                    MapiTable msgTable;
                    using (this.Mailbox.RHTracker.Start())
                    {
                        msgTable = this.Folder.GetContentsTable(flags);
                    }
                    using (msgTable)
                    {
                        if (ptagToLookup != PropTag.EntryId)
                        {
                            using (this.Mailbox.RHTracker.Start())
                            {
                                msgTable.SortTable(new SortOrder(ptagToLookup, SortFlags.Ascend), SortTableFlags.None);
                            }
                        }
                        msgTable.SetColumns(pta);
                        using (List <byte[]> .Enumerator enumerator = keysToLookup.GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                byte[] key = enumerator.Current;
                                if (!result.ContainsKey(key))
                                {
                                    ExecutionContext.Create(new DataContext[]
                                    {
                                        new EntryIDsDataContext(key)
                                    }).Execute(delegate
                                    {
                                        try
                                        {
                                            using (this.Mailbox.RHTracker.Start())
                                            {
                                                if (!msgTable.FindRow(Restriction.EQ(ptagToLookup, key), BookMark.Beginning, FindRowFlag.None))
                                                {
                                                    return;
                                                }
                                            }
                                        }
                                        catch (MapiExceptionNotFound)
                                        {
                                            return;
                                        }
                                        PropValue[][] array2;
                                        using (this.Mailbox.RHTracker.Start())
                                        {
                                            array2 = msgTable.QueryRows(1);
                                        }
                                        if (array2.Length == 1)
                                        {
                                            PropValue[] array3 = array2[0];
                                            if (array3.Length != pta.Count)
                                            {
                                                return;
                                            }
                                            PropValueData[] array4 = null;
                                            if (additionalPtagsToLoad != null && additionalPtagsToLoad.Length > 0)
                                            {
                                                array4 = new PropValueData[additionalPtagsToLoad.Length];
                                                for (int j = idxExtraPtags; j < array3.Length; j++)
                                                {
                                                    array4[j - idxExtraPtags] = DataConverter <PropValueConverter, PropValue, PropValueData> .GetData(array3[j]);
                                                }
                                            }
                                            MessageRec value = new MessageRec(array3[idxEntryId].GetBytes(), this.FolderId, MapiUtils.GetDateTimeOrDefault(array3[idxCreationTime]), array3[idxMessageSize].GetInt(1000), doingFAI ? MsgRecFlags.Associated : MsgRecFlags.None, array4);
                                            result.Add(key, value);
                                            return;
                                        }
                                    });
                                }
                            }
                        }
                    }
                });
            }
            MrsTracer.Provider.Debug("MapiFolder.LookupMessages returns {0} items.", new object[]
            {
                result.Count
            });
            return(new List <MessageRec>(result.Values));
        }