Fairport  v1.0.38
fairport Namespace Reference

Contains the definition of all in memory representations of disk structures. More...

Namespaces

namespace  detail
namespace  disk
 

Contains the definition of all structures as persisted to disk.


Classes

class  hid_stream_device
 Defines a stream device for a heap allocation for use by boost iostream. More...
class  heap_impl
 The HN implementation. More...
class  heap
 Heap-on-Node implementation. More...
class  bth_node
 The object which forms the root of the BTH hierarchy. More...
class  bth_nonleaf_node
 Contains references to other bth_node allocations. More...
class  bth_leaf_node
 Contains the actual key value pairs of the BTH. More...
class  named_prop
 A named property. More...
class  name_id_map
 A named property map abstraction. More...
class  hnid_stream_device
 Defines a stream device which can wrap one of the two prop sources. More...
class  const_property_object
 Property object base class. More...
class  property_bag
 Property Context (PC) Implementation. More...
class  const_table_row
 An abstraction of a table row. More...
class  const_table_row_iter
 The iterator type exposed by the table for row iteration. More...
class  table_impl
 Table implementation. More...
class  empty_table
 Null table implementation. More...
class  basic_table
 Implementation of an ANSI TC (64k rows) and a unicode TC. More...
class  table
 The actual table object that clients reference. More...
class  database_impl
 PST implementation. More...
struct  block_info
 An in memory, database format agnostic version of disk::bbt_leaf_entry. More...
struct  page_info
 An in memory, database format agnostic version of disk::block_reference used specifically for the page class hierarchy. More...
struct  node_info
 An in memory, database format agnostic version of disk::nbt_leaf_entry. More...
struct  subnode_info
 An in memory, database format agnostic version of disk::sub_leaf_entry. More...
class  db_context
 Database external interface. More...
class  node_impl
 The node implementation. More...
class  subnode_transform_info
 Defines a transform from a subnode_info to an actual node object. More...
class  node_stream_device
 Defines a stream device for a node for use by boost iostream. More...
class  node
 An in memory representation of the "node" concept in a PST data file. More...
class  block
 The base class of the block class hierarchy. More...
class  data_block
 A block which represents end user data. More...
class  extended_block
 A data block which refers to other data blocks, in order to extend the physical size limit (8k) to a larger logical size. More...
class  external_block
 Contains actual data. More...
class  subnode_block
 A block which contains information about subnodes. More...
class  subnode_nonleaf_block
 Contains references to subnode_leaf_blocks. More...
class  subnode_leaf_block
 Contains the actual subnode information. More...
class  page
 Generic base class for all page typesA page which forms a node in the NBT or BBT. More...
class  bt_page
class  bt_nonleaf_page
 Contains references to other bt_pages. More...
class  bt_leaf_page
 Contains the actual key value pairs of the btree. More...
class  contact
 Encapsulates a contact. More...
class  search_folder
 Search Folder object. More...
class  folder
 A folder in a PST file. More...
class  attachment
 Encapsulates an attachment to a message. More...
class  attachment_transform
 Defines a transform from a row to an attachment object. More...
class  recipient
 A recipient of a message. More...
struct  recipient_transform
 Defines a transform from a row to a recipient object. More...
class  message
 Represents a message in a PST file. More...
class  pst
 A PST file. More...
class  task
 Encapsulates a task. More...
class  btree_node
 A BTree Node. More...
class  btree_node_leaf
 Represents a leaf node in a BTree structure. More...
class  btree_node_nonleaf
 Represents a non-leaf node in a BTree structure. More...
struct  btree_iter_impl
 BTree iterator helper class. More...
class  const_btree_node_iter
 The actual iterator type used by the btree_node class hierarchy. More...
class  not_implemented
 This function or method has not been implemented. More...
class  database_corrupt
 The database is corrupt. More...
class  invalid_format
 The database was not in the expected format. More...
class  unexpected_page
 An unexpected page or page type was encountered. More...
class  unexpected_block
 An unexpected block or block type was encountered. More...
class  crc_fail
 A CRC of an item failed. More...
class  sig_mismatch
 An unexpected signature was encountered. More...
class  key_not_found
 The requested key was not found. More...
struct  guid
 A Win32 GUID structure. More...
class  file
 A generic class to read and write to a file. More...

Typedefs

typedef std::tr1::shared_ptr
< heap_impl
heap_ptr
typedef
boost::iostreams::stream
< hid_stream_device
hid_stream
 The actual heap allocation stream, defined using the boost iostream library and the hid_stream_device.
typedef
boost::iostreams::stream
< hnid_stream_device
prop_stream
 The actual property stream, defined using the boost iostream library and the hnid_stream_device.
typedef bth_node< prop_id,
disk::prop_entry
pc_bth_node
typedef bth_nonleaf_node
< prop_id, disk::prop_entry
pc_bth_nonleaf_node
typedef bth_leaf_node< prop_id,
disk::prop_entry
pc_bth_leaf_node
typedef std::tr1::shared_ptr
< table_impl
table_ptr
typedef std::tr1::shared_ptr
< const table_impl
const_table_ptr
typedef basic_table< ushortsmall_table
typedef basic_table< ulonglarge_table
typedef database_impl< ulonglonglarge_pst
typedef database_impl< ulongsmall_pst
typedef bt_page< node_id,
node_info
nbt_page
typedef bt_page< block_id,
block_info
bbt_page
typedef bt_nonleaf_page
< node_id, node_info
nbt_nonleaf_page
typedef bt_nonleaf_page
< block_id, block_info
bbt_nonleaf_page
typedef bt_leaf_page< node_id,
node_info
nbt_leaf_page
typedef bt_leaf_page< block_id,
block_info
bbt_leaf_page
typedef const_btree_node_iter
< node_id, node_info
const_nodeinfo_iterator
typedef const_btree_node_iter
< node_id, subnode_info
const_subnodeinfo_iterator
typedef const_btree_node_iter
< block_id, block_info
const_blockinfo_iterator
typedef std::tr1::shared_ptr
< db_context
shared_db_ptr
typedef std::tr1::weak_ptr
< db_context
weak_db_ptr
typedef
boost::iostreams::stream
< node_stream_device
node_stream
 The actual node stream, defined using the boost iostream library and the node_stream_device.
typedef
detail::item_transform_row
< contact
contact_transform_row
typedef
detail::item_transform_row
< folder
folder_transform_row
typedef
detail::item_transform_row
< search_folder
search_folder_transform_row
typedef
detail::item_transform_info
< folder
folder_transform_info
typedef
detail::item_transform_row
< message
message_transform_row
typedef
detail::item_transform_info
< message
message_transform_info
typedef
detail::item_transform_row
< task
task_transform_row
typedef boost::uint32_t uint
typedef boost::uint32_t ulong
typedef boost::int32_t slong
typedef boost::uint64_t ulonglong
typedef boost::int64_t slonglong
typedef boost::uint8_t byte
typedef boost::uint16_t ushort
typedef ulong node_id
typedef ulonglong block_id
typedef block_id page_id
typedef ulong heap_id
typedef ulong heapnode_id
typedef ushort prop_id
typedef ulong row_id

Enumerations

enum  nid_type {
  nid_type_none = 0x00, nid_type_internal = 0x01, nid_type_folder = 0x02, nid_type_search_folder = 0x03,
  nid_type_message = 0x04, nid_type_attachment = 0x05, nid_type_search_update_queue = 0x06, nid_type_search_criteria_object = 0x07,
  nid_type_associated_message = 0x08, nid_type_storage = 0x09, nid_type_contents_table_index = 0x0A, nid_type_receive_folder_table = 0x0B,
  nid_type_outgoing_queue_table = 0x0C, nid_type_hierarchy_table = 0x0D, nid_type_contents_table = 0x0E, nid_type_associated_contents_table = 0x0F,
  nid_type_search_contents_table = 0x10, nid_type_attachment_table = 0x11, nid_type_recipient_table = 0x12, nid_type_search_table_index = 0x13,
  nid_type_contents_smp = 0x14, nid_type_associated_contents_smp = 0x15, nid_type_change_history_table = 0x16, nid_type_tombstone_table = 0x17,
  nid_type_tombstone_date_table = 0x18, nid_type_lrep_dups_table = 0x19, nid_type_folder_path_tombstone_table = 0x1A, nid_type_ltp = 0x1F,
  nid_type_max = 0x20
}
 Different node types found in a PST file. More...
enum  predefined_nid {
  nid_message_store = make_nid(nid_type_internal, 0x1), nid_name_id_map = make_nid(nid_type_internal, 0x3), nid_normal_folder_template = make_nid(nid_type_folder, 0x6), nid_search_folder_template = make_nid(nid_type_search_folder, 0x7),
  nid_root_folder = make_nid(nid_type_folder, 0x9), nid_search_management_queue = make_nid(nid_type_internal, 0xF), nid_search_activity_list = make_nid(nid_type_internal, 0x10), nid_search_domain_alternative = make_nid(nid_type_internal, 0x12),
  nid_search_domain_object = make_nid(nid_type_internal, 0x13), nid_search_gatherer_queue = make_nid(nid_type_internal, 0x14), nid_search_gatherer_descriptor = make_nid(nid_type_internal, 0x15), nid_table_rebuild_queue = make_nid(nid_type_internal, 0x17),
  nid_junk_mail_pihsl = make_nid(nid_type_internal, 0x18), nid_search_gatherer_folder_queue = make_nid(nid_type_internal, 0x19), nid_tc_sub_props = make_nid(nid_type_internal, 0x27), nid_index_template = 0x30,
  nid_hierarchy_table_template = make_nid(nid_type_hierarchy_table, nid_index_template), nid_contents_table_template = make_nid(nid_type_contents_table, nid_index_template), nid_associated_contents_table_template = make_nid(nid_type_associated_contents_table, nid_index_template), nid_search_contents_table_template = make_nid(nid_type_search_contents_table, nid_index_template),
  nid_smp_template = make_nid(nid_type_contents_smp, nid_index_template), nid_tombstone_table_template = make_nid(nid_type_tombstone_table, nid_index_template), nid_lrep_dups_table_template = make_nid(nid_type_lrep_dups_table, nid_index_template), nid_receive_folders = make_nid(nid_type_receive_folder_table, 0x31),
  nid_outgoing_queue = make_nid(nid_type_outgoing_queue_table, 0x32), nid_attachment_table = make_nid(nid_type_attachment_table, 0x33), nid_recipient_table = make_nid(nid_type_recipient_table, 0x34), nid_change_history_table = make_nid(nid_type_change_history_table, 0x35),
  nid_tombstone_table = make_nid(nid_type_tombstone_table, 0x36), nid_tombstone_date_table = make_nid(nid_type_tombstone_date_table, 0x37), nid_all_message_search_folder = make_nid(nid_type_search_folder, 0x39), nid_all_message_search_contents = make_nid(nid_type_search_contents_table, 0x39),
  nid_lrep_gmp = make_nid(nid_type_internal, 0x40), nid_lrep_folders_smp = make_nid(nid_type_internal, 0x41), nid_lrep_folders_table = make_nid(nid_type_internal, 0x42), nid_folder_path_tombstone_table = make_nid(nid_type_internal, 0x43),
  nid_hst_hmp = make_nid(nid_type_internal, 0x60), nid_index_prv_pub_base = 0x100, nid_pub_root_folder = make_prv_pub_nid(0), nid_prv_root_folder = make_prv_pub_nid(5),
  nid_criterr_notification = make_nid(nid_type_internal, 0x3FD), nid_object_notification = make_nid(nid_type_internal, 0x3FE), nid_newemail_notification = make_nid(nid_type_internal, 0x3FF), nid_extended_notification = make_nid(nid_type_internal, 0x400),
  nid_indexing_notification = make_nid(nid_type_internal, 0x401)
}
 The predefined nodes in a PST/OST file. More...
enum  prop_type {
  prop_type_unspecified = 0, prop_type_null = 1, prop_type_short = 2, prop_type_mv_short = 4098,
  prop_type_long = 3, prop_type_mv_long = 4099, prop_type_float = 4, prop_type_mv_float = 4100,
  prop_type_double = 5, prop_type_mv_double = 4101, prop_type_currency = 6, prop_type_mv_currency = 4102,
  prop_type_apptime = 7, prop_type_mv_apptime = 4103, prop_type_error = 10, prop_type_boolean = 11,
  prop_type_object = 13, prop_type_longlong = 20, prop_type_mv_longlong = 4116, prop_type_string = 30,
  prop_type_mv_string = 4126, prop_type_wstring = 31, prop_type_mv_wstring = 4127, prop_type_systime = 64,
  prop_type_mv_systime = 4160, prop_type_guid = 72, prop_type_mv_guid = 4168, prop_type_binary = 258,
  prop_type_mv_binary = 4354
}
 The different property types as defined by MAPI. More...
enum  recipient_type { mapi_to = 1, mapi_cc = 2, mapi_bcc = 3 }
 The different recipient types as defined by MAPI. More...

Functions

template<>
boost::posix_time::ptime const_property_object::read_prop< boost::posix_time::ptime > (prop_id id) const
template<>
std::vector
< boost::posix_time::ptime > 
const_property_object::read_prop_array< boost::posix_time::ptime > (prop_id id) const
template<>
std::vector< byteconst_property_object::read_prop< std::vector< byte > > (prop_id id) const
template<>
std::vector< std::vector< byte > > const_property_object::read_prop_array< std::vector< byte > > (prop_id id) const
template<>
std::wstring const_property_object::read_prop< std::wstring > (prop_id id) const
template<>
std::vector< std::wstring > const_property_object::read_prop_array< std::wstring > (prop_id id) const
template<>
std::string const_property_object::read_prop< std::string > (prop_id id) const
template<>
std::vector< std::string > const_property_object::read_prop_array< std::string > (prop_id id) const
table_ptr open_table (const node &n)
 Open the specified node as a table.
shared_db_ptr open_database (const std::wstring &filename)
 Open a db_context for the given file.
std::tr1::shared_ptr< small_pstopen_small_pst (const std::wstring &filename)
 Try to open the given file as an ANSI store.
std::tr1::shared_ptr< large_pstopen_large_pst (const std::wstring &filename)
 Try to open the given file as a Unicode store.
std::ostream & operator<< (std::ostream &out, const attachment &attach)
 operator<< overload for writing an attachment to an ostream
std::vector< bytecalculate_entry_id (const shared_db_ptr &db, node_id nid)
 Construct a MAPI entry id from a given nid.
nid_type get_nid_type (node_id id)
 Get a node type from a node id.
ulong get_nid_index (node_id id)
 Get a node index from a node id.
ulong get_heap_page (heap_id id)
 Get the heap page from the heap id.
ulong get_heap_index (heap_id id)
 Get the index from the heap id.
heap_id make_heap_id (ulong page, ulong index)
 Create a heap_id from a page and an index.
bool is_heap_id (heapnode_id id)
 Inspects a heapnode_id (also known as a HNID) to determine if it is a heap_id (HID)
bool is_subnode_id (heapnode_id id)
 Inspects a heapnode_id (also known as a HNID) to determine if it is a node_id (NID)
time_t filetime_to_time_t (ulonglong filetime)
 Convert from a filetime to time_t.
ulonglong time_t_to_filetime (time_t time)
 Convert from a time_t to filetime.
time_t vt_date_to_time_t (double vt_time)
 Convert from a VT_DATE to a time_t.
double time_t_to_vt_date (time_t time)
 Convert from a time_t to a VT_DATE.
bool test_bit (const byte *pbytes, ulong bit)
 Test to see if the specified bit in the buffer is set.
std::wstring codepage_1252_to_wstring (const std::string &cp1252)
 Convert a codepage 1252 string to a std::wstring.
std::wstring bytes_to_wstring (const std::vector< byte > &bytes)
 Convert an array of bytes to a std::wstring.
std::vector< bytewstring_to_bytes (const std::wstring &wstr)
 Convert a std::wstring to an array of bytes.

Variables

const ulong nid_type_mask = 0x1FL
 The portion of a node_id reserved for the type.
const byte message_subject_prefix_lead_byte = 0x01
 A sentinel byte which indicates the message subject contains a prefix.
const guid ps_none = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }
 The NULL guid.
const guid ps_mapi = { 0x20328, 0, 0, { 0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }
 The PS_MAPI guid.
const guid ps_public_strings = { 0x20329, 0, 0, { 0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }
 The PS_PUBLIC_STRINGS guid.
const guid ps_task = { 0x62003, 0, 0, { 0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }
 The PSETID_Task guid.
const guid ps_contact = { 0x62004, 0, 0, { 0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }
 The PSETID_Address guid.
const std::wstring task_class = "IPM.Task"
 Message class for Task Items.
const std::wstring contact_class = "IPM.Contact"
 Message class for Contact Items.

Detailed Description

Contains the definition of all in memory representations of disk structures.


Typedef Documentation

Definition at line 69 of file database_iface.h.

typedef std::tr1::shared_ptr<heap_impl> fairport::heap_ptr

Definition at line 52 of file heap.h.

Definition at line 31 of file database.h.

Definition at line 332 of file table.h.

Definition at line 67 of file database_iface.h.

Definition at line 33 of file database.h.

Definition at line 331 of file table.h.


Function Documentation

template<>
boost::posix_time::ptime fairport::const_property_object::read_prop< boost::posix_time::ptime > ( prop_id  id) const [inline]

Definition at line 241 of file object.h.

template<>
std::string fairport::const_property_object::read_prop< std::string > ( prop_id  id) const [inline]

Definition at line 354 of file object.h.

template<>
std::vector<byte> fairport::const_property_object::read_prop< std::vector< byte > > ( prop_id  id) const [inline]

Definition at line 280 of file object.h.

template<>
std::wstring fairport::const_property_object::read_prop< std::wstring > ( prop_id  id) const [inline]

Definition at line 316 of file object.h.

template<>
std::vector<boost::posix_time::ptime> fairport::const_property_object::read_prop_array< boost::posix_time::ptime > ( prop_id  id) const [inline]

Definition at line 256 of file object.h.

template<>
std::vector<std::string> fairport::const_property_object::read_prop_array< std::string > ( prop_id  id) const [inline]

Definition at line 376 of file object.h.

template<>
std::vector<std::vector<byte> > fairport::const_property_object::read_prop_array< std::vector< byte > > ( prop_id  id) const [inline]

Definition at line 286 of file object.h.

template<>
std::vector<std::wstring> fairport::const_property_object::read_prop_array< std::wstring > ( prop_id  id) const [inline]

Definition at line 332 of file object.h.