2 OpenChange OCPF (OpenChange Property File) implementation.
4 Copyright (C) Julien Kerihuel 2008-2010.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include "libocpf/ocpf.h"
21 #include "libocpf/ocpf_api.h"
22 #include "libocpf/ocpf_dump.h"
30 static void ocpf_do_dump(const char *format, ...)
37 ret = vasprintf(&s, format, ap);
41 printf("[Dump failure]\n");
50 \details Dump OCPF Type
52 Dump OCPF Registered Type
54 _PUBLIC_ void ocpf_dump_type(uint32_t context_id)
56 struct ocpf_context *ctx;
58 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
61 OCPF_DUMP_TITLE(indent, "TYPE", OCPF_DUMP_TOPLEVEL);
65 OCPF_DUMP(("* %s", ctx->type ? ctx->type : "Undefined"));
71 \details Dump OCPF Destination Folder
73 Dump OCPF Registered Destination Folder
75 _PUBLIC_ void ocpf_dump_folder(uint32_t context_id)
77 struct ocpf_context *ctx;
79 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
82 OCPF_DUMP_TITLE(indent, "FOLDER", OCPF_DUMP_TOPLEVEL);
86 OCPF_DUMP(("* 0x%llx", ctx->folder ? ctx->folder : 0xFFFFFFFF));
92 \details Dump OCPF Recipients
96 _PUBLIC_ void ocpf_dump_recipients(uint32_t context_id)
98 struct ocpf_context *ctx;
99 struct ocpf_recipients *element;
101 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
104 OCPF_DUMP_TITLE(indent, "RECIPIENTS", OCPF_DUMP_TOPLEVEL);
109 for (element = ctx->recipients; element->next; element = element->next) {
110 if (element->class == OCPF_MAPI_TO) {
111 printf("%s;", element->name);
118 for (element = ctx->recipients; element->next; element = element->next) {
119 if (element->class == OCPF_MAPI_CC) {
120 printf("%s;", element->name);
127 for (element = ctx->recipients; element->next; element = element->next) {
128 if (element->class == OCPF_MAPI_BCC) {
129 printf("%s;", element->name);
137 \details Dump OCPF OLEGUID
139 Dump OCPF Registered OLEGUID
141 _PUBLIC_ void ocpf_dump_oleguid(uint32_t context_id)
143 struct ocpf_context *ctx;
144 struct ocpf_oleguid *element;
146 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
149 OCPF_DUMP_TITLE(indent, "OLEGUID", OCPF_DUMP_TOPLEVEL);
151 for (element = ctx->oleguid; element->next; element = element->next) {
153 printf("%-25s: %s\n", element->name, element->guid);
159 _PUBLIC_ void ocpf_dump_variable(uint32_t context_id)
161 struct ocpf_context *ctx;
162 struct ocpf_var *element;
164 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
167 OCPF_DUMP_TITLE(indent, "VARIABLE", OCPF_DUMP_TOPLEVEL);
169 for (element = ctx->vars; element->next; element = element->next) {
171 printf("%s\n", element->name);
176 _PUBLIC_ void ocpf_dump_property(uint32_t context_id)
178 struct ocpf_context *ctx;
179 struct ocpf_property *element;
182 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
185 OCPF_DUMP_TITLE(indent, "PROPERTIES", OCPF_DUMP_TOPLEVEL);
187 for (element = ctx->props; element->next; element = element->next) {
189 proptag = (const char *)get_proptag_name(element->aulPropTag);
190 printf("0x%.8x = %s\n", element->aulPropTag,
191 (char *)(proptag ? proptag : "UNKNOWN"));
198 _PUBLIC_ void ocpf_dump_named_property(uint32_t context_id)
200 struct ocpf_context *ctx;
201 struct ocpf_nproperty *element;
203 ctx = ocpf_context_search_by_context_id(ocpf->context, context_id);
206 OCPF_DUMP_TITLE(indent, "NAMED PROPERTIES", OCPF_DUMP_TOPLEVEL);
209 OCPF_DUMP_TITLE(indent, "OOM", OCPF_DUMP_SUBLEVEL);
211 for (element = ctx->nprops; element->next; element = element->next) {
212 if (element->kind == OCPF_OOM) {
214 printf("* %s\n", element->OOM);
219 OCPF_DUMP_TITLE(indent, "MNID_ID", OCPF_DUMP_SUBLEVEL);
221 for (element = ctx->nprops; element->next; element = element->next) {
222 if (element->kind == OCPF_MNID_ID) {
224 printf("* 0x%.4x\n", element->mnid_id);
229 OCPF_DUMP_TITLE(indent, "MNID_STRING", OCPF_DUMP_SUBLEVEL);
231 for (element = ctx->nprops; element->next; element = element->next) {
232 if (element->kind == OCPF_MNID_STRING) {
234 printf("* %s\n", element->mnid_string);
243 _PUBLIC_ void ocpf_dump(uint32_t context_id)
246 ocpf_dump_type(context_id);
247 ocpf_dump_folder(context_id);
248 ocpf_dump_oleguid(context_id);
249 ocpf_dump_recipients(context_id);
250 ocpf_dump_variable(context_id);
251 ocpf_dump_property(context_id);
252 ocpf_dump_named_property(context_id);