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); }
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); }
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); }
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); }
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 }); } } }
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; }
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; }
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); }
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); }
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); }
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); }
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); } }
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); } }
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); }
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); } }
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(); }
public RuleActionTagData(RuleAction.Tag ruleAction) : base(ruleAction) { this.Value = DataConverter<PropValueConverter, PropValue, PropValueData>.GetData(ruleAction.Value); }
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(); } }
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)); }