- Improve the GetHierarchyTable and GetContentsTable IDL and public
authorJulien Kerihuel <j.kerihuel@openchange.org>
Tue, 29 Apr 2008 16:11:19 +0000 (16:11 +0000)
committerJulien Kerihuel <j.kerihuel@openchange.org>
Tue, 29 Apr 2008 16:11:19 +0000 (16:11 +0000)
  IDL implementation (new parameters in,out)

23 files changed:
exchange.idl
libmapi/IMAPIContainer.c
libocpf/ocpf_public.c
torture/mapi_bookmark.c
torture/mapi_copymail.c
torture/mapi_deletemail.c
torture/mapi_fetchappointment.c
torture/mapi_fetchattach.c
torture/mapi_fetchcontacts.c
torture/mapi_fetchmail.c
torture/mapi_fetchtasks.c
torture/mapi_namedprops.c
torture/mapi_recipient.c
torture/mapi_restrictions.c
torture/mapi_sorttable.c
utils/backup/openchangemapidump.c
utils/exchange2mbox.c
utils/mapitest/mapitest_common.c
utils/mapitest/modules/module_oxcfold.c
utils/mapitest/modules/module_oxcmsg.c
utils/mapitest/modules/module_oxctable.c
utils/openchangeclient.c
utils/openchangepfadmin.c

index 180fee5c0bb4c44393b34137f824417e9803d2fc..cbafb996bc32f9fc4f2a65fe189ad1c9c9f04654 100644 (file)
@@ -671,7 +671,7 @@ System Attendant Private Interface
                        op_MAPI_SetSearchCriteria       = 0x30,
                        op_MAPI_GetSearchCriteria       = 0x31,
                        op_MAPI_SubmitMessage           = 0x32,
-                       op_MAPI_CopyMessages            = 0x33,
+                       op_MAPI_CopyMessages            = 0x33,
                        op_MAPI_QueryColumns            = 0x37,
                        op_MAPI_CopyToStream            = 0x3a,
                        op_MAPI_GetTable                = 0x3e,
@@ -907,26 +907,33 @@ System Attendant Private Interface
 
        /**************************/
        /* EcDoRpc Function 0x4   */
+       typedef [bitmap8bit] bitmap {
+               TableFlags_Depth                        = 0x4,
+               TableFlags_DeferredErrors               = 0x8,
+               TableFlags_NoNotifications              = 0x10,
+               TableFlags_SoftDeletes                  = 0x20,
+               TableFlags_UseUnicode                   = 0x40,
+               TableFlags_SuppressNotifications        = 0x80
+       } TableFlags;
+
        typedef [flag(NDR_NOALIGN)] struct {
                uint8           handle_idx;
-               uint8           unknown;
+               TableFlags      TableFlags;
        } GetHierarchyTable_req;
 
        typedef [flag(NDR_NOALIGN)] struct {
-               uint16          cn_rows;
-               uint16          unknown;
+               uint32          RowCount;
        } GetHierarchyTable_repl;
 
        /**************************/
        /* EcDoRpc Function 0x5   */
        typedef [flag(NDR_NOALIGN)] struct {
                uint8           handle_idx;
-               uint8           unknown;
+               TableFlags      TableFlags;
        } GetContentsTable_req;
 
        typedef [flag(NDR_NOALIGN)] struct {
-               uint16          cn_rows;
-               uint16          unknown;
+               uint32          RowCount;
        } GetContentsTable_repl;
 
        /**************************/
@@ -1768,11 +1775,11 @@ System Attendant Private Interface
                uint8           handle_idx;
                uint16          count;
                hyper           message_id[count];
-               uint16          row_nb;
+               uint16          row_nb;
        } CopyMessages_req;
 
        typedef [flag(NDR_NOALIGN)] struct {
-               uint8           unknown;
+               boolean8        PartialCompletion;
        } CopyMessages_repl;
 
        /*************************/
index 2a6a8dad4ce2ef980e7b47ee76a1da7abc69509b..f44219765dbe076905584f77b23dbaa95eea9af3 100644 (file)
    \param obj_container the object to get the contents of
    \param obj_table the resulting table containing the container's
    contents.
+   \param TableFlags flags controlling the type of table
+   \param RowCount the number of rows in the hierarchy table
+
+   TableFlags possible values:
+
+   - TableFlags_Depth (0x4): Fills the hierarchy table with containers
+   from all levels. If this flag is not set, the hierarchy table
+   contains only the container's immediate child containers.
+
+   - TableFlags_DeferredErrors (0x8): The call response can return immediately,
+   possibly before the call execution is complete and in this case the
+   ReturnValue as well the RowCount fields in the return buffer might
+   not be accurate.  Only retval reporting failure can be considered
+   valid in this case.
+
+   - TableFlags_NoNotifications (0x10): Disables all notifications on .this Table
+   object.
+
+   - TableFlags_SoftDeletes (0x20): Enables the client to get a list of the soft
+   deleted folders.
+
+   - TableFlags_UseUnicode (0x40): Requests that the columns that contain string
+   data be returned in Unicode format.
+
+   - TableFlags_SuppressNotifications (0x80): Suppresses notifications generated
+   by this client’s actions on this Table object.
+
+   Developers can either set RowCount to a valid pointer on uint32_t
+   or set it to NULL. In this last case, GetHierarchyTable won't
+   return any value to the calling function.
 
    \return MAPI_E_SUCCESS on success, otherwise -1.
 
@@ -48,7 +78,8 @@
 
    \sa OpenFolder, GetHierarchyTable, GetLastError
 */
-_PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_object_t *obj_table)
+_PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_object_t *obj_table,
+                                         uint8_t TableFlags, uint32_t *RowCount)
 {
        struct mapi_request     *mapi_request;
        struct mapi_response    *mapi_response;
@@ -67,7 +98,7 @@ _PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_obj
 
        /* Fill the GetContentsTable operation */
        request.handle_idx = 0x1;
-       request.unknown = 0x0;
+       request.TableFlags = TableFlags;
        size += 2;
 
        /* Fill the MAPI_REQ request */
@@ -94,6 +125,11 @@ _PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_obj
 
        /* set handle */
        mapi_object_set_handle(obj_table, mapi_response->handles[1]);
+
+       /* Retrieve RowCount if a valid pointer was set */
+       if (RowCount) {
+               *RowCount = mapi_response->mapi_repl->u.mapi_GetContentsTable.RowCount;
+       }
        
        /* new table */
        mapi_object_table_init(obj_table);
@@ -114,6 +150,36 @@ _PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_obj
    \param obj_container the object to get the contents of
    \param obj_table the resulting table containing the container's
    hierarchy
+   \param TableFlags flags controlling the type of table
+   \param RowCount the number of rows in the hierarchy table
+
+   TableFlags possible values:
+
+   - TableFlags_Depth (0x4): Fills the hierarchy table with containers
+   from all levels. If this flag is not set, the hierarchy table
+   contains only the container's immediate child containers.
+
+   - TableFlags_DeferredErrors (0x8): The call response can return immediately,
+   possibly before the call execution is complete and in this case the
+   ReturnValue as well the RowCount fields in the return buffer might
+   not be accurate.  Only retval reporting failure can be considered
+   valid in this case.
+
+   - TableFlags_NoNotifications (0x10): Disables all notifications on .this Table
+   object.
+
+   - TableFlags_SoftDeletes (0x20): Enables the client to get a list of the soft
+   deleted folders.
+
+   - TableFlags_UseUnicode (0x40): Requests that the columns that contain string
+   data be returned in Unicode format.
+
+   - TableFlags_SuppressNotifications (0x80): Suppresses notifications generated
+   by this client’s actions on this Table object.
+
+   Developers can either set RowCount to a valid pointer on uint32_t
+   or set it to NULL. In this last case, GetHierarchyTable won't
+   return any value to the calling function.
 
    \return MAPI_E_SUCCESS on success, otherwise -1.
 
@@ -125,7 +191,8 @@ _PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_obj
 
    \sa OpenFolder, GetContentsTable, GetLastError
 */
-_PUBLIC_ enum MAPISTATUS GetHierarchyTable(mapi_object_t *obj_container, mapi_object_t *obj_table)
+_PUBLIC_ enum MAPISTATUS GetHierarchyTable(mapi_object_t *obj_container, mapi_object_t *obj_table,
+                                          uint8_t TableFlags, uint32_t *RowCount)
 {
        struct mapi_request     *mapi_request;
        struct mapi_response    *mapi_response;
@@ -144,7 +211,7 @@ _PUBLIC_ enum MAPISTATUS GetHierarchyTable(mapi_object_t *obj_container, mapi_ob
 
        /* Fill the GetHierarchyTable operation */
        request.handle_idx = 0x1;
-       request.unknown = 0x0;
+       request.TableFlags = TableFlags;
        size += 2;
 
        /* Fill the MAPI_REQ request */
@@ -172,6 +239,11 @@ _PUBLIC_ enum MAPISTATUS GetHierarchyTable(mapi_object_t *obj_container, mapi_ob
        /* set handle */
        mapi_object_set_handle(obj_table, mapi_response->handles[1]);
        
+       /* Retrieve RowCount if a valid pointer was set */
+       if (RowCount) {
+               *RowCount = mapi_response->mapi_repl->u.mapi_GetHierarchyTable.RowCount;
+       }
+
        /* new table */
        mapi_object_table_init(obj_table);
 
index cb3f871cb2a84fe9232280c54ed58942ea4103c7..b79cee1698dbef2dd367d2224e8f4ffdff445728 100644 (file)
@@ -320,7 +320,7 @@ static enum MAPISTATUS ocpf_folder_lookup(TALLOC_CTX *mem_ctx,
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x1, PR_FID);
index 836915898c17d00cc80c613dccc0feec9fb57968..7aa6144a87d5b1d050bb87b49a8c960759b4fed7 100644 (file)
@@ -70,7 +70,7 @@ bool torture_rpc_mapi_bookmark(struct torture_context *torture)
 
        /* Retrieve the Contents Table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(&obj_folder, &obj_ctable);
+       retval = GetContentsTable(&obj_folder, &obj_ctable, 0, &count);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
@@ -81,11 +81,6 @@ bool torture_rpc_mapi_bookmark(struct torture_context *torture)
        mapi_errstr("SetColumns", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
-       /* Count the total number of rows in the table */
-       retval = GetRowCount(&obj_ctable, &count);
-       mapi_errstr("GetRowCount", GetLastError());
-       if (retval != MAPI_E_SUCCESS) return false;
-
        halfcount = count / 2;
 
        /* Position the cursor at the desired position */
index d2ec9c0efe7098f64c166f0daff591e14ffb6242..0e9bd5dbaf7f9cbeb42aa4a3f4626d3d46159940 100644 (file)
@@ -86,7 +86,7 @@ bool torture_rpc_mapi_copymail(struct torture_context *torture)
        if (retval != MAPI_E_SUCCESS) return false;
 
 
-       retval = GetContentsTable(&obj_dir_src, &obj_table);
+       retval = GetContentsTable(&obj_dir_src, &obj_table, 0, NULL);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
@@ -103,8 +103,8 @@ bool torture_rpc_mapi_copymail(struct torture_context *torture)
 
        while ((retval = QueryRows(&obj_table, 0xa, TBL_ADVANCE, &rowset)) != MAPI_E_NOT_FOUND && rowset.cRows) {
                for (i = 0; i < rowset.cRows; i++) {
-                       retval = CopyMessages(&obj_dir_src, &obj_dir_dst, rowset.aRow[i].lpProps[1].value.d);
-                       mapi_errstr("CopyMessages", GetLastError());
+                       retval = MoveCopyMessages(&obj_dir_src, &obj_dir_dst, rowset.aRow[i].lpProps[1].value.d);
+                       mapi_errstr("MoveCopyMessages", GetLastError());
                        if (retval != MAPI_E_SUCCESS) return false;
                }
        }
index 4e5870e5293b7e8becaa46948ec241552ac6f6c8..37f5e4632f9afd7ef5c98e4fc28341b1b1d189eb 100644 (file)
@@ -82,7 +82,7 @@ bool torture_rpc_mapi_deletemail(struct torture_context *torture)
        mapi_object_debug(&obj_inbox);
 
        /* table = inbox->GetContentsTable() */
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, NULL);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
        mapi_object_debug(&obj_table);
index 0c99b3169c5f976e3c4d5e0157a930e6d71d48bb..3ef496fb29d660d07e27826d374254e5c722ca8b 100644 (file)
@@ -75,7 +75,7 @@ bool torture_rpc_mapi_fetchappointment(struct torture_context *torture)
        if (retval != MAPI_E_SUCCESS) return false;
 
        /* Operations on the calendar folder */
-       retval = GetContentsTable(&obj_calendar, &obj_cal_table);
+       retval = GetContentsTable(&obj_calendar, &obj_cal_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
index 9c9c90ea9a3cb1a7e00b455736855a634f7148b5..a2b892a4e92701e79875ef5c0f9a2af5aca4e4da 100644 (file)
@@ -143,7 +143,7 @@ bool torture_rpc_mapi_fetchattach(struct torture_context *torture)
        if (retval != MAPI_E_SUCCESS) return false;
 
        /* table = inbox->GetContentsTable() */
-       retval = GetContentsTable(&obj_inbox, &obj_tb_contents);
+       retval = GetContentsTable(&obj_inbox, &obj_tb_contents, 0, NULL);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
index c904aead5672616bce2f1d5c08fe487e423b79f5..fc088912c01f33b5a0bcda31e77ff82093be58cf 100644 (file)
@@ -75,7 +75,7 @@ bool torture_rpc_mapi_fetchcontacts(struct torture_context *torture)
        if (retval != MAPI_E_SUCCESS) return false;
 
        /* Operations on the contacts folder */
-       retval = GetContentsTable(&obj_contacts, &obj_table);
+       retval = GetContentsTable(&obj_contacts, &obj_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
index 212a8a1fd9002ae118a72fa0e7607e4e2df8d4bb..0dc99ac1eb2ddab0bfb82dba597e0dd13e66f5bd 100644 (file)
@@ -91,7 +91,7 @@ bool torture_rpc_mapi_fetchmail(struct torture_context *torture)
                
        /* table = inbox->GetContentsTable()
         */
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, &count);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
@@ -106,11 +106,6 @@ bool torture_rpc_mapi_fetchmail(struct torture_context *torture)
        mapi_errstr("SetColumns", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
-       /* Iterate through messages
-        */
-       retval = GetRowCount(&obj_table, &count);
-       mapi_errstr("GetRowCount", GetLastError());
-
        printf("Inbox: Total(%d) Unread(%d)\n", total, unread);
 
        while ((retval = QueryRows(&obj_table, 0xa, TBL_ADVANCE, &rowset)) != MAPI_E_NOT_FOUND && rowset.cRows) {
index 7d46caf08aab547ec487d4c4411a412fba56aa92..2781580c9fdc45b41b877f3a194bb8e50f10c18f 100644 (file)
@@ -75,7 +75,7 @@ bool torture_rpc_mapi_fetchtasks(struct torture_context *torture)
        if (retval != MAPI_E_SUCCESS) return false;
 
        /* Operations on the tasks folder */
-       retval = GetContentsTable(&obj_tasks, &obj_tasks_table);
+       retval = GetContentsTable(&obj_tasks, &obj_tasks_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
index d4ee70be7fe66f8f9ecc95dd50567e1ffbefff98..f3a69112279374d0c70558ba0c35ed9c9ee2eddd 100644 (file)
@@ -82,7 +82,7 @@ bool torture_rpc_mapi_namedprops(struct torture_context *torture)
 
        /* Retrieve the folder contents */
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_folder, &obj_table);
+       retval = GetContentsTable(&obj_folder, &obj_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
index 45f831d571afab31533053484ef6acf4b3ae7255..f2cfd79c64dbd3c3a1356ade394d87ae33f8a821 100644 (file)
@@ -76,7 +76,7 @@ bool torture_rpc_mapi_recipient(struct torture_context *torture)
 
        /* Get Contents Table */
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, &count);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
@@ -90,10 +90,6 @@ bool torture_rpc_mapi_recipient(struct torture_context *torture)
        mapi_errstr("SetColumns", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
-       /* Get total number of messages */
-       retval = GetRowCount(&obj_table, &count);
-       mapi_errstr("GetRowCount", GetLastError());
-
        while (((retval = QueryRows(&obj_table, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND) && SRowSet.cRows) {
                count -= SRowSet.cRows;
                for (i = 0; i < SRowSet.cRows; i++) {
index 2a5fbc4b8c66252f414c0b92eed94927fdd87725..c966f7cc82991ad8835a62378296ce6b4fd383b1 100644 (file)
@@ -168,9 +168,11 @@ bool torture_rpc_mapi_restrictions(struct torture_context *torture)
        }
 
        /* Get Contents Table */
-       retval = GetContentsTable(&obj_testdir, &obj_table);
+       retval = GetContentsTable(&obj_testdir, &obj_table, 0, &total);
        if (retval != MAPI_E_SUCCESS) return false;
 
+       DEBUG(0, ("Total number of mails = %d\n", total));
+
        /* Filter contents table on subject */
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x6,
                                          PR_FID,
@@ -183,11 +185,6 @@ bool torture_rpc_mapi_restrictions(struct torture_context *torture)
        MAPIFreeBuffer(SPropTagArray);
        if (retval != MAPI_E_SUCCESS) return false;
 
-       retval = GetRowCount(&obj_table, &total);
-       if (retval != MAPI_E_SUCCESS) return false;
-
-       DEBUG(0, ("Total number of mails = %d\n", total));
-
        DEBUG(0, ("\nStep 1. Test Restrict MAPI call\n"));
        DEBUG(0, ("===============================\n"));
 
index 8ab6f9b486471febbb49f442ee7e1882cc52efba..e2195f0518299fb3fe4dc0bb272b93b577fd591f 100644 (file)
@@ -66,7 +66,7 @@ bool torture_rpc_mapi_sorttable(struct torture_context *torture)
 
        /* Retrieve the Contents Table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(&obj_folder, &obj_ctable);
+       retval = GetContentsTable(&obj_folder, &obj_ctable, 0, &count);
        mapi_errstr("GetContentsTable", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
@@ -77,11 +77,6 @@ bool torture_rpc_mapi_sorttable(struct torture_context *torture)
        mapi_errstr("SetColumns", GetLastError());
        if (retval != MAPI_E_SUCCESS) return false;
 
-       /* Count the total number of rows in the table */
-       retval = GetRowCount(&obj_ctable, &count);
-       mapi_errstr("GetRowCount", GetLastError());
-       if (retval != MAPI_E_SUCCESS) return false;
-
        /* Browse and print table content */
        printf("\nBefore SortTable ASCENDING:\n");
        while (((retval = QueryRows(&obj_ctable, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND) &&
index c22aab00c247185566646d773b1c192c0787f7f8..563a2a93266cb0fbc5e23211688a424a6d419adf 100644 (file)
@@ -185,7 +185,7 @@ static enum MAPISTATUS mapidump_walk_content(TALLOC_CTX *mem_ctx,
 
        /* Get Contents Table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(obj_folder, &obj_ctable);
+       retval = GetContentsTable(obj_folder, &obj_ctable, 0, &count);
        MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
        /* Customize the table view */
@@ -199,10 +199,6 @@ static enum MAPISTATUS mapidump_walk_content(TALLOC_CTX *mem_ctx,
        MAPIFreeBuffer(SPropTagArray);
        MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
-       /* Walk through the table */
-       retval = GetRowCount(&obj_ctable, &count);
-       MAPI_RETVAL_IF(retval, GetLastError(), NULL);
-
        while ((retval = QueryRows(&obj_ctable, count, TBL_ADVANCE, &rowset)) != MAPI_E_NOT_FOUND && rowset.cRows) {
                for (i = 0; i < rowset.cRows; i++) {
                        mapi_object_init(&obj_message);
@@ -300,7 +296,7 @@ static enum MAPISTATUS mapidump_walk_container(TALLOC_CTX *mem_ctx,
 
        if (child_folder && *child_folder >= 1) {
                mapi_object_init(&obj_htable);
-               retval = GetHierarchyTable(&obj_folder, &obj_htable);
+               retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, &rcount);
                MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
                SPropTagArray = set_SPropTagArray(mem_ctx, 0x3,
@@ -311,9 +307,6 @@ static enum MAPISTATUS mapidump_walk_container(TALLOC_CTX *mem_ctx,
                MAPIFreeBuffer(SPropTagArray);
                MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
-               retval = GetRowCount(&obj_htable, &rcount);
-               MAPI_RETVAL_IF(retval, GetLastError(), NULL);
-
                while ((retval = QueryRows(&obj_htable, rcount, TBL_ADVANCE, &rowset) != MAPI_E_NOT_FOUND) && rowset.cRows) {
                        for (i = 0; i < rowset.cRows; i++) {
                                fid = (const uint64_t *)find_SPropValue_data(&rowset.aRow[i], PR_FID);
index e79a713f8dd2bbdfec5de609393c67c5d48cfb06..2eef470ac9e787bfa9b6a68db74a38b21de51f69 100644 (file)
@@ -77,7 +77,7 @@ static bool delete_message(TALLOC_CTX *mem_ctx, char *msgid,
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x3,
@@ -671,7 +671,7 @@ int main(int argc, const char *argv[])
        MAPI_RETVAL_IF(retval, retval, mem_ctx);
 
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, &count);
        MAPI_RETVAL_IF(retval, retval, mem_ctx);
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x5,
@@ -684,9 +684,6 @@ int main(int argc, const char *argv[])
        MAPIFreeBuffer(SPropTagArray);
        MAPI_RETVAL_IF(retval, retval, mem_ctx);
 
-       retval = GetRowCount(&obj_table, &count);
-       MAPI_RETVAL_IF(retval, retval, mem_ctx);
-       
        while ((retval = QueryRows(&obj_table, 0xa, TBL_ADVANCE, &rowset)) != MAPI_E_NOT_FOUND && rowset.cRows) {
                for (i = 0; i < rowset.cRows; i++) {
                        mapi_object_init(&obj_message);
index 8442d7d02c26f6ee6ce265e4f0dc884f1285c611..d00754980f8d4449d6523ef649f3847c7bfbc992 100644 (file)
@@ -83,7 +83,7 @@ _PUBLIC_ bool mapitest_common_message_find_subject(struct mapitest *mt,
 
        /* Retrieve the contents table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(obj_folder, &obj_ctable);
+       retval = GetContentsTable(obj_folder, &obj_ctable, 0, &count);
        mapitest_print(mt, "* %-35s: 0x%.8x\n", "GetContentsTable", GetLastError());
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
@@ -101,13 +101,6 @@ _PUBLIC_ bool mapitest_common_message_find_subject(struct mapitest *mt,
                return false;
        }
 
-       /* Count the total number of rows */
-       retval = GetRowCount(&obj_ctable, &count);
-       mapitest_print(mt, "* %-35s: 0x%.8x\n", "GetRowCount", GetLastError());
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
        /* Position the table at the latest know position */
        retval = SeekRow(&obj_ctable, BOOKMARK_BEGINNING, *index, &count2);
        mapitest_print(mt, "* %-35s: 0x%.8x\n", "SeekRow", GetLastError());
index c850002244fccb463273d1f668525aa315d16142..05cd4d8ce34d360aa9a26744f93061b640e449cd 100644 (file)
@@ -267,6 +267,7 @@ _PUBLIC_ bool mapitest_oxcfold_GetHierarchyTable(struct mapitest *mt)
        mapi_object_t           obj_folder;
        mapi_object_t           obj_htable;
        mapi_id_t               id_folder;
+       uint32_t                RowCount;
 
        /* Step 1. Logon */
        mapi_object_init(&obj_store);
@@ -285,8 +286,8 @@ _PUBLIC_ bool mapitest_oxcfold_GetHierarchyTable(struct mapitest *mt)
 
        /* Step 3. Get the Hierarchy Table */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
-       mapitest_print(mt, "* %-35s: 0x%.8x\n", "GetHierarchyTable", GetLastError());
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, &RowCount);
+       mapitest_print(mt, "* %-35s: (%d rows) 0x%.8x\n", "GetHierarchyTable", RowCount, GetLastError());
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -319,6 +320,7 @@ _PUBLIC_ bool mapitest_oxcfold_GetContentsTable(struct mapitest *mt)
        mapi_object_t           obj_folder;
        mapi_object_t           obj_ctable;
        mapi_id_t               id_folder;
+       uint32_t                RowCount;
 
        /* Step 1. Logon */
        mapi_object_init(&obj_store);
@@ -337,8 +339,8 @@ _PUBLIC_ bool mapitest_oxcfold_GetContentsTable(struct mapitest *mt)
 
        /* Step 3. Get the Contents Table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(&obj_folder, &obj_ctable);
-       mapitest_print(mt, "* %-35s: 0x%.8x\n", "GetContentsTable", GetLastError());
+       retval = GetContentsTable(&obj_folder, &obj_ctable, 0, &RowCount);
+       mapitest_print(mt, "* %-35s: (%d rows) 0x%.8x\n", "GetContentsTable", RowCount, GetLastError());
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
index 518e5e3b4b602d5aaa6d60251594f79cd92d7d8d..a6c96167668795b3b201fc9e77449d0ca3252bbd 100644 (file)
@@ -740,7 +740,7 @@ _PUBLIC_ bool mapitest_oxcmsg_GetMessageStatus(struct mapitest *mt)
 
        /* Step 5. Get outbox contents table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(&obj_folder, &obj_ctable);
+       retval = GetContentsTable(&obj_folder, &obj_ctable, 0, &count);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -753,11 +753,6 @@ _PUBLIC_ bool mapitest_oxcmsg_GetMessageStatus(struct mapitest *mt)
                return false;
        }
 
-       retval = GetRowCount(&obj_ctable, &count);
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
        /* Step 6. Get Message Status */
        while (((retval = QueryRows(&obj_ctable, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND) &&
               SRowSet.cRows) {
@@ -872,7 +867,7 @@ _PUBLIC_ bool mapitest_oxcmsg_SetMessageStatus(struct mapitest *mt)
 
        /* Step 5. Get outbox contents table */
        mapi_object_init(&obj_ctable);
-       retval = GetContentsTable(&obj_folder, &obj_ctable);
+       retval = GetContentsTable(&obj_folder, &obj_ctable, 0, &count);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -885,11 +880,6 @@ _PUBLIC_ bool mapitest_oxcmsg_SetMessageStatus(struct mapitest *mt)
                return false;
        }
 
-       retval = GetRowCount(&obj_ctable, &count);
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
        /* Fetch the first email */
        retval = QueryRows(&obj_ctable, 1, TBL_NOADVANCE, &SRowSet);
        if (GetLastError() != MAPI_E_SUCCESS) {
index 47ff32e53ccf1e11d023facc42937cc23716301e..db3487f7722f475ac41ebc61bc8eea5433451fe8 100644 (file)
@@ -68,7 +68,7 @@ _PUBLIC_ bool mapitest_oxctable_SetColumns(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -132,7 +132,7 @@ _PUBLIC_ bool mapitest_oxctable_QueryColumns(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -196,19 +196,12 @@ _PUBLIC_ bool mapitest_oxctable_QueryRows(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, &count);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
 
-       /* Step 4. Get row count */
-       retval = GetRowCount(&obj_htable, &count);
-       mapitest_print(mt, "* %-35s: 0x%.8x\n", "GetRowCount", GetLastError());
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
-       /* Step 5. Set Table Columns */
+       /* Step 4. Set Table Columns */
        SPropTagArray = set_SPropTagArray(mt->mem_ctx, 0x3,
                                          PR_DISPLAY_NAME,
                                          PR_FID,
@@ -274,7 +267,7 @@ _PUBLIC_ bool mapitest_oxctable_GetStatus(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -336,7 +329,7 @@ _PUBLIC_ bool mapitest_oxctable_SeekRow(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -406,7 +399,7 @@ _PUBLIC_ bool mapitest_oxctable_SeekRowApprox(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -484,7 +477,7 @@ _PUBLIC_ bool mapitest_oxctable_CreateBookmark(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, &count);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -500,13 +493,7 @@ _PUBLIC_ bool mapitest_oxctable_CreateBookmark(struct mapitest *mt)
                return false;
        }
 
-       /* Step 5. Get the total number of rows */
-       retval = GetRowCount(&obj_htable, &count);
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
-       /* Step 6. Create Bookmarks */
+       /* Step 5. Create Bookmarks */
        bkPosition = talloc_array(mt->mem_ctx, uint32_t, 1);
        while (((retval = QueryRows(&obj_htable, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND) &&
               SRowSet.cRows) {
@@ -523,7 +510,7 @@ _PUBLIC_ bool mapitest_oxctable_CreateBookmark(struct mapitest *mt)
 
        retval = mapi_object_bookmark_get_count(&obj_htable, &count);
 
-       /* Step 7. Free Bookmarks */
+       /* Step 6. Free Bookmarks */
        for (i = 0; i < count; i++) {
                retval = FreeBookmark(&obj_htable, bkPosition[i]);
                mapitest_print(mt, "* %-35s (%.2d): 0x%.8x\n", "FreeBookmark", i, GetLastError());
@@ -589,7 +576,7 @@ _PUBLIC_ bool mapitest_oxctable_SeekRowBookmark(struct mapitest *mt)
 
        /* Step 3. GetHierarchyTable */
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, &count);
        if (GetLastError() != MAPI_E_SUCCESS) {
                return false;
        }
@@ -605,13 +592,7 @@ _PUBLIC_ bool mapitest_oxctable_SeekRowBookmark(struct mapitest *mt)
                return false;
        }
 
-       /* Step 5. Get the total number of rows */
-       retval = GetRowCount(&obj_htable, &count);
-       if (GetLastError() != MAPI_E_SUCCESS) {
-               return false;
-       }
-
-       /* Step 6. Create Bookmarks */
+       /* Step 5. Create Bookmarks */
        bkPosition = talloc_array(mt->mem_ctx, uint32_t, 1);
        while (((retval = QueryRows(&obj_htable, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND) &&
               SRowSet.cRows) {
@@ -628,7 +609,7 @@ _PUBLIC_ bool mapitest_oxctable_SeekRowBookmark(struct mapitest *mt)
 
        retval = mapi_object_bookmark_get_count(&obj_htable, &count);
 
-       /* Step 7. SeekRowBookmark */
+       /* Step 6. SeekRowBookmark */
        for (i = 0; i < count; i++) {
                retval = SeekRowBookmark(&obj_htable, bkPosition[i], 0, &row);
                mapitest_print(mt, "%-35s (%.2d): 0x%.8x\n", "SeekRowBookmark", i, GetLastError());
index 7a17377640432c3e8192cd3275538096c5e10812..84f5da3167aeb728342c23a505978127e65aa2d3 100644 (file)
@@ -144,7 +144,7 @@ static enum MAPISTATUS openchangeclient_getdir(TALLOC_CTX *mem_ctx,
        uint32_t                index;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(obj_container, &obj_htable);
+       retval = GetHierarchyTable(obj_container, &obj_htable, 0, NULL);
        MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x2,
@@ -417,9 +417,11 @@ static enum MAPISTATUS openchangeclient_fetchmail(mapi_object_t *obj_store,
                MAPI_RETVAL_IF(retval, retval, mem_ctx);
        }
 
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, &count);
        MAPI_RETVAL_IF(retval, retval, mem_ctx);
 
+       printf("MAILBOX (%d messages)\n", count);
+
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x5,
                                          PR_FID,
                                          PR_MID,
@@ -430,11 +432,6 @@ static enum MAPISTATUS openchangeclient_fetchmail(mapi_object_t *obj_store,
        MAPIFreeBuffer(SPropTagArray);
        MAPI_RETVAL_IF(retval, retval, mem_ctx);
 
-       retval = GetRowCount(&obj_table, &count);
-       MAPI_RETVAL_IF(retval, retval, mem_ctx);
-
-       printf("MAILBOX (%d messages)\n", count);
-
        while ((retval = QueryRows(&obj_table, count, TBL_ADVANCE, &rowset)) != MAPI_E_NOT_FOUND && rowset.cRows) {
                count -= rowset.cRows;
                for (i = 0; i < rowset.cRows; i++) {
@@ -962,7 +959,7 @@ static bool openchangeclient_deletemail(TALLOC_CTX *mem_ctx,
                if (retval != MAPI_E_SUCCESS) return false;
        }
 
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x5,
@@ -1584,7 +1581,7 @@ static bool get_child_folders(TALLOC_CTX *mem_ctx, mapi_object_t *parent, mapi_i
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x6,
@@ -1644,7 +1641,7 @@ static bool get_child_folders_pf(TALLOC_CTX *mem_ctx, mapi_object_t *parent, map
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x3,
@@ -1765,9 +1762,11 @@ static bool openchangeclient_fetchitems(TALLOC_CTX *mem_ctx, mapi_object_t *obj_
 
        /* Operations on the  folder */
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_folder, &obj_table);
+       retval = GetContentsTable(&obj_folder, &obj_table, 0, &count);
        if (retval != MAPI_E_SUCCESS) return false;
 
+       printf("MAILBOX (%d messages)\n", count);
+
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x8,
                                          PR_FID,
                                          PR_MID,
@@ -1781,11 +1780,6 @@ static bool openchangeclient_fetchitems(TALLOC_CTX *mem_ctx, mapi_object_t *obj_
        MAPIFreeBuffer(SPropTagArray);
        if (retval != MAPI_E_SUCCESS) return false;
 
-       retval = GetRowCount(&obj_table, &count);
-       MAPI_RETVAL_IF(retval, retval, mem_ctx);
-
-       printf("MAILBOX (%d messages)\n", count);
-
        while ((retval = QueryRows(&obj_table, count, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND && SRowSet.cRows) {
                count -= SRowSet.cRows;
                for (i = 0; i < SRowSet.cRows; i++) {
@@ -1860,7 +1854,7 @@ static enum MAPISTATUS folder_lookup(TALLOC_CTX *mem_ctx,
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x1, PR_FID);
@@ -1908,7 +1902,7 @@ static enum MAPISTATUS message_lookup(TALLOC_CTX *mem_ctx,
        const uint64_t          *mid;
 
        mapi_object_init(&obj_htable);
-       retval = GetContentsTable(obj_folder, &obj_htable);
+       retval = GetContentsTable(obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x2, PR_FID, PR_MID);
@@ -2103,7 +2097,7 @@ static enum MAPISTATUS openchangeclient_findmail(mapi_object_t *obj_store,
 
        /* Retrieve contents table */
        mapi_object_init(&obj_table);
-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_inbox, &obj_table, 0, &count);
        MAPI_RETVAL_IF(retval, GetLastError(), mem_ctx);
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x2,
@@ -2113,9 +2107,6 @@ static enum MAPISTATUS openchangeclient_findmail(mapi_object_t *obj_store,
        MAPIFreeBuffer(SPropTagArray);
        MAPI_RETVAL_IF(retval, GetLastError(), mem_ctx);
 
-       retval = GetRowCount(&obj_table, &count);
-       MAPI_RETVAL_IF(retval, GetLastError(), mem_ctx);
-
        while ((retval = QueryRows(&obj_table, 0xa, TBL_ADVANCE, &SRowSet)) != MAPI_E_NOT_FOUND && SRowSet.cRows) {
                for (i = 0; i < SRowSet.cRows; i++) {
                        lpProp = get_SPropValue_SRowSet(&SRowSet, PR_MID);
index 59b7009a7869b200fa26f8e2bf8e22ff9d7e713d..577020dd2e14e9ce9d461e25f27699b38cfad3e8 100644 (file)
@@ -103,7 +103,7 @@ static bool get_child_folders_pf(TALLOC_CTX *mem_ctx, mapi_object_t *parent, map
        if (retval != MAPI_E_SUCCESS) return false;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(&obj_folder, &obj_htable);
+       retval = GetHierarchyTable(&obj_folder, &obj_htable, 0, NULL);
        if (retval != MAPI_E_SUCCESS) return false;
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x3,
@@ -151,7 +151,7 @@ static enum MAPISTATUS openchangepfadmin_getdir(TALLOC_CTX *mem_ctx,
        uint32_t                index;
 
        mapi_object_init(&obj_htable);
-       retval = GetHierarchyTable(obj_container, &obj_htable);
+       retval = GetHierarchyTable(obj_container, &obj_htable, 0, NULL);
        MAPI_RETVAL_IF(retval, GetLastError(), NULL);
 
        SPropTagArray = set_SPropTagArray(mem_ctx, 0x2,