Package com.pff

Class PSTObject

  • Direct Known Subclasses:
    PSTAttachment, PSTFolder, PSTMessage, PSTMessageStore

    public class PSTObject
    extends java.lang.Object
    PST Object is the root class of all PST Items. It also provides a number of static utility functions. The most important of which is the detectAndLoadPSTObject call which allows extraction of a PST Item from the file.
    • Field Detail

      • NID_TYPE_NORMAL_MESSAGE

        public static final int NID_TYPE_NORMAL_MESSAGE
        See Also:
        Constant Field Values
      • NID_TYPE_SEARCH_UPDATE_QUEUE

        public static final int NID_TYPE_SEARCH_UPDATE_QUEUE
        See Also:
        Constant Field Values
      • NID_TYPE_SEARCH_CRITERIA_OBJECT

        public static final int NID_TYPE_SEARCH_CRITERIA_OBJECT
        See Also:
        Constant Field Values
      • NID_TYPE_CONTENTS_TABLE_INDEX

        public static final int NID_TYPE_CONTENTS_TABLE_INDEX
        See Also:
        Constant Field Values
      • NID_TYPE_RECEIVE_FOLDER_TABLE

        public static final int NID_TYPE_RECEIVE_FOLDER_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_OUTGOING_QUEUE_TABLE

        public static final int NID_TYPE_OUTGOING_QUEUE_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_HIERARCHY_TABLE

        public static final int NID_TYPE_HIERARCHY_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_CONTENTS_TABLE

        public static final int NID_TYPE_CONTENTS_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_ASSOC_CONTENTS_TABLE

        public static final int NID_TYPE_ASSOC_CONTENTS_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_SEARCH_CONTENTS_TABLE

        public static final int NID_TYPE_SEARCH_CONTENTS_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_ATTACHMENT_TABLE

        public static final int NID_TYPE_ATTACHMENT_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_RECIPIENT_TABLE

        public static final int NID_TYPE_RECIPIENT_TABLE
        See Also:
        Constant Field Values
      • NID_TYPE_SEARCH_TABLE_INDEX

        public static final int NID_TYPE_SEARCH_TABLE_INDEX
        See Also:
        Constant Field Values
      • pstFile

        protected PSTFile pstFile
      • data

        protected byte[] data
      • items

        protected java.util.HashMap<java.lang.Integer,​PSTTableBCItem> items
      • localDescriptorItems

        protected java.util.HashMap<java.lang.Integer,​PSTDescriptorItem> localDescriptorItems
      • compEnc

        static int[] compEnc
        Static stuff below ------------------
      • EPOCH_DIFF

        private static final long EPOCH_DIFF

        The difference between the Windows epoch (1601-01-01 00:00:00) and the Unix epoch (1970-01-01 00:00:00) in milliseconds: 11644473600000L. (Use your favorite spreadsheet program to verify the correctness of this value. By the way, did you notice that you can tell from the epochs which operating system is the modern one? :-))

        See Also:
        Constant Field Values
    • Method Detail

      • getItemsString

        public java.lang.String getItemsString()
      • getDescriptorNode

        public DescriptorIndexNode getDescriptorNode()
        get the descriptor node for this item this identifies the location of the node in the BTree and associated info
        Returns:
        item's descriptor node
      • getDescriptorNodeId

        public long getDescriptorNodeId()
        get the descriptor identifier for this item can be used for loading objects through detectAndLoadPSTObject(PSTFile theFile, long descriptorIndex)
        Returns:
        item's descriptor node identifier
      • getNodeType

        public int getNodeType()
      • getNodeType

        public static int getNodeType​(int descriptorIdentifier)
      • getIntItem

        protected int getIntItem​(int identifier)
      • getIntItem

        protected int getIntItem​(int identifier,
                                 int defaultValue)
      • getBooleanItem

        protected boolean getBooleanItem​(int identifier)
      • getBooleanItem

        protected boolean getBooleanItem​(int identifier,
                                         boolean defaultValue)
      • getDoubleItem

        protected double getDoubleItem​(int identifier)
      • getDoubleItem

        protected double getDoubleItem​(int identifier,
                                       double defaultValue)
      • getLongItem

        protected long getLongItem​(int identifier)
      • getLongItem

        protected long getLongItem​(int identifier,
                                   long defaultValue)
      • getStringItem

        protected java.lang.String getStringItem​(int identifier)
      • getStringItem

        protected java.lang.String getStringItem​(int identifier,
                                                 int stringType)
      • getStringItem

        protected java.lang.String getStringItem​(int identifier,
                                                 int stringType,
                                                 java.lang.String codepage)
      • createJavaString

        static java.lang.String createJavaString​(byte[] data,
                                                 int stringType,
                                                 java.lang.String codepage)
      • getStringCodepage

        private java.lang.String getStringCodepage()
      • getDateItem

        public java.util.Date getDateItem​(int identifier)
      • getBinaryItem

        protected byte[] getBinaryItem​(int identifier)
      • getTimeZoneItem

        protected PSTTimeZone getTimeZoneItem​(int identifier)
      • getMessageClass

        public java.lang.String getMessageClass()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getDisplayName

        public java.lang.String getDisplayName()
        get the display name
      • getAddrType

        public java.lang.String getAddrType()
        Address type Known values are SMTP, EX (Exchange) and UNKNOWN
      • getEmailAddress

        public java.lang.String getEmailAddress()
        E-mail address
      • getComment

        public java.lang.String getComment()
        Comment
      • getCreationTime

        public java.util.Date getCreationTime()
        Creation time
      • getLastModificationTime

        public java.util.Date getLastModificationTime()
        Modification time
      • printFormattedNumber

        public static void printFormattedNumber​(java.lang.String pref,
                                                long number)
        Output a number in a variety of formats for easier consumption
        Parameters:
        data -
      • printFormattedNumber

        public static void printFormattedNumber​(long number)
      • printHexFormatted

        public static void printHexFormatted​(byte[] data,
                                             boolean pretty)
        Output a dump of data in hex format in the order it was read in
        Parameters:
        data -
        pretty -
      • printHexFormatted

        protected static void printHexFormatted​(byte[] data,
                                                boolean pretty,
                                                int[] indexes)
      • decode

        protected static byte[] decode​(byte[] data)
        decode a lump of data that has been encrypted with the compressible encryption
        Parameters:
        data -
        Returns:
        decoded data
      • encode

        protected static byte[] encode​(byte[] data)
      • convertLittleEndianBytesToLong

        public static long convertLittleEndianBytesToLong​(byte[] data)
        Utility function for converting little endian bytes into a usable java long
        Parameters:
        data -
        Returns:
        long version of the data
      • convertLittleEndianBytesToLong

        public static long convertLittleEndianBytesToLong​(byte[] data,
                                                          int start,
                                                          int end)
        Utility function for converting little endian bytes into a usable java long
        Parameters:
        data -
        start -
        end -
        Returns:
        long version of the data
      • convertBigEndianBytesToLong

        public static long convertBigEndianBytesToLong​(byte[] data,
                                                       int start,
                                                       int end)
        Utility function for converting big endian bytes into a usable java long
        Parameters:
        data -
        start -
        end -
        Returns:
        long version of the data
      • detectAndLoadPSTObject

        public static PSTObject detectAndLoadPSTObject​(PSTFile theFile,
                                                       long descriptorIndex)
                                                throws java.io.IOException,
                                                       PSTException
        Detect and load a PST Object from a file with the specified descriptor index
        Parameters:
        theFile -
        descriptorIndex -
        Returns:
        PSTObject with that index
        Throws:
        java.io.IOException
        PSTException
      • detectAndLoadPSTObject

        static PSTObject detectAndLoadPSTObject​(PSTFile theFile,
                                                DescriptorIndexNode folderIndexNode)
                                         throws java.io.IOException,
                                                PSTException
        Detect and load a PST Object from a file with the specified descriptor index
        Parameters:
        theFile -
        folderIndexNode -
        Returns:
        PSTObject with that index
        Throws:
        java.io.IOException
        PSTException
      • filetimeToDate

        protected static java.util.Date filetimeToDate​(int high,
                                                       int low)

        Converts a Windows FILETIME into a Date. The Windows FILETIME structure holds a date and time associated with a file. The structure identifies a 64-bit integer specifying the number of 100-nanosecond intervals which have passed since January 1, 1601. This 64-bit value is split into the two double words stored in the structure.

        Parameters:
        high - The higher double word of the FILETIME structure.
        low - The lower double word of the FILETIME structure.
        Returns:
        The Windows FILETIME as a Date.
      • apptTimeToCalendar

        public static java.util.Calendar apptTimeToCalendar​(int minutes)
      • apptTimeToUTC

        public static java.util.Calendar apptTimeToUTC​(int minutes,
                                                       PSTTimeZone tz)