public PropertyContext(ulong nid, PSTFile pst) { var bytes = BlockBO.GetNodeData(nid, pst); var HN = new HN(bytes); this.BTH = new BTH(HN); this.Properties = this.BTH.GetExchangeProperties(); }
public TableContext(ulong nid, PSTFile pst) { NodeData = BlockBO.GetNodeData(nid, pst); HeapNode = new HN(NodeData); var tcinfoHID = HeapNode.HeapNodes[0].Header.UserRoot; var tcinfoHIDbytes = HeapNode.GetHIDBytes(tcinfoHID); TCHeader = new TCINFOHEADER(tcinfoHIDbytes.Data); RowIndexBTH = new BTH(HeapNode, TCHeader.RowIndexLocation); ReverseRowIndex = new Dictionary <uint, uint>(); foreach (var prop in RowIndexBTH.Properties) { var temp = BitConverter.ToUInt32(prop.Value.Data, 0); ReverseRowIndex.Add(temp, BitConverter.ToUInt32(prop.Key, 0)); } RowMatrix = new TCRowMatrix(this, RowIndexBTH); }
public static HN GetHeapNode(ulong NID, PSTFile pst) { return(new HN(BlockBO.GetNodeData(NID, pst))); }
public Message(uint NID, PSTFile pst) : base(pst, NID) { unicode = pst.Header.isUnicode; Data = BlockBO.GetNodeData(NID, pst); this.NID = NID; ContentEx = new List <string>(); //MessagePC = new PropertyContext(Data); int attachmentPcIndex = 0; foreach (var subNode in Data.SubNodeData) { var temp = new NID(subNode.Key); switch (temp.Type) { case NDB.NID.NodeType.ATTACHMENT_TABLE: AttachmentTable = new TableContext(subNode.Value); foreach (var row in AttachmentTable.RowMatrix.Rows) { Attachments.Add(new Attachment(pst.Header.isUnicode, row)); } break; case NDB.NID.NodeType.ATTACHMENT_PC: var AttachmentPC = new PropertyContext(subNode.Value); if (Attachments.Count > attachmentPcIndex) { Attachments[attachmentPcIndex].AddProperties(unicode, AttachmentPC); } attachmentPcIndex++; break; case NDB.NID.NodeType.RECIPIENT_TABLE: RecipientTable = new TableContext(subNode.Value); foreach (var row in RecipientTable.RowMatrix.Rows) { var recipient = new Recipient(pst.Header.isUnicode, row); switch (recipient.Type) { case Recipient.RecipientType.TO: To.Add(recipient); break; case Recipient.RecipientType.FROM: From.Add(recipient); break; case Recipient.RecipientType.CC: CC.Add(recipient); break; case Recipient.RecipientType.BCC: BCC.Add(recipient); break; } } break; case NDB.NID.NodeType.CONTENT_EX: // TODO: investigate what this is. /* * foreach (var nodeData in subNode.Value.NodeData) * { * ContentEx.Add(pst.Header.isUnicode * ? Encoding.Unicode.GetString(subNode.Value.NodeData[0].Data) * : Encoding.ASCII.GetString(subNode.Value.NodeData[0].Data)); * } */ break; default: // TODO: investigate what this is. /* * foreach (var nodeData in subNode.Value.NodeData) * { * string foo = pst.Header.isUnicode * ? Encoding.Unicode.GetString(subNode.Value.NodeData[0].Data) * : Encoding.ASCII.GetString(subNode.Value.NodeData[0].Data); * Console.WriteLine(foo); * } */ break; } } foreach (var prop in PC.Properties) { if (prop.Value.Data == null || prop.Value.Data.Length == 0) { continue; } switch (prop.Key) { case MessageProperty.Importance: Imporance = (Importance)BitConverter.ToInt16(prop.Value.Data, 0); break; case MessageProperty.Sensitivity: Sensitivity = (Sensitivity)BitConverter.ToInt16(prop.Value.Data, 0); break; case MessageProperty.Subject: Subject = pst.Header.isUnicode ? Encoding.Unicode.GetString(prop.Value.Data) : Encoding.ASCII.GetString(prop.Value.Data); if (Subject.Length > 0) { var chars = Subject.ToCharArray(); if (chars[0] == 0x1) { /* * // for skipping past "Re:", "Fwd:", etc. * var length = (int)chars[1]; * int i = 0; * if (length > 1) * i++; * SubjectPrefix = Subject.Substring(2, length-1); * Subject = Subject.Substring(2 + length-1); */ Subject = Subject.Substring(2); } } break; case MessageProperty.ClientSubmitTime: ClientSubmitTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case MessageProperty.SentRepresentingName: SentRepresentingName = pst.Header.isUnicode ? Encoding.Unicode.GetString(prop.Value.Data) : Encoding.ASCII.GetString(prop.Value.Data); break; case MessageProperty.ConversationTopic: ConversationTopic = pst.Header.isUnicode ? Encoding.Unicode.GetString(prop.Value.Data) : Encoding.ASCII.GetString(prop.Value.Data); break; case MessageProperty.MessageClass: MessageClass = pst.Header.isUnicode ? Encoding.Unicode.GetString(prop.Value.Data) : Encoding.ASCII.GetString(prop.Value.Data); break; case MessageProperty.SenderName: SenderName = pst.Header.isUnicode ? Encoding.Unicode.GetString(prop.Value.Data) : Encoding.ASCII.GetString(prop.Value.Data); break; case MessageProperty.MessageDeliveryTime: MessageDeliveryTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case MessageProperty.MessageFlags: MessageFlags = BitConverter.ToUInt32(prop.Value.Data, 0); Read = (MessageFlags & 0x1) != 0; Unsent = (MessageFlags & 0x8) != 0; Unmodified = (MessageFlags & 0x2) != 0; HasAttachments = (MessageFlags & 0x10) != 0; FromMe = (MessageFlags & 0x20) != 0; IsFAI = (MessageFlags & 0x40) != 0; NotifyReadRequested = (MessageFlags & 0x100) != 0; NotifyUnreadRequested = (MessageFlags & 0x200) != 0; EverRead = (MessageFlags & 0x400) != 0; break; case MessageProperty.MessageSize: MessageSize = BitConverter.ToUInt32(prop.Value.Data, 0); break; case MessageProperty.InternetArticleNumber: InternetArticleNumber = BitConverter.ToUInt32(prop.Value.Data, 0); break; case MessageProperty.AttributeHidden: AttributeHidden = prop.Value.Data[0] == 0x01; break; case MessageProperty.ReadOnly: ReadOnly = prop.Value.Data[0] == 0x01; break; case MessageProperty.CreationTime: CreationTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case MessageProperty.LastModificationTime: LastModificationTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case MessageProperty.CodePage: CodePage = BitConverter.ToUInt32(prop.Value.Data, 0); break; case MessageProperty.NonUnicodeCodePage: NonUnicodeCodePage = BitConverter.ToUInt32(prop.Value.Data, 0); break; default: break; } } }
public bool Insert(BlockBO block) { return(_db.Add(block)); }
public PropertyContext(ulong nid, PSTFile pst) : this(BlockBO.GetNodeData(nid, pst)) => NID = nid;
public Message(uint NID, IPMItem item, PSTFile pst) { this._IPMItem = item; this.Data = BlockBO.GetNodeData(NID, pst); this.NID = NID; //this.MessagePC = new PropertyContext(this.Data); foreach (var subNode in this.Data.SubNodeData) { var temp = new NID(subNode.Key); switch (temp.Type) { case NDB.NID.NodeType.ATTACHMENT_TABLE: this.AttachmentTable = new TableContext(subNode.Value); break; case NDB.NID.NodeType.ATTACHMENT_PC: this.AttachmentPC = new PropertyContext(subNode.Value); this.Attachments = new List <Attachment>(); foreach (var row in this.AttachmentTable.RowMatrix.Rows) { this.Attachments.Add(new Attachment(row)); } break; case NDB.NID.NodeType.RECIPIENT_TABLE: this.RecipientTable = new TableContext(subNode.Value); foreach (var row in this.RecipientTable.RowMatrix.Rows) { var recipient = new Recipient(row); switch (recipient.Type) { case Recipient.RecipientType.TO: this.To.Add(recipient); break; case Recipient.RecipientType.FROM: this.From.Add(recipient); break; case Recipient.RecipientType.CC: this.CC.Add(recipient); break; case Recipient.RecipientType.BCC: this.BCC.Add(recipient); break; } } break; } } foreach (var prop in this._IPMItem.PC.Properties) { if (prop.Value.Data == null) { continue; } switch (prop.Key) { case 0x17: this.Imporance = (Importance)BitConverter.ToInt16(prop.Value.Data, 0); break; case 0x36: this.Sensitivity = (Sensitivity)BitConverter.ToInt16(prop.Value.Data, 0); break; case 0x37: this.Subject = Encoding.Unicode.GetString(prop.Value.Data); if (this.Subject.Length > 0) { var chars = this.Subject.ToCharArray(); if (chars[0] == 0x001) { var length = (int)chars[1]; int i = 0; if (length > 1) { i++; } this.SubjectPrefix = this.Subject.Substring(2, length - 1); this.Subject = this.Subject.Substring(2 + length - 1); } } break; case 0x39: this.ClientSubmitTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case 0x42: this.SentRepresentingName = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x70: this.ConversationTopic = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x1a: this.MessageClass = Encoding.Unicode.GetString(prop.Value.Data); break; case 0xc1a: this.SenderName = Encoding.Unicode.GetString(prop.Value.Data); break; case 0xe06: this.MessageDeliveryTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case 0xe07: this.MessageFlags = BitConverter.ToUInt32(prop.Value.Data, 0); this.Read = (this.MessageFlags & 0x1) != 0; this.Unsent = (this.MessageFlags & 0x8) != 0; this.Unmodified = (this.MessageFlags & 0x2) != 0; this.HasAttachments = (this.MessageFlags & 0x10) != 0; this.FromMe = (this.MessageFlags & 0x20) != 0; this.IsFAI = (this.MessageFlags & 0x40) != 0; this.NotifyReadRequested = (this.MessageFlags & 0x100) != 0; this.NotifyUnreadRequested = (this.MessageFlags & 0x200) != 0; this.EverRead = (this.MessageFlags & 0x400) != 0; break; case 0xe08: this.MessageSize = BitConverter.ToUInt32(prop.Value.Data, 0); break; case 0xe23: this.InternetArticalNumber = BitConverter.ToUInt32(prop.Value.Data, 0); break; case 0xe27: //unknown break; case 0xe29: //nextSentAccount, ignore this, string break; case 0xe62: //unknown break; case 0xe79: //trusted sender break; case 0x1000: this.BodyPlainText = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x1009: this.BodyCompressedRTF = prop.Value.Data.RangeSubset(4, prop.Value.Data.Length - 4); break; case 0x1035: this.InternetMessageID = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x10F3: this.UrlCompositeName = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x10F4: this.AttributeHidden = prop.Value.Data[0] == 0x01; break; case 0x10F5: //unknown break; case 0x10F6: this.ReadOnly = prop.Value.Data[0] == 0x01; break; case 0x3007: this.CreationTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case 0x3008: this.LastModificationTime = DateTime.FromFileTimeUtc(BitConverter.ToInt64(prop.Value.Data, 0)); break; case 0x300B: //seach key break; case 0x3fDE: this.CodePage = BitConverter.ToUInt32(prop.Value.Data, 0); break; case 0x3ff1: //localeID break; case 0x3ff8: this.CreatorName = Encoding.Unicode.GetString(prop.Value.Data); break; case 0x3ff9: //creator entryid break; case 0x3ffa: //last modifier name break; case 0x3ffb: //last modifier entryid break; case 0x3ffd: this.NonUnicodeCodePage = BitConverter.ToUInt32(prop.Value.Data, 0); break; case 0x4019: //unknown break; case 0x401a: //sentrepresentingflags break; case 0x619: //userentryid break; default: break; } } }
public IPMItem(PSTFile pst, Tuple <ulong, ulong> nodeBIDs) { PC = new PropertyContext(BlockBO.GetNodeData(nodeBIDs, pst)); GetMessageClass(pst); }
public TableContext(ulong nid, PSTFile pst) : this(BlockBO.GetNodeData(nid, pst)) { }