server: intialize aux_header buffer to null if the data is missing.
[tridge/openchange.git] / branches / plugfest / doc / examples / fetchappointment.c
1 #include <libmapi/libmapi.h>
2
3 #define DEFAULT_PROFDB  "%s/.openchange/profiles.ldb"
4
5 int main(int argc, char *argv[])
6 {
7         enum MAPISTATUS                 retval;
8         struct mapi_context             *mapi_ctx;
9         TALLOC_CTX                      *mem_ctx;
10         struct mapi_session             *session = NULL;
11         mapi_object_t                   obj_store;
12         mapi_object_t                   obj_folder;
13         mapi_object_t                   obj_table;
14         mapi_object_t                   obj_message;
15         struct mapi_SPropValue_array    props_all;
16         struct SRowSet                  rowset;
17         struct SPropTagArray            *SPropTagArray;
18         mapi_id_t                       id_inbox;
19         mapi_id_t                       *fid, *mid;
20         char                            *profname;
21         char                            *profdb;
22         uint32_t                        Numerator;
23         uint32_t                        Denominator;
24         uint32_t                        i;
25
26         mem_ctx = talloc_named(NULL, 0, "fetchappointment");
27
28         /* Initialize MAPI */
29         profdb = talloc_asprintf(mem_ctx, DEFAULT_PROFDB, getenv("HOME"));
30         retval = MAPIInitialize(&mapi_ctx, profdb);
31         MAPI_RETVAL_IF(retval, retval, NULL);
32
33         /* Find Default Profile */
34         retval = GetDefaultProfile(mapi_ctx, &profname);
35         MAPI_RETVAL_IF(retval, retval, NULL);
36
37         /* Log on EMSMDB and NSPI */
38         retval = MapiLogonEx(mapi_ctx, &session, profname, NULL);
39         MAPI_RETVAL_IF(retval, retval, NULL);
40
41         /* Open Message Store */
42         mapi_object_init(&obj_store);
43         retval = OpenMsgStore(session, &obj_store);
44         MAPI_RETVAL_IF(retval, retval, NULL);
45
46         /* Find Inbox default folder */
47         retval = GetDefaultFolder(&obj_store, &id_inbox, olFolderCalendar);
48         MAPI_RETVAL_IF(retval, retval, NULL);
49
50         /* Open Inbox folder */
51         mapi_object_init(&obj_folder);
52         retval = OpenFolder(&obj_store, id_inbox, &obj_folder);
53         MAPI_RETVAL_IF(retval, retval, NULL);
54
55         /* Retrieve Inbox content table */
56         mapi_object_init(&obj_table);
57         retval = GetContentsTable(&obj_folder, &obj_table, 0x0, NULL);
58         MAPI_RETVAL_IF(retval, retval, NULL);
59
60         /* Create the MAPI table view */
61         SPropTagArray = set_SPropTagArray(mem_ctx, 0x2, PR_FID, PR_MID);
62         retval = SetColumns(&obj_table, SPropTagArray);
63         MAPIFreeBuffer(SPropTagArray);
64         MAPI_RETVAL_IF(retval, retval, mem_ctx);
65
66         /* Get current cursor position */
67         retval = QueryPosition(&obj_table, &Numerator, &Denominator);
68         MAPI_RETVAL_IF(retval, retval, NULL);
69
70         /* Iterate through rows */
71         while ((retval = QueryRows(&obj_table, Denominator, TBL_ADVANCE, &rowset)) != -1 && rowset.cRows) {
72                 for (i = 0; i < rowset.cRows; i++) {
73                         fid = (mapi_id_t *)find_SPropValue_data(&(rowset.aRow[i]), PR_FID);
74                         mid = (mapi_id_t *)find_SPropValue_data(&(rowset.aRow[i]), PR_MID);
75                         mapi_object_init(&obj_message);
76                         retval = OpenMessage(&obj_store, *fid, *mid, &obj_message, 0x0);
77                         if (retval != MAPI_E_NOT_FOUND) {
78                                 retval = GetPropsAll(&obj_message, &props_all);
79                                 mapidump_appointment(&props_all, NULL);
80                                 mapi_object_release(&obj_message);
81                         }
82                 }
83
84         }
85
86         /* Release MAPI objects */
87         mapi_object_release(&obj_table);
88         mapi_object_release(&obj_folder);
89
90         Logoff(&obj_store);
91
92         /* Uninitialize MAPI */
93         MAPIUninitialize(mapi_ctx);
94
95         talloc_free(mem_ctx);
96
97         return (0);
98 }