Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public static HN GetHeapNode(ulong NID, PSTFile pst)
 {
     return(new HN(BlockBO.GetNodeData(NID, pst)));
 }
Esempio n. 4
0
        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;
                }
            }
        }
Esempio n. 5
0
 public bool Insert(BlockBO block)
 {
     return(_db.Add(block));
 }
Esempio n. 6
0
 public PropertyContext(ulong nid, PSTFile pst) : this(BlockBO.GetNodeData(nid, pst)) => NID = nid;
Esempio n. 7
0
        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;
                }
            }
        }
Esempio n. 8
0
 public IPMItem(PSTFile pst, Tuple <ulong, ulong> nodeBIDs)
 {
     PC = new PropertyContext(BlockBO.GetNodeData(nodeBIDs, pst));
     GetMessageClass(pst);
 }
Esempio n. 9
0
 public TableContext(ulong nid, PSTFile pst)
     : this(BlockBO.GetNodeData(nid, pst))
 {
 }