1 /*
2  * Definitions for libpff
3  *
4  * Copyright (C) 2008-2018, Joachim Metz <joachim.metz@gmail.com>
5  *
6  * Refer to AUTHORS for acknowledgements.
7  *
8  * This software is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This software is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this software.  If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #if !defined( _LIBPFF_DEFINITIONS_H )
23 #define _LIBPFF_DEFINITIONS_H
24 
25 #include <libpff/types.h>
26 
27 #define LIBPFF_VERSION					20180714
28 
29 /* The version string
30  */
31 #define LIBPFF_VERSION_STRING				"20180714"
32 
33 /* The access flags definitions
34  * bit 1        set to 1 for read access
35  * bit 2        set to 1 for write access
36  * bit 3-8      not used
37  */
38 enum LIBPFF_ACCESS_FLAGS
39 {
40 	LIBPFF_ACCESS_FLAG_READ				= 0x01,
41 /* Reserved: not supported yet */
42 	LIBPFF_ACCESS_FLAG_WRITE			= 0x02
43 };
44 
45 /* The file access macros
46  */
47 #define LIBPFF_OPEN_READ				( LIBPFF_ACCESS_FLAG_READ )
48 /* Reserved: not supported yet */
49 #define LIBPFF_OPEN_WRITE				( LIBPFF_ACCESS_FLAG_WRITE )
50 /* Reserved: not supported yet */
51 #define LIBPFF_OPEN_READ_WRITE				( LIBPFF_ACCESS_FLAG_READ | LIBPFF_ACCESS_FLAG_WRITE )
52 
53 /* The recovery flags
54  */
55 enum LIBPFF_RECOVERY_FLAGS
56 {
57 	LIBPFF_RECOVERY_FLAG_IGNORE_ALLOCATION_DATA	= 0x01,
58 	LIBPFF_RECOVERY_FLAG_SCAN_FOR_FRAGMENTS		= 0x02
59 };
60 
61 /* The file types
62  */
63 enum LIBPFF_FILE_TYPES
64 {
65 	LIBPFF_FILE_TYPE_32BIT				= 32,
66 	LIBPFF_FILE_TYPE_64BIT				= 64,
67 	LIBPFF_FILE_TYPE_64BIT_4K_PAGE			= 65
68 };
69 
70 /* The file content types
71  */
72 enum LIBPFF_FILE_CONTENT_TYPES
73 {
74 	LIBPFF_FILE_CONTENT_TYPE_PAB			= (int) 'a',
75 	LIBPFF_FILE_CONTENT_TYPE_PST			= (int) 'p',
76 	LIBPFF_FILE_CONTENT_TYPE_OST			= (int) 'o'
77 };
78 
79 /* The encryption types
80  */
81 enum LIBPFF_ENCRYPTION_TYPES
82 {
83 	LIBPFF_ENCRYPTION_TYPE_NONE			= 0,
84 	LIBPFF_ENCRYPTION_TYPE_COMPRESSIBLE		= 1,
85 	LIBPFF_ENCRYPTION_TYPE_HIGH			= 2
86 };
87 
88 /* The item types
89  * These item types partially map to the message classes
90  * LIBPFF_ITEM_TYPE_UNDEFINED				(initialization value)
91  * LIBPFF_ITEM_TYPE_ACTIVITY				IPM.Activity
92  * LIBPFF_ITEM_TYPE_APPOINTMENT				IPM.Appointment
93  * LIBPFF_ITEM_TYPE_ATTACHMENT				(attachment)
94  * LIBPFF_ITEM_TYPE_ATTACHMENTS				(attachments)
95  * LIBPFF_ITEM_TYPE_COMMON				IPM
96  * LIBPFF_ITEM_TYPE_CONFIGURATION			IPM.Configuration.*
97  * LIBPFF_ITEM_TYPE_CONFLICT_MESSAGE			IPM.Conflict.Message
98  * LIBPFF_ITEM_TYPE_CONTACT				IPM.Contact
99  * LIBPFF_ITEM_TYPE_DISTRIBUTION_LIST			IPM.DistList
100  * LIBPFF_ITEM_TYPE_DOCUMENT				IPM.Document.*
101  * LIBPFF_ITEM_TYPE_EMAIL				IPM.Note, REPORT.IPM.Note.*
102  * LIBPFF_ITEM_TYPE_EMAIL_SMIME				IPM.Note.SMIME.*
103  * LIBPFF_ITEM_TYPE_FAX					IPM.FAX, IPM.Note.Fax
104  * LIBPFF_ITEM_TYPE_FOLDER				(folder/container)
105  * LIBPFF_ITEM_TYPE_MEETING				IPM.Schedule.Meeting
106  * LIBPFF_ITEM_TYPE_MMS					IPM.Note.Mobile.MMS
107  * LIBPFF_ITEM_TYPE_NOTE				IPM.StickyNote
108  * LIBPFF_ITEM_TYPE_POSTING_NOTE			IPM.Post
109  * LIBPFF_ITEM_TYPE_RECIPIENTS				(recipients)
110  * LIBPFF_ITEM_TYPE_RSS_FEED				IPM.Post.RSS
111  * LIBPFF_ITEM_TYPE_SHARING				IPM.Sharing.*
112  * LIBPFF_ITEM_TYPE_SMS					IPM.Note.Mobile.SMS
113  * LIBPFF_ITEM_TYPE_TASK				IPM.Task
114  * LIBPFF_ITEM_TYPE_TASK_REQUEST			IPM.TaskRequest.*
115  * LIBPFF_ITEM_TYPE_VOICEMAIL				IPM.Note.Voicemail
116  * LIBPFF_ITEM_TYPE_UNKNOWN				(unknown item type, used in folder content type)
117  *
118  * Unsupported:
119  * IPM.Post
120  */
121 enum LIBPFF_ITEM_TYPES
122 {
123 	LIBPFF_ITEM_TYPE_UNDEFINED,
124 	LIBPFF_ITEM_TYPE_ACTIVITY,
125 	LIBPFF_ITEM_TYPE_APPOINTMENT,
126 	LIBPFF_ITEM_TYPE_ATTACHMENT,
127 	LIBPFF_ITEM_TYPE_ATTACHMENTS,
128 	LIBPFF_ITEM_TYPE_COMMON,
129 	LIBPFF_ITEM_TYPE_CONFIGURATION,
130 	LIBPFF_ITEM_TYPE_CONFLICT_MESSAGE,
131 	LIBPFF_ITEM_TYPE_CONTACT,
132 	LIBPFF_ITEM_TYPE_DISTRIBUTION_LIST,
133 	LIBPFF_ITEM_TYPE_DOCUMENT,
134 	LIBPFF_ITEM_TYPE_EMAIL,
135 	LIBPFF_ITEM_TYPE_EMAIL_SMIME,
136 	LIBPFF_ITEM_TYPE_FAX,
137 	LIBPFF_ITEM_TYPE_FOLDER,
138 	LIBPFF_ITEM_TYPE_MEETING,
139 	LIBPFF_ITEM_TYPE_MMS,
140 	LIBPFF_ITEM_TYPE_NOTE,
141 	LIBPFF_ITEM_TYPE_POSTING_NOTE,
142 	LIBPFF_ITEM_TYPE_RECIPIENTS,
143 	LIBPFF_ITEM_TYPE_RSS_FEED,
144 	LIBPFF_ITEM_TYPE_SHARING,
145 	LIBPFF_ITEM_TYPE_SMS,
146 	LIBPFF_ITEM_TYPE_SUB_ASSOCIATED_CONTENTS,
147 	LIBPFF_ITEM_TYPE_SUB_FOLDERS,
148 	LIBPFF_ITEM_TYPE_SUB_MESSAGES,
149 	LIBPFF_ITEM_TYPE_TASK,
150 	LIBPFF_ITEM_TYPE_TASK_REQUEST,
151 	LIBPFF_ITEM_TYPE_VOICEMAIL,
152 	LIBPFF_ITEM_TYPE_UNKNOWN
153 };
154 
155 /* The attachment types
156  */
157 enum LIBPFF_ATTACHMENT_TYPES
158 {
159 	LIBPFF_ATTACHMENT_TYPE_UNDEFINED		= 0,
160 	LIBPFF_ATTACHMENT_TYPE_DATA			= (int) 'd',
161 	LIBPFF_ATTACHMENT_TYPE_ITEM			= (int) 'i',
162 	LIBPFF_ATTACHMENT_TYPE_REFERENCE		= (int) 'r'
163 };
164 
165 /* The unallocated block type
166  */
167 enum LIBPFF_UNALLOCATED_BLOCK_TYPES
168 {
169 	LIBPFF_UNALLOCATED_BLOCK_TYPE_DATA		= (int) 'd',
170 	LIBPFF_UNALLOCATED_BLOCK_TYPE_PAGE		= (int) 'p'
171 };
172 
173 /* The name to id map entry types
174  */
175 enum LIBPFF_NAME_TO_ID_MAP_ENTRY_TYPES
176 {
177 	LIBPFF_NAME_TO_ID_MAP_ENTRY_TYPE_NUMERIC	= (int) 'n',
178 	LIBPFF_NAME_TO_ID_MAP_ENTRY_TYPE_STRING		= (int) 's'
179 };
180 
181 /* The entry value flags
182  */
183 enum LIBPFF_ENTRY_VALUE_FLAGS
184 {
185 	LIBPFF_ENTRY_VALUE_FLAG_MATCH_ANY_VALUE_TYPE	= 0x01,
186 	LIBPFF_ENTRY_VALUE_FLAG_IGNORE_NAME_TO_ID_MAP	= 0x02
187 };
188 
189 #endif /* !defined( _LIBPFF_DEFINITIONS_H ) */
190 
191