Package com.pff
Class PSTObject
- java.lang.Object
-
- com.pff.PSTObject
-
- Direct Known Subclasses:
PSTAttachment,PSTFolder,PSTMessage,PSTMessageStore
public class PSTObject extends java.lang.ObjectPST 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 Summary
Fields Modifier and Type Field Description protected java.util.LinkedHashMap<java.lang.String,java.util.HashMap<DescriptorIndexNode,PSTObject>>children(package private) static int[]compEncStatic stuff below ------------------protected byte[]dataprotected DescriptorIndexNodedescriptorIndexNodeprivate static longEPOCH_DIFFThe difference between the Windows epoch (1601-01-01 00:00:00) and the Unix epoch (1970-01-01 00:00:00) in milliseconds: 11644473600000L.protected java.util.HashMap<java.lang.Integer,PSTTableBCItem>itemsprotected java.util.HashMap<java.lang.Integer,PSTDescriptorItem>localDescriptorItemsstatic intNID_TYPE_ASSOC_CONTENTS_TABLEstatic intNID_TYPE_ASSOC_MESSAGEstatic intNID_TYPE_ATTACHMENTstatic intNID_TYPE_ATTACHMENT_TABLEstatic intNID_TYPE_CONTENTS_TABLEstatic intNID_TYPE_CONTENTS_TABLE_INDEXstatic intNID_TYPE_HIDstatic intNID_TYPE_HIERARCHY_TABLEstatic intNID_TYPE_INTERNALstatic intNID_TYPE_LTPstatic intNID_TYPE_NORMAL_FOLDERstatic intNID_TYPE_NORMAL_MESSAGEstatic intNID_TYPE_OUTGOING_QUEUE_TABLEstatic intNID_TYPE_RECEIVE_FOLDER_TABLEstatic intNID_TYPE_RECIPIENT_TABLEstatic intNID_TYPE_SEARCH_CONTENTS_TABLEstatic intNID_TYPE_SEARCH_CRITERIA_OBJECTstatic intNID_TYPE_SEARCH_FOLDERstatic intNID_TYPE_SEARCH_TABLE_INDEXstatic intNID_TYPE_SEARCH_UPDATE_QUEUEprotected PSTFilepstFileprotected PSTTableBCtable
-
Constructor Summary
Constructors Modifier Constructor Description protectedPSTObject(PSTFile theFile, DescriptorIndexNode descriptorIndexNode)protectedPSTObject(PSTFile theFile, DescriptorIndexNode folderIndexNode, PSTTableBC table, java.util.HashMap<java.lang.Integer,PSTDescriptorItem> localDescriptorItems)for pre-population
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static java.util.CalendarapptTimeToCalendar(int minutes)static java.util.CalendarapptTimeToUTC(int minutes, PSTTimeZone tz)static longconvertBigEndianBytesToLong(byte[] data, int start, int end)Utility function for converting big endian bytes into a usable java longstatic longconvertLittleEndianBytesToLong(byte[] data)Utility function for converting little endian bytes into a usable java longstatic longconvertLittleEndianBytesToLong(byte[] data, int start, int end)Utility function for converting little endian bytes into a usable java long(package private) static PSTMessagecreateAppropriatePSTMessageObject(PSTFile theFile, DescriptorIndexNode folderIndexNode, PSTTableBC table, java.util.HashMap<java.lang.Integer,PSTDescriptorItem> localDescriptorItems)(package private) static java.lang.StringcreateJavaString(byte[] data, int stringType, java.lang.String codepage)protected static byte[]decode(byte[] data)decode a lump of data that has been encrypted with the compressible encryptionstatic PSTObjectdetectAndLoadPSTObject(PSTFile theFile, long descriptorIndex)Detect and load a PST Object from a file with the specified descriptor index(package private) static PSTObjectdetectAndLoadPSTObject(PSTFile theFile, DescriptorIndexNode folderIndexNode)Detect and load a PST Object from a file with the specified descriptor indexprotected static byte[]encode(byte[] data)protected static java.util.DatefiletimeToDate(int high, int low)Converts a Windows FILETIME into aDate.java.lang.StringgetAddrType()Address type Known values are SMTP, EX (Exchange) and UNKNOWNprotected byte[]getBinaryItem(int identifier)protected booleangetBooleanItem(int identifier)protected booleangetBooleanItem(int identifier, boolean defaultValue)java.lang.StringgetComment()Commentjava.util.DategetCreationTime()Creation timejava.util.DategetDateItem(int identifier)DescriptorIndexNodegetDescriptorNode()get the descriptor node for this item this identifies the location of the node in the BTree and associated infolonggetDescriptorNodeId()get the descriptor identifier for this item can be used for loading objects through detectAndLoadPSTObject(PSTFile theFile, long descriptorIndex)java.lang.StringgetDisplayName()get the display nameprotected doublegetDoubleItem(int identifier)protected doublegetDoubleItem(int identifier, double defaultValue)java.lang.StringgetEmailAddress()E-mail addressprotected intgetIntItem(int identifier)protected intgetIntItem(int identifier, int defaultValue)java.lang.StringgetItemsString()java.util.DategetLastModificationTime()Modification timeprotected longgetLongItem(int identifier)protected longgetLongItem(int identifier, long defaultValue)java.lang.StringgetMessageClass()intgetNodeType()static intgetNodeType(int descriptorIdentifier)private java.lang.StringgetStringCodepage()protected java.lang.StringgetStringItem(int identifier)protected java.lang.StringgetStringItem(int identifier, int stringType)protected java.lang.StringgetStringItem(int identifier, int stringType, java.lang.String codepage)protected PSTTimeZonegetTimeZoneItem(int identifier)(package private) static java.lang.StringguessPSTObjectType(PSTFile theFile, DescriptorIndexNode folderIndexNode)static voidprintFormattedNumber(long number)static voidprintFormattedNumber(java.lang.String pref, long number)Output a number in a variety of formats for easier consumptionstatic voidprintHexFormatted(byte[] data, boolean pretty)Output a dump of data in hex format in the order it was read inprotected static voidprintHexFormatted(byte[] data, boolean pretty, int[] indexes)java.lang.StringtoString()
-
-
-
Field Detail
-
NID_TYPE_HID
public static final int NID_TYPE_HID
- See Also:
- Constant Field Values
-
NID_TYPE_INTERNAL
public static final int NID_TYPE_INTERNAL
- See Also:
- Constant Field Values
-
NID_TYPE_NORMAL_FOLDER
public static final int NID_TYPE_NORMAL_FOLDER
- See Also:
- Constant Field Values
-
NID_TYPE_SEARCH_FOLDER
public static final int NID_TYPE_SEARCH_FOLDER
- See Also:
- Constant Field Values
-
NID_TYPE_NORMAL_MESSAGE
public static final int NID_TYPE_NORMAL_MESSAGE
- See Also:
- Constant Field Values
-
NID_TYPE_ATTACHMENT
public static final int NID_TYPE_ATTACHMENT
- 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_ASSOC_MESSAGE
public static final int NID_TYPE_ASSOC_MESSAGE
- 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
-
NID_TYPE_LTP
public static final int NID_TYPE_LTP
- See Also:
- Constant Field Values
-
pstFile
protected PSTFile pstFile
-
data
protected byte[] data
-
descriptorIndexNode
protected DescriptorIndexNode descriptorIndexNode
-
items
protected java.util.HashMap<java.lang.Integer,PSTTableBCItem> items
-
localDescriptorItems
protected java.util.HashMap<java.lang.Integer,PSTDescriptorItem> localDescriptorItems
-
children
protected java.util.LinkedHashMap<java.lang.String,java.util.HashMap<DescriptorIndexNode,PSTObject>> children
-
table
protected PSTTableBC table
-
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
-
-
Constructor Detail
-
PSTObject
protected PSTObject(PSTFile theFile, DescriptorIndexNode descriptorIndexNode) throws PSTException, java.io.IOException
- Throws:
PSTExceptionjava.io.IOException
-
PSTObject
protected PSTObject(PSTFile theFile, DescriptorIndexNode folderIndexNode, PSTTableBC table, java.util.HashMap<java.lang.Integer,PSTDescriptorItem> localDescriptorItems)
for pre-population- Parameters:
theFile-folderIndexNode-table-
-
-
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:
toStringin classjava.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.IOExceptionPSTException
-
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.IOExceptionPSTException
-
createAppropriatePSTMessageObject
static PSTMessage createAppropriatePSTMessageObject(PSTFile theFile, DescriptorIndexNode folderIndexNode, PSTTableBC table, java.util.HashMap<java.lang.Integer,PSTDescriptorItem> localDescriptorItems)
-
guessPSTObjectType
static java.lang.String guessPSTObjectType(PSTFile theFile, DescriptorIndexNode folderIndexNode) throws java.io.IOException, PSTException
- Throws:
java.io.IOExceptionPSTException
-
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)
-
-