From: <svn...@op...> - 2009-04-16 13:08:11
|
Author: bellmich Date: Thu Apr 16 15:08:03 2009 New Revision: 1049 URL: http://libsyncml.opensync.org/changeset/1049 Log: added support for a separate mapping callback Modified: trunk/libsyncml/data_sync_api/callbacks.h trunk/libsyncml/data_sync_api/data_sync.c trunk/libsyncml/data_sync_api/data_sync.h trunk/libsyncml/data_sync_api/data_sync_callbacks.c trunk/libsyncml/data_sync_api/data_sync_callbacks.h Modified: trunk/libsyncml/data_sync_api/callbacks.h ============================================================================== --- trunk/libsyncml/data_sync_api/callbacks.h Thu Apr 16 14:31:29 2009 (r1048) +++ trunk/libsyncml/data_sync_api/callbacks.h Thu Apr 16 15:08:03 2009 (r1049) @@ -52,12 +52,21 @@ unsigned int size, void *userdata, SmlError **error); +/* FIXME: newuid must be removed before next API break */ +/* FIXME: DEPRECATED */ typedef SmlBool (* SmlDataSyncChangeStatusCallback) ( SmlDataSyncObject *dsObject, unsigned int code, const char *newuid, void *userdata, SmlError **error); +typedef SmlBool (* SmlDataSyncMappingCallback) ( + SmlDataSyncObject *dsObject, + const char *source, + const char *orig, + const char *newuid, + void *userdata, + SmlError **error); typedef char *(* SmlDataSyncGetAnchorCallback) ( SmlDataSyncObject *dsObject, const char *name, @@ -99,6 +108,10 @@ SmlDataSyncObject *dsObject, SmlDataSyncChangeCallback callback, void *userdata); +void smlDataSyncRegisterMappingCallback( + SmlDataSyncObject *dsObject, + SmlDataSyncMappingCallback callback, + void *userdata); void smlDataSyncRegisterGetAnchorCallback( SmlDataSyncObject *dsObject, SmlDataSyncGetAnchorCallback callback, Modified: trunk/libsyncml/data_sync_api/data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.c Thu Apr 16 14:31:29 2009 (r1048) +++ trunk/libsyncml/data_sync_api/data_sync.c Thu Apr 16 15:08:03 2009 (r1049) @@ -37,6 +37,7 @@ #include "data_sync_devinf.h" #include "data_sync_loop.h" #include "transport.h" +#include "libsyncml/objects/sml_ds_server_internals.h" /* ********************************* */ /* object creation and configuration */ @@ -431,6 +432,31 @@ smlTrace(TRACE_EXIT, "%s", __func__); } +void smlDataSyncRegisterMapCallback( + SmlDataSyncObject *dsObject, + SmlDataSyncMappingCallback callback, + void *userdata) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + smlAssert(dsObject); + smlAssert(callback); + + dsObject->mappingCallback = callback; + dsObject->mappingUserdata = userdata; + + GList *o = dsObject->datastores; + for (;o;o = o->next) { + SmlDataSyncDatastore *datastore = o->data; + if (datastore->session) { + smlDsSessionGetMapping(datastore->session, + smlDataSyncMappingCallback, datastore); + } + } + + smlTrace(TRACE_EXIT, "%s", __func__); +} + + void smlDataSyncRegisterGetAnchorCallback( SmlDataSyncObject *dsObject, SmlDataSyncGetAnchorCallback callback, Modified: trunk/libsyncml/data_sync_api/data_sync.h ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.h Thu Apr 16 14:31:29 2009 (r1048) +++ trunk/libsyncml/data_sync_api/data_sync.h Thu Apr 16 15:08:03 2009 (r1049) @@ -175,6 +175,9 @@ SmlDataSyncChangeStatusCallback changeStatusCallback; + SmlDataSyncMappingCallback mappingCallback; + void *mappingUserdata; + SmlDataSyncGetAnchorCallback getAnchorCallback; void *getAnchorUserdata; Modified: trunk/libsyncml/data_sync_api/data_sync_callbacks.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_callbacks.c Thu Apr 16 14:31:29 2009 (r1048) +++ trunk/libsyncml/data_sync_api/data_sync_callbacks.c Thu Apr 16 15:08:03 2009 (r1049) @@ -385,6 +385,8 @@ smlDataSyncSyncCallback, datastore); smlDsSessionGetChanges(datastore->session, smlDataSyncChangeCallback, datastore); + smlDsSessionGetMapping(datastore->session, + smlDataSyncMappingCallback, datastore); } smlDsSessionRef(dsession); } @@ -634,6 +636,41 @@ smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(&error)); smlErrorDeref(&error); } + +void smlDataSyncMappingCallback( + SmlDsSession *dsession, + SmlLocation *orig, + SmlLocation *newuid, + void *userdata) +{ + smlTrace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, dsession, VA_STRING(smlLocationGetURI(orig)), VA_STRING(smlLocationGetURI(newuid)), userdata); + + SmlError *error = NULL; + SmlDataSyncDatastore *datastore = userdata; + + smlAssert(datastore); + smlAssert(datastore->dsObject); + smlAssert(datastore->dsObject->mappingCallback); + + /* perform callback */ + if (!datastore->dsObject->mappingCallback( + datastore->dsObject, datastore->sourceUri, + smlLocationGetURI(orig), + smlLocationGetURI(newuid), + datastore->dsObject->mappingUserdata, + &error)) + goto error; + + smlTrace(TRACE_EXIT, "%s", __func__); + return; +error: + smlErrorRef(&error); + smlDataSyncSendEvent( + datastore->dsObject, SML_DATA_SYNC_EVENT_ERROR, + datastore->dsObject->eventUserdata, error); + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(&error)); + smlErrorDeref(&error); +} /* ********************************* */ /* ***** Map Callbacks ***** */ Modified: trunk/libsyncml/data_sync_api/data_sync_callbacks.h ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_callbacks.h Thu Apr 16 14:31:29 2009 (r1048) +++ trunk/libsyncml/data_sync_api/data_sync_callbacks.h Thu Apr 16 15:08:03 2009 (r1049) @@ -89,6 +89,12 @@ const char *newuid, void *userdata); +void smlDataSyncMappingCallback( + SmlDsSession *dsession, + SmlLocation *orig, + SmlLocation *newuid, + void *userdata); + /* ********************************* */ /* ***** Map Callbacks ***** */ /* ********************************* */ |