256
283
return MAPI_E_SUCCESS;
286
static bool emsmdbp_fill_notification(TALLOC_CTX *mem_ctx,
287
struct emsmdbp_context *emsmdbp_ctx,
288
struct EcDoRpc_MAPI_REPL *mapi_repl,
289
struct mapistore_subscription *subscription,
290
struct mapistore_notification *notification,
294
struct Notify_repl *reply;
295
struct emsmdbp_object *handle_object;
296
struct emsmdbp_object_table *table;
297
struct mapi_handles *handle_object_handle;
298
enum MAPISTATUS retval;
299
void **data_pointers;
300
DATA_BLOB *table_row;
301
enum MAPISTATUS *retvals;
302
uint32_t contextID, saved_prop_count, prev_instance;
303
enum MAPITAGS *saved_properties, *previous_row_properties;
304
uint64_t prev_fid, prev_mid;
306
mapi_repl->opnum = op_MAPI_Notify;
307
reply = &mapi_repl->u.mapi_Notify;
308
reply->LogonId = 0; /* TODO: seems to be always 0 ? */
310
retval = mapi_handles_search(emsmdbp_ctx->handles_ctx, subscription->handle, &handle_object_handle);
312
reply->NotificationType = fnevCriticalError;
313
DEBUG(5, ("notification handle not found\n"));
316
retval = mapi_handles_get_private_data(handle_object_handle, (void **) &handle_object);
318
reply->NotificationType = fnevCriticalError;
319
DEBUG(5, ("object not found for notification handle\n"));
323
reply->NotificationHandle = subscription->handle;
324
switch (notification->object_type) {
325
case MAPISTORE_MESSAGE:
326
reply->NotificationType = fnevMbit;
328
case MAPISTORE_FOLDER:
329
if (notification->parameters.object_parameters.new_message_count) {
330
reply->NotificationType = fnevTbit;
333
reply->NotificationType = 0; // FIXME - THIS IS WRONG - IT'S AN INVALID NOTIFICATION TYPE
336
case MAPISTORE_TABLE:
337
reply->NotificationType = fnevTableModified;
338
if (notification->parameters.table_parameters.table_type != MAPISTORE_FOLDER_TABLE) {
339
reply->NotificationType |= (fnevMbit | fnevSbit);
343
reply->NotificationType = fnevCriticalError;
344
DEBUG(5, ("unknown value for notification object type: %d\n", notification->object_type));
348
if (notification->object_type == MAPISTORE_TABLE) {
349
table = handle_object->object.table;
351
/* FIXME: here is a hack to update table counters and which would not be needed if the backend had access to the table structure... */
352
if (notification->event == MAPISTORE_OBJECT_CREATED) {
353
table->denominator++;
355
else if (notification->event == MAPISTORE_OBJECT_DELETED) {
356
table->denominator--;
357
if (table->numerator >= table->denominator) {
358
table->numerator = table->denominator;
362
if (notification->parameters.table_parameters.table_type == MAPISTORE_FOLDER_TABLE) {
363
if (notification->event == MAPISTORE_OBJECT_CREATED || notification->event == MAPISTORE_OBJECT_MODIFIED) {
364
if (notification->parameters.table_parameters.row_id > 0) {
365
/* FIXME: this hack enables the fetching of some properties from the previous row */
366
saved_prop_count = table->prop_count;
367
saved_properties = table->properties;
368
previous_row_properties = talloc_array(NULL, enum MAPITAGS, 1);
369
previous_row_properties[0] = PR_FID;
370
table->properties = previous_row_properties;
371
table->prop_count = 1;
372
contextID = emsmdbp_get_contextID(handle_object);
373
mapistore_table_set_columns(emsmdbp_ctx->mstore_ctx, contextID, handle_object->backend_object, table->prop_count, (enum MAPITAGS *) table->properties);
374
data_pointers = emsmdbp_object_table_get_row_props(mem_ctx, emsmdbp_ctx, handle_object,
375
notification->parameters.table_parameters.row_id - 1, MAPISTORE_PREFILTERED_QUERY,
378
prev_fid = *(uint32_t *) data_pointers[0];
379
talloc_free(data_pointers);
385
table->prop_count = saved_prop_count;
386
table->properties = saved_properties;
387
talloc_free(previous_row_properties);
388
mapistore_table_set_columns(emsmdbp_ctx->mstore_ctx, contextID, handle_object->backend_object, table->prop_count, (enum MAPITAGS *) table->properties);
394
table_row = talloc_zero(mem_ctx, DATA_BLOB);
395
data_pointers = emsmdbp_object_table_get_row_props(mem_ctx, emsmdbp_ctx, handle_object,
396
notification->parameters.table_parameters.row_id, MAPISTORE_PREFILTERED_QUERY,
399
emsmdbp_fill_table_row_blob(mem_ctx, emsmdbp_ctx, table_row, table->prop_count, (enum MAPITAGS *) table->properties, data_pointers, retvals);
400
talloc_free(data_pointers);
401
talloc_free(retvals);
405
DEBUG(5, (__location__": no data returned for row, notification ignored\n"));
409
/* FIXME: for some reason, TABLE_ROW_MODIFIED and TABLE_ROW_DELETED do not work... */
410
reply->NotificationData.SearchTableChange.TableEvent = TABLE_CHANGED;
411
switch (notification->event) {
412
case MAPISTORE_OBJECT_CREATED:
413
/* case MAPISTORE_OBJECT_MODIFIED: */
414
reply->NotificationData.HierarchyTableChange.TableEvent = (notification->event == MAPISTORE_OBJECT_CREATED ? TABLE_ROW_ADDED : TABLE_ROW_MODIFIED);
415
reply->NotificationData.HierarchyTableChange.HierarchyTableChangeUnion.HierarchyRowAddedNotification.FID = notification->parameters.table_parameters.object_id;
416
reply->NotificationData.HierarchyTableChange.HierarchyTableChangeUnion.HierarchyRowAddedNotification.InsertAfterFID = prev_fid;
417
reply->NotificationData.HierarchyTableChange.HierarchyTableChangeUnion.HierarchyRowAddedNotification.Columns = *table_row;
419
case MAPISTORE_OBJECT_MODIFIED:
420
case MAPISTORE_OBJECT_DELETED:
421
case MAPISTORE_OBJECT_COPIED:
422
case MAPISTORE_OBJECT_MOVED:
423
case MAPISTORE_OBJECT_NEWMAIL:
425
/* case MAPISTORE_OBJECT_DELETED: */
426
/* reply->NotificationData.HierarchyTableChange.TableEvent = TABLE_ROW_DELETED; */
427
/* reply->NotificationData.HierarchyTableChange.HierarchyTableChangeUnion.HierarchyRowDeletedNotification.FID = notification->parameters.table_parameters.object_id; */
430
/* reply->NotificationType = fnevCriticalError; */
431
/* DEBUG(5, ("unknown value for notification event: %d\n", notification->event)); */
436
if (notification->event == MAPISTORE_OBJECT_CREATED || notification->event == MAPISTORE_OBJECT_MODIFIED) {
437
if (notification->parameters.table_parameters.row_id > 0) {
438
/* FIXME: this hack enables the fetching of some properties from the previous row */
439
saved_prop_count = table->prop_count;
440
saved_properties = table->properties;
441
previous_row_properties = talloc_array(NULL, enum MAPITAGS, 3);
442
previous_row_properties[0] = PR_FID;
443
previous_row_properties[1] = PR_MID;
444
previous_row_properties[2] = PR_INSTANCE_NUM;
445
table->properties = previous_row_properties;
446
table->prop_count = 3;
447
contextID = emsmdbp_get_contextID(handle_object);
448
mapistore_table_set_columns(emsmdbp_ctx->mstore_ctx, contextID, handle_object->backend_object, table->prop_count, (enum MAPITAGS *) table->properties);
449
data_pointers = emsmdbp_object_table_get_row_props(mem_ctx, emsmdbp_ctx, handle_object, notification->parameters.table_parameters.row_id - 1, MAPISTORE_PREFILTERED_QUERY, NULL);
451
prev_fid = *(uint64_t *) data_pointers[0];
452
prev_mid = *(uint64_t *) data_pointers[1];
453
prev_instance = *(uint32_t *) data_pointers[2];
454
talloc_free(data_pointers);
462
table->prop_count = saved_prop_count;
463
table->properties = saved_properties;
464
talloc_free(previous_row_properties);
465
mapistore_table_set_columns(emsmdbp_ctx->mstore_ctx, contextID, handle_object->backend_object, table->prop_count, (enum MAPITAGS *) table->properties);
473
table_row = talloc_zero(mem_ctx, DATA_BLOB);
474
data_pointers = emsmdbp_object_table_get_row_props(mem_ctx, emsmdbp_ctx, handle_object,
475
notification->parameters.table_parameters.row_id, MAPISTORE_PREFILTERED_QUERY,
478
emsmdbp_fill_table_row_blob(mem_ctx, emsmdbp_ctx, table_row, table->prop_count, (enum MAPITAGS *) table->properties, data_pointers, retvals);
479
talloc_free(data_pointers);
480
talloc_free(retvals);
484
DEBUG(5, (__location__": no data returned for row, notification ignored\n"));
488
/* FIXME: for some reason, TABLE_ROW_MODIFIED and TABLE_ROW_DELETED do not work... */
489
reply->NotificationData.SearchTableChange.TableEvent = TABLE_CHANGED;
490
switch (notification->event) {
491
case MAPISTORE_OBJECT_CREATED:
492
/* case MAPISTORE_OBJECT_MODIFIED: */
493
reply->NotificationData.SearchTableChange.TableEvent = (notification->event == MAPISTORE_OBJECT_CREATED ? TABLE_ROW_ADDED : TABLE_ROW_MODIFIED);
494
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.FID = notification->parameters.table_parameters.folder_id;
495
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.MID = notification->parameters.table_parameters.object_id;
496
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.Instance = notification->parameters.table_parameters.instance_id;
497
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.InsertAfterFID = prev_fid;
498
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.InsertAfterMID = prev_mid;
499
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.InsertAfterInstance = prev_instance;
500
reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowAddedNotification.Columns = *table_row;
502
/* case MAPISTORE_OBJECT_DELETED: */
503
/* reply->NotificationData.SearchTableChange.TableEvent = TABLE_ROW_DELETED; */
504
/* reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowDeletedNotification.FID = notification->parameters.table_parameters.folder_id; */
505
/* reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowDeletedNotification.MID = notification->parameters.table_parameters.object_id; */
506
/* reply->NotificationData.SearchTableChange.ContentsTableChangeUnion.ContentsRowDeletedNotification.Instance = notification->parameters.table_parameters.instance_id; */
509
/* reply->NotificationType = fnevCriticalError; */
510
/* DEBUG(5, ("unknown value for notification event: %d\n", notification->event)); */
512
case MAPISTORE_OBJECT_MODIFIED:
513
case MAPISTORE_OBJECT_DELETED:
514
case MAPISTORE_OBJECT_COPIED:
515
case MAPISTORE_OBJECT_MOVED:
516
case MAPISTORE_OBJECT_NEWMAIL:
522
switch (notification->event) {
523
case MAPISTORE_OBJECT_NEWMAIL:
524
reply->NotificationType |= fnevNewMail;
526
case MAPISTORE_OBJECT_CREATED:
527
reply->NotificationType |= fnevObjectCreated;
529
case MAPISTORE_OBJECT_DELETED:
530
reply->NotificationType |= fnevObjectDeleted;
532
case MAPISTORE_OBJECT_MODIFIED:
533
reply->NotificationType |= fnevObjectModified;
535
case MAPISTORE_OBJECT_COPIED:
536
reply->NotificationType |= fnevObjectCopied;
538
case MAPISTORE_OBJECT_MOVED:
539
reply->NotificationType |= fnevObjectMoved;
542
reply->NotificationType = fnevCriticalError;
543
DEBUG(5, ("unknown value for notification event: %d\n", notification->event));
546
if (notification->object_type == MAPISTORE_MESSAGE) {
547
switch (notification->event) {
548
case MAPISTORE_OBJECT_NEWMAIL:
549
reply->NotificationData.NewMailNotification.FID = notification->parameters.object_parameters.folder_id;
550
reply->NotificationData.NewMailNotification.MID = notification->parameters.object_parameters.object_id;
552
reply->NotificationData.NewMailNotification.MessageFlags = 0x4;
553
reply->NotificationData.NewMailNotification.UnicodeFlag = true;
554
reply->NotificationData.NewMailNotification.MessageClass.lpszW = "IPF.Note";
556
case MAPISTORE_OBJECT_CREATED:
557
reply->NotificationData.MessageCreatedNotification.FID = notification->parameters.object_parameters.folder_id;
558
reply->NotificationData.MessageCreatedNotification.MID = notification->parameters.object_parameters.object_id;
559
reply->NotificationData.MessageCreatedNotification.TagCount = notification->parameters.object_parameters.tag_count;
560
if (notification->parameters.object_parameters.tag_count
561
&& notification->parameters.object_parameters.tag_count != 0xffff) {
562
reply->NotificationData.MessageCreatedNotification.NotificationTags.Tags = talloc_memdup(mem_ctx, notification->parameters.object_parameters.tags, notification->parameters.object_parameters.tag_count * sizeof(enum MAPITAGS));
565
reply->NotificationData.MessageCreatedNotification.NotificationTags.Tags = NULL;
568
case MAPISTORE_OBJECT_MODIFIED:
569
reply->NotificationData.MessageModifiedNotification.FID = notification->parameters.object_parameters.folder_id;
570
reply->NotificationData.MessageModifiedNotification.MID = notification->parameters.object_parameters.object_id;
571
reply->NotificationData.MessageModifiedNotification.TagCount = notification->parameters.object_parameters.tag_count;
572
if (notification->parameters.object_parameters.tag_count
573
&& notification->parameters.object_parameters.tag_count != 0xffff) {
574
reply->NotificationData.MessageModifiedNotification.NotificationTags.Tags = talloc_memdup(mem_ctx, notification->parameters.object_parameters.tags, notification->parameters.object_parameters.tag_count * sizeof(enum MAPITAGS));
577
reply->NotificationData.MessageModifiedNotification.NotificationTags.Tags = NULL;
580
case MAPISTORE_OBJECT_COPIED:
581
case MAPISTORE_OBJECT_MOVED:
582
reply->NotificationData.MessageMoveNotification.FID = notification->parameters.object_parameters.folder_id;
583
reply->NotificationData.MessageMoveNotification.MID = notification->parameters.object_parameters.object_id;
584
reply->NotificationData.MessageMoveNotification.OldFID = notification->parameters.object_parameters.old_folder_id;
585
reply->NotificationData.MessageMoveNotification.OldMID = notification->parameters.object_parameters.old_object_id;
588
default: /* MAPISTORE_OBJECT_DELETED */
589
reply->NotificationData.MessageDeletedNotification.FID = notification->parameters.object_parameters.folder_id;
590
reply->NotificationData.MessageDeletedNotification.MID = notification->parameters.object_parameters.object_id;
593
else { /* MAPISTORE_FOLDER */
594
switch (notification->event) {
595
case MAPISTORE_OBJECT_NEWMAIL:
596
reply->NotificationData.NewMailNotification.FID = notification->parameters.object_parameters.folder_id;
597
reply->NotificationData.NewMailNotification.MID = notification->parameters.object_parameters.object_id;
599
reply->NotificationData.NewMailNotification.MessageFlags = 0x4;
600
reply->NotificationData.NewMailNotification.UnicodeFlag = true;
601
reply->NotificationData.NewMailNotification.MessageClass.lpszW = "IPF.Note";
603
case MAPISTORE_OBJECT_CREATED:
604
reply->NotificationData.FolderCreatedNotification.ParentFID = notification->parameters.object_parameters.folder_id;
605
reply->NotificationData.FolderCreatedNotification.FID = notification->parameters.object_parameters.object_id;
606
reply->NotificationData.FolderCreatedNotification.TagCount = notification->parameters.object_parameters.tag_count;
607
if (notification->parameters.object_parameters.tag_count
608
&& notification->parameters.object_parameters.tag_count != 0xffff) {
609
reply->NotificationData.FolderCreatedNotification.NotificationTags.Tags = talloc_memdup(mem_ctx, notification->parameters.object_parameters.tags, notification->parameters.object_parameters.tag_count * sizeof(enum MAPITAGS));
612
reply->NotificationData.FolderCreatedNotification.NotificationTags.Tags = NULL;
615
case MAPISTORE_OBJECT_MODIFIED:
616
reply->NotificationData.FolderModifiedNotification_10.FID = notification->parameters.object_parameters.object_id;
617
reply->NotificationData.FolderModifiedNotification_10.TagCount = notification->parameters.object_parameters.tag_count;
618
if (notification->parameters.object_parameters.tag_count
619
&& notification->parameters.object_parameters.tag_count != 0xffff) {
620
reply->NotificationData.FolderModifiedNotification_10.NotificationTags.Tags = talloc_memdup(mem_ctx, notification->parameters.object_parameters.tags, notification->parameters.object_parameters.tag_count * sizeof(enum MAPITAGS));
623
reply->NotificationData.FolderModifiedNotification_10.NotificationTags.Tags = NULL;
626
if (notification->parameters.object_parameters.new_message_count) {
627
reply->NotificationData.FolderModifiedNotification_1010.TotalMessageCount = notification->parameters.object_parameters.message_count;
631
default: /* MAPISTORE_OBJECT_DELETED */
632
reply->NotificationData.FolderDeletedNotification.ParentFID = notification->parameters.object_parameters.folder_id;
633
reply->NotificationData.FolderDeletedNotification.FID = notification->parameters.object_parameters.object_id;
639
*sizep += libmapiserver_RopNotify_size(mapi_repl);
260
644
static struct mapi_response *EcDoRpc_process_transaction(TALLOC_CTX *mem_ctx,
261
645
struct emsmdbp_context *emsmdbp_ctx,
262
646
struct mapi_request *mapi_request)
264
enum MAPISTATUS retval;
265
struct mapi_response *mapi_response;
648
enum MAPISTATUS retval;
649
struct mapi_response *mapi_response;
650
struct mapistore_notification_list *notification_holder;
651
struct mapistore_notification_list *nlist;
652
struct mapistore_notification_list *el;
653
struct mapistore_subscription_list *sel;
654
struct mapistore_subscription_list *subscription_list;
655
struct mapistore_subscription_list *subscription_holder;
266
656
uint32_t handles_length;
267
657
uint16_t size = 0;
660
bool needs_realloc = true;
271
662
/* Sanity checks */
272
663
if (!emsmdbp_ctx) return NULL;
618
1112
&(mapi_response->mapi_repl[idx]),
619
1113
mapi_response->handles, &size);
621
/* op_MAPI_SyncConfigure: 0x70 */
622
/* op_MAPI_SyncImportMessageChange: 0x72 */
623
/* op_MAPI_SyncImportHierarchyChange: 0x73 */
624
/* op_MAPI_SyncImportDeletes: 0x74 */
625
/* op_MAPI_SyncUploadStateStreamBegin: 0x75 */
626
/* op_MAPI_SyncUploadStateStreamContinue: 0x76 */
627
/* op_MAPI_SyncUploadStateStreamEnd: 0x77 */
628
/* op_MAPI_SyncImportMessageMove: 0x78 */
1115
case op_MAPI_SyncConfigure: /* 0x70 */
1116
retval = EcDoRpc_RopSyncConfigure(mem_ctx, emsmdbp_ctx,
1117
&(mapi_request->mapi_req[i]),
1118
&(mapi_response->mapi_repl[idx]),
1119
mapi_response->handles, &size);
1121
case op_MAPI_SyncImportMessageChange: /* 0x72 */
1122
retval = EcDoRpc_RopSyncImportMessageChange(mem_ctx, emsmdbp_ctx,
1123
&(mapi_request->mapi_req[i]),
1124
&(mapi_response->mapi_repl[idx]),
1125
mapi_response->handles, &size);
1127
case op_MAPI_SyncImportHierarchyChange: /* 0x73 */
1128
retval = EcDoRpc_RopSyncImportHierarchyChange(mem_ctx, emsmdbp_ctx,
1129
&(mapi_request->mapi_req[i]),
1130
&(mapi_response->mapi_repl[idx]),
1131
mapi_response->handles, &size);
1133
case op_MAPI_SyncImportDeletes: /* 0x74 */
1134
retval = EcDoRpc_RopSyncImportDeletes(mem_ctx, emsmdbp_ctx,
1135
&(mapi_request->mapi_req[i]),
1136
&(mapi_response->mapi_repl[idx]),
1137
mapi_response->handles, &size);
1139
case op_MAPI_SyncUploadStateStreamBegin: /* 0x75 */
1140
retval = EcDoRpc_RopSyncUploadStateStreamBegin(mem_ctx, emsmdbp_ctx,
1141
&(mapi_request->mapi_req[i]),
1142
&(mapi_response->mapi_repl[idx]),
1143
mapi_response->handles, &size);
1145
case op_MAPI_SyncUploadStateStreamContinue: /* 0x76 */
1146
retval = EcDoRpc_RopSyncUploadStateStreamContinue(mem_ctx, emsmdbp_ctx,
1147
&(mapi_request->mapi_req[i]),
1148
&(mapi_response->mapi_repl[idx]),
1149
mapi_response->handles, &size);
1151
case op_MAPI_SyncUploadStateStreamEnd: /* 0x77 */
1152
retval = EcDoRpc_RopSyncUploadStateStreamEnd(mem_ctx, emsmdbp_ctx,
1153
&(mapi_request->mapi_req[i]),
1154
&(mapi_response->mapi_repl[idx]),
1155
mapi_response->handles, &size);
1157
case op_MAPI_SyncImportMessageMove: /* 0x78 */
1158
retval = EcDoRpc_RopSyncImportMessageMove(mem_ctx, emsmdbp_ctx,
1159
&(mapi_request->mapi_req[i]),
1160
&(mapi_response->mapi_repl[idx]),
1161
mapi_response->handles, &size);
629
1163
/* op_MAPI_SetPropertiesNoReplicate: 0x79 */
630
/* op_MAPI_DeletePropertiesNoReplicate: 0x7a */
631
/* op_MAPI_GetStoreState: 0x7b */
632
/* op_MAPI_SyncOpenCollector: 0x7e */
633
/* op_MAPI_GetLocalReplicaIds: 0x7f */
634
/* op_MAPI_SyncImportReadStateChanges: 0x80 */
635
/* op_MAPI_ResetTable: 0x81 */
636
/* op_MAPI_SyncGetTransferState: 0x82 */
1164
case op_MAPI_DeletePropertiesNoReplicate: /* 0x7a */
1165
retval = EcDoRpc_RopDeletePropertiesNoReplicate(mem_ctx, emsmdbp_ctx,
1166
&(mapi_request->mapi_req[i]),
1167
&(mapi_response->mapi_repl[idx]),
1168
mapi_response->handles, &size);
1170
case op_MAPI_GetStoreState: /* 0x7b */
1171
retval = EcDoRpc_RopGetStoreState(mem_ctx, emsmdbp_ctx,
1172
&(mapi_request->mapi_req[i]),
1173
&(mapi_response->mapi_repl[idx]),
1174
mapi_response->handles, &size);
1176
case op_MAPI_SyncOpenCollector: /* 0x7e */
1177
retval = EcDoRpc_RopSyncOpenCollector(mem_ctx, emsmdbp_ctx,
1178
&(mapi_request->mapi_req[i]),
1179
&(mapi_response->mapi_repl[idx]),
1180
mapi_response->handles, &size);
1182
case op_MAPI_GetLocalReplicaIds: /* 0x7f */
1183
retval = EcDoRpc_RopGetLocalReplicaIds(mem_ctx, emsmdbp_ctx,
1184
&(mapi_request->mapi_req[i]),
1185
&(mapi_response->mapi_repl[idx]),
1186
mapi_response->handles, &size);
1188
case op_MAPI_SyncImportReadStateChanges: /* 0x80 */
1189
retval = EcDoRpc_RopSyncImportReadStateChanges(mem_ctx, emsmdbp_ctx,
1190
&(mapi_request->mapi_req[i]),
1191
&(mapi_response->mapi_repl[idx]),
1192
mapi_response->handles, &size);
1194
case op_MAPI_ResetTable: /* 0x81 */
1195
retval = EcDoRpc_RopResetTable(mem_ctx, emsmdbp_ctx,
1196
&(mapi_request->mapi_req[i]),
1197
&(mapi_response->mapi_repl[idx]),
1198
mapi_response->handles, &size);
1200
case op_MAPI_SyncGetTransferState: /* 0x82 */
1201
retval = EcDoRpc_RopSyncGetTransferState(mem_ctx, emsmdbp_ctx,
1202
&(mapi_request->mapi_req[i]),
1203
&(mapi_response->mapi_repl[idx]),
1204
mapi_response->handles, &size);
637
1206
/* op_MAPI_OpenPublicFolderByName: 0x87 */
638
1207
/* op_MAPI_SetSyncNotificationGuid: 0x88 */
639
1208
/* op_MAPI_FreeBookmark: 0x89 */
640
1209
/* op_MAPI_WriteAndCommitStream: 0x90 */
641
1210
/* op_MAPI_HardDeleteMessages: 0x91 */
642
1211
/* op_MAPI_HardDeleteMessagesAndSubfolders: 0x92 */
1212
case op_MAPI_SetLocalReplicaMidsetDeleted: /* 0x93 */
1213
retval = EcDoRpc_RopSetLocalReplicaMidsetDeleted(mem_ctx, emsmdbp_ctx,
1214
&(mapi_request->mapi_req[i]),
1215
&(mapi_response->mapi_repl[idx]),
1216
mapi_response->handles, &size);
643
1218
case op_MAPI_Logon: /* 0xfe */
644
1219
retval = EcDoRpc_RopLogon(mem_ctx, emsmdbp_ctx,
645
1220
&(mapi_request->mapi_req[i]),