From: <svn...@op...> - 2009-11-09 16:33:48
|
Author: bellmich Date: Mon Nov 9 17:33:17 2009 New Revision: 5952 URL: http://www.opensync.org/changeset/5952 Log: migrated code to actual libsyncml trunk The code compiles withouts warnings. This does not mean that it works! Modified: plugins/syncml/trunk/CMakeLists.txt plugins/syncml/trunk/src/syncml_callbacks.c plugins/syncml/trunk/src/syncml_callbacks.h plugins/syncml/trunk/src/syncml_common.c plugins/syncml/trunk/src/syncml_common.h plugins/syncml/trunk/src/syncml_devinf.c plugins/syncml/trunk/src/syncml_devinf.h plugins/syncml/trunk/src/syncml_ds_client.c plugins/syncml/trunk/src/syncml_ds_client.h plugins/syncml/trunk/src/syncml_ds_server.c plugins/syncml/trunk/src/syncml_ds_server.h plugins/syncml/trunk/src/syncml_obex_client.c plugins/syncml/trunk/src/syncml_plugin.c Modified: plugins/syncml/trunk/CMakeLists.txt ============================================================================== --- plugins/syncml/trunk/CMakeLists.txt Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/CMakeLists.txt Mon Nov 9 17:33:17 2009 (r5952) @@ -10,7 +10,7 @@ CMAKE_MINIMUM_REQUIRED( VERSION 2.4.4 ) # find requirements -SET ( LIBSYNCML_MIN_VERSION "0.5.0" ) +SET ( LIBSYNCML_MIN_VERSION "0.5.99" ) SET ( OPENSYNC_MIN_VERSION "0.40" ) FIND_PACKAGE( OpenSync REQUIRED ) Modified: plugins/syncml/trunk/src/syncml_callbacks.c ============================================================================== --- plugins/syncml/trunk/src/syncml_callbacks.c Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_callbacks.c Mon Nov 9 17:33:17 2009 (r5952) @@ -29,35 +29,45 @@ /* ***** Management Callbacks ***** */ /* **************************************** */ -void _recv_event( - SmlDataSyncObject *dsObject, - SmlDataSyncEventType type, - void *userdata, - SmlError *error) +void +_recv_event (SmlDataSyncSession *session, + SmlDataSync *dsObject, + SmlDataSyncEventType type, + void *userdata, + const GError *error) { osync_trace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, dsObject, type, userdata, error); - SmlError *locerror = NULL; + GError *locerror = NULL; SmlPluginEnv *env = userdata; GList *o = NULL; + /* determine used data sync */ + + if (!dsObject) + dsObject = sml_data_sync_session_get_data_sync(session); + /* cache connection state */ - if (dsObject == env->dsObject1) + if (dsObject == env->dsObject1) { env->state1 = type; - else + if (session) + env->session1 = session; + } else { env->state2 = type; + if (session) + env->session2 = session; + } switch (type) { - case SML_DATA_SYNC_EVENT_ERROR: + case SML_DATA_SYNC_SESSION_EVENT_ERROR: env->abort =TRUE; - smlErrorDuplicate(&locerror, &error); - smlErrorDeref(&error); + locerror = g_error_copy(error); goto error; break; - case SML_DATA_SYNC_EVENT_CONNECT: + case SML_DATA_SYNC_SESSION_EVENT_CONNECT: break; - case SML_DATA_SYNC_EVENT_DISCONNECT: + case SML_DATA_SYNC_SESSION_EVENT_DISCONNECT: break; - case SML_DATA_SYNC_EVENT_FINISHED: + case SML_DATA_SYNC_SESSION_EVENT_FINISHED: if (!env->abort) { if (!env->dsObject2 || dsObject == env->dsObject2) { @@ -83,7 +93,7 @@ if (env->disconnectCtx) report_success_on_context(&(env->disconnectCtx)); break; - case SML_DATA_SYNC_EVENT_GOT_ALL_ALERTS: + case SML_DATA_SYNC_SESSION_EVENT_GOT_ALL_ALERTS: if (dsObject == env->dsObject1) { osync_trace(TRACE_INTERNAL, "session established"); @@ -92,15 +102,15 @@ /* If this is the first connection of an * OMA DS client then we send an empty sync. */ - if (!smlDataSyncSendChanges(env->dsObject1, &locerror)) + if (!sml_data_sync_session_send_changes(env->session1, &locerror)) goto error; } } else { - if (!smlDataSyncSendChanges(env->dsObject2, &locerror)) + if (!sml_data_sync_session_send_changes(env->session2, &locerror)) goto error; } break; - case SML_DATA_SYNC_EVENT_GOT_ALL_CHANGES: + case SML_DATA_SYNC_SESSION_EVENT_GOT_ALL_CHANGES: if (dsObject == env->dsObject1) { o = env->databases; @@ -111,7 +121,7 @@ } } break; - case SML_DATA_SYNC_EVENT_GOT_ALL_MAPPINGS: + case SML_DATA_SYNC_SESSION_EVENT_GOT_ALL_MAPPINGS: break; default: g_error("Unknown event(%d).\n", type); @@ -123,7 +133,7 @@ error: osync_trace(TRACE_INTERNAL, "%s: Cleaning up because of an error ...", __func__); OSyncError *oserror = NULL; - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, smlErrorPrint(&locerror)); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, locerror->message); if (env->disconnectCtx) report_error_on_context(&(env->disconnectCtx), &oserror, FALSE); @@ -170,17 +180,19 @@ /* ***** Alert Callbacks ***** */ /* *********************************** */ -SmlAlertType _get_alert_type( - SmlDataSyncObject *dsObject, - const char *source, - SmlAlertType recvType, - void *userdata, - SmlError **error) +SmlAlertType +_get_alert_type (SmlDataSyncDataStoreSession *session, + SmlAlertType recvType, + void *userdata, + GError **error) { - osync_trace(TRACE_ENTRY, "%s: %s => %d", __func__, source, recvType); + osync_trace(TRACE_ENTRY, "%s (%p, %d, %p, %p)", __func__, session, recvType, userdata, error); SmlPluginEnv *env = userdata; SmlAlertType sentType; + SmlDataSyncDataStore *data_store = sml_data_sync_data_store_session_get_data_store(session); + SmlDataSyncSession *dsSession = sml_data_sync_data_store_session_get_data_sync_session(session); + SmlDataSync *dsObject = sml_data_sync_session_get_data_sync(dsSession); if (env->dsObject2 && env->dsObject2 == dsObject) { @@ -191,7 +203,7 @@ sentType = SML_ALERT_TWO_WAY; } else { /* get the related datastore */ - SmlDatabase *database = get_database_from_source(env, source, error); + SmlDatabase *database = get_database_from_data_store(env, data_store, error); if (!database) goto error; @@ -217,8 +229,10 @@ /* if there is a disconnect context then this is an abort */ if (database->env->disconnectCtx) { - smlErrorSet(error, SML_ERROR_GENERIC, - "A disconnect is enforced while waiting for connect_done."); + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "A disconnect is enforced while waiting for connect_done."); goto error; } @@ -232,202 +246,229 @@ if (recvType == SML_ALERT_SLOW_SYNC && recvType != sentType) { - smlErrorSet(error, SML_ERROR_GENERIC, - "The remote peer requested a SLOW-SYNC " \ - "but the local OpenSync instance enforces a normal synchronization."); + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "The remote peer requested a SLOW-SYNC " \ + "but the local OpenSync instance enforces a normal synchronization."); goto error; } osync_trace(TRACE_EXIT, "%s - %d", __func__, sentType); return sentType; error: - osync_trace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); + osync_trace(TRACE_EXIT_ERROR, "%s - %s", __func__, (*error)->message); return SML_ALERT_UNKNOWN; } -char *_get_anchor( - SmlDataSyncObject *dsObject, - const char *name, - void *userdata, - SmlError **error) +gchar * +_get_anchor (SmlDataSyncDataStoreSession *session, + gboolean remote, + void *userdata, + GError **error) { - SmlPluginEnv *env = userdata; - OSyncError *oerror = NULL; - osync_assert(env->stateDB); - char *value = osync_sink_state_get(env->stateDB, name, &oerror); - if (oerror) { - smlErrorSet(error, SML_ERROR_GENERIC, "%s", osync_error_print(&oerror)); - osync_error_unref(&oerror); - value = NULL; - } - return value; + SmlPluginEnv *env = userdata; + OSyncError *oerror = NULL; + osync_assert(env->stateDB); + + /* create the name */ + + SmlDataSyncDataStore *data_store = sml_data_sync_data_store_session_get_data_store(session); + gchar *name = g_strdup_printf ("%s_%s", + sml_data_sync_data_store_get_local_uri(data_store), + remote ? "remote" : "local"); + + /* load the anchor value */ + + char *value = osync_sink_state_get(env->stateDB, name, &oerror); + if (oerror) { + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "%s", osync_error_print(&oerror)); + osync_error_unref(&oerror); + value = NULL; + } + + safe_cfree(&name); + return value; } -SmlBool _set_anchor( - SmlDataSyncObject *dsObject, - const char *name, - const char *value, - void *userdata, - SmlError **error) +gboolean +_set_anchor (SmlDataSyncDataStoreSession *session, + gboolean remote, + const char *value, + void *userdata, + GError **error) { - SmlPluginEnv *env = userdata; - OSyncError *oerror = NULL; - osync_assert(env->stateDB); - SmlBool result = osync_sink_state_set(env->stateDB, name, value, &oerror); - if (oerror) { - smlErrorSet(error, SML_ERROR_GENERIC, "%s", osync_error_print(&oerror)); - osync_error_unref(&oerror); - result = FALSE; - } - return result; + SmlPluginEnv *env = userdata; + OSyncError *oerror = NULL; + osync_assert(env->stateDB); + + /* create the name */ + + SmlDataSyncDataStore *data_store = sml_data_sync_data_store_session_get_data_store(session); + gchar *name = g_strdup_printf ("%s_%s", + sml_data_sync_data_store_get_local_uri(data_store), + remote ? "remote" : "local"); + + /* set the anchor value */ + + gboolean result = osync_sink_state_set(env->stateDB, name, value, &oerror); + if (oerror) { + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "%s", osync_error_print(&oerror)); + osync_error_unref(&oerror); + result = FALSE; + } + safe_cfree(&name); + return result; } /* ************************************ */ /* ***** Change Callbacks ***** */ /* ************************************ */ -SmlBool _recv_change( - SmlDataSyncObject *dsObject, - const char *source, - SmlChangeType type, - const char *uid, - char *data, - unsigned int size, - void *userdata, - SmlError **error) +gboolean +_recv_change (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + void *userdata, + GError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %i, %s, %p, %i, %s, %p, %p)", __func__, dsObject, type, uid, data, size, source, userdata, error); - SmlPluginEnv *env = userdata; - OSyncError *oerror = NULL; - OSyncChange *change = NULL; - - SmlDatabase *database = get_database_from_source(env, source, error); - if (!database) - goto error; - - g_assert(database->getChangesCtx); - g_assert(type); - - change = osync_change_new(&oerror); - if (!change) { - smlErrorSet(error, SML_ERROR_GENERIC, "No change created: %s", osync_error_print(&oerror)); - osync_error_unref(&oerror); - oerror = NULL; - goto error; - } - - osync_change_set_uid(change, uid); - - /* XXX Workaround for mobiles which only handle localtime! TODO: make use of UTC field in DevCap and handle it is OpenSync framework! */ - /* - if (!strcmp(contenttype, SML_ELEMENT_TEXT_VCAL) && env->onlyLocaltime && type != SML_CHANGE_DELETE) { - char *_data = osync_time_vcal2utc(data); - safe_cfree(&data); - data = _data; - size = strlen(data); - } - */ - - osync_trace(TRACE_INTERNAL, - "%s: objformat: %s", __func__, - osync_objformat_get_name(database->objformat)); - OSyncData *odata = osync_data_new(data, size, database->objformat, &oerror); - if (!odata) { - goto oerror; - } - - osync_data_set_objtype(odata, database->objtype); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, session, item, userdata, error); + SmlPluginEnv *env = userdata; + OSyncError *oerror = NULL; + OSyncChange *change = NULL; + + SmlDataSyncDataStore *data_store = sml_data_sync_data_store_session_get_data_store(session); + + SmlDatabase *database = get_database_from_data_store(env, data_store, error); + if (!database) + goto error; + + g_assert(database->getChangesCtx); + + change = osync_change_new(&oerror); + if (!change) { + g_set_error(error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "No change created: %s", + osync_error_print(&oerror)); + osync_error_unref(&oerror); + oerror = NULL; + goto error; + } + + /* NOTICE: full_uri must be used here + * NOTICE: because OpenSync has no idea of hierarchical sync + */ + osync_change_set_uid(change, sml_location_get_full_uri(sml_data_sync_change_item_get_location(item))); + + osync_trace(TRACE_INTERNAL, + "%s: objformat: %s", __func__, + osync_objformat_get_name(database->objformat)); + const gchar *data = sml_data_sync_change_item_get_data(item); + OSyncData *odata = osync_data_new(g_strdup(data), strlen(data), database->objformat, &oerror); + if (!odata) + goto oerror; + + osync_data_set_objtype(odata, database->objtype); + + osync_change_set_data(change, odata); + + /* If a SLOW-SYNC happens then OpenSync only expects ADD commands. + * If a REPLACE is detected instead of an ADD then this is fixed. + */ + if (database->slowsync && + sml_data_sync_change_item_get_action(item) == SML_CHANGE_REPLACE) + osync_change_set_changetype(change, OSYNC_CHANGE_TYPE_ADDED); + else + osync_change_set_changetype(change, _to_osync_changetype(sml_data_sync_change_item_get_action(item))); + + osync_data_unref(odata); + odata = NULL; + + osync_context_report_change(database->getChangesCtx, change); + + /* if this is a client then we should send a map item here */ + if (env->sessionType == SML_SESSION_TYPE_CLIENT) + { + /* let's prepare the mapping */ + SmlMapItem *mapping = sml_map_item_new(); + if (!sml_map_item_set_remote (mapping, sml_data_sync_change_item_get_location(item), error)) + goto error; + SmlLocation *local = sml_location_new(); + sml_location_set_uri(local, osync_change_get_uid(change)); + if (!sml_map_item_set_local (mapping, local, error)) + goto error; + g_object_unref(local); + local = NULL; + /* add the mapping */ + if (!sml_data_sync_data_store_session_add_mapping(session, mapping, env, error)) + goto error; + } - osync_change_set_data(change, odata); - - /* If a SLOW-SYNC happens then OpenSync only expects ADD commands. - * If a REPLACE is detected instead of an ADD then this is fixed. - */ - if (database->slowsync && type == SML_CHANGE_REPLACE) - { - osync_change_set_changetype(change, OSYNC_CHANGE_TYPE_ADDED); - } else { - osync_change_set_changetype(change, _to_osync_changetype(type)); - } - - osync_data_unref(odata); - odata = NULL; - - osync_context_report_change(database->getChangesCtx, change); - - // if this is a client then we should send a map item here - if (env->sessionType == SML_SESSION_TYPE_CLIENT) - { - // ok let's prepare the map - if (!smlDataSyncAddMapping(dsObject, source, uid, osync_change_get_uid(change), error)) - goto error; - } - - osync_change_unref(change); - change = NULL; - - osync_trace(TRACE_EXIT, "%s", __func__); - return TRUE; + osync_change_unref(change); + change = NULL; + osync_trace(TRACE_EXIT, "%s", __func__); + return TRUE; oerror: - smlErrorSet(error, SML_ERROR_GENERIC, "%s", osync_error_print(&oerror)); - osync_error_unref(&oerror); - oerror = NULL; + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "%s", osync_error_print(&oerror)); + osync_error_unref(&oerror); + oerror = NULL; error: - if (change) - { - osync_change_unref(change); - change = NULL; - } - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); - return FALSE; + if (change) + { + osync_change_unref(change); + change = NULL; + } + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, (*error)->message); + return FALSE; } -SmlBool _recv_change_status( - SmlDataSyncObject *dsObject, - unsigned int code, - const char *newuid, - void *userdata, - SmlError **error) +gboolean +_recv_change_status (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + SmlErrorType code, + void *userdata, + GError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %d, %s, %p)", __func__, dsObject, code, newuid, userdata); - struct commitContext *ctx = userdata; - SmlBool result = TRUE; - - if (code < 200 || 299 < code) { - OSyncError *error = NULL; - osync_error_set( - &error, OSYNC_ERROR_GENERIC, - "Unable to commit change. Error %i", - code); - //report_error_on_context(&(ctx->context), &error, TRUE); - // TODO port .... - result = FALSE; - } else { - if (newuid) - g_hash_table_insert(ctx->database->uid_updates, g_strdup(osync_change_get_uid(ctx->change)), g_strdup(newuid)); - } - - // cleanup - osync_change_unref(ctx->change); - ctx->database = NULL; - safe_free((gpointer *)&ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %i, %p, %p)", __func__, session, item, code, userdata, error); + struct commitContext *ctx = userdata; + gboolean result = TRUE; + + if (code < 200 || 299 < code) { + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "Unable to commit change. Error %i", code); + result = FALSE; + } + /* there is a separate callback for mappings */ + + // cleanup + osync_change_unref(ctx->change); + ctx->database = NULL; + safe_free((gpointer *)&ctx); - osync_trace(TRACE_EXIT, "%s - %d", __func__, result); - return result; + osync_trace(TRACE_EXIT, "%s - %d", __func__, result); + return result; } -SmlBool _recv_unwanted_change( - SmlDataSyncObject *dsObject, - const char *source, - SmlChangeType type, - const char *uid, - char *data, - unsigned int size, - void *userdata, - SmlError **error) +gboolean +_recv_unwanted_change (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + void *userdata, + GError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %i, %s, %p, %i, %s, %p, %p)", __func__, dsObject, type, uid, data, size, source, userdata, error); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, session, item, userdata, error); /* This should be the second OMA DS session of an OMA DS * client. If this is the case then we simply ignore what the @@ -442,7 +483,7 @@ */ osync_trace(TRACE_EXIT, "%s: second OMA DS client connection detected", __func__); - if (type == SML_CHANGE_DELETE) + if (sml_data_sync_change_item_get_action(item) == SML_CHANGE_DELETE) { /* Now we are in real trouble. The server wants to * delete an entry and it is impossible to propagate @@ -471,7 +512,10 @@ } else { /* This problem should be fixed with the next SLOW-SYNC. */ osync_trace(TRACE_EXIT_ERROR, "%s - unexpected Add or Replace command", __func__); - smlErrorSet(error, SML_ERROR_GENERIC, "Unwanted Add or Replace command on second OMA DS session."); + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "Unwanted Add or Replace command on second OMA DS session."); return FALSE; } } Modified: plugins/syncml/trunk/src/syncml_callbacks.h ============================================================================== --- plugins/syncml/trunk/src/syncml_callbacks.h Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_callbacks.h Mon Nov 9 17:33:17 2009 (r5952) @@ -27,65 +27,57 @@ /* ***** Management Callbacks ***** */ /* **************************************** */ -void _recv_event( - SmlDataSyncObject *dsObject, - SmlDataSyncEventType type, - void *userdata, - SmlError *error); +void +_recv_event (SmlDataSyncSession *session, + SmlDataSync *ds, + SmlDataSyncEventType type, + void *userdata, + const GError *error); /* *********************************** */ /* ***** Alert Callbacks ***** */ /* *********************************** */ -SmlAlertType _get_alert_type( - SmlDataSyncObject *dsObject, - const char *source, - SmlAlertType type, - void *userdata, - SmlError **error); - -char *_get_anchor( - SmlDataSyncObject *dsObject, - const char *name, - void *userdata, - SmlError **error); - -SmlBool _set_anchor( - SmlDataSyncObject *dsObject, - const char *name, - const char *value, - void *userdata, - SmlError **error); +SmlAlertType +_get_alert_type (SmlDataSyncDataStoreSession *session, + SmlAlertType type, + void *userdata, + GError **error); + +gchar* +_get_anchor (SmlDataSyncDataStoreSession *session, + gboolean remote, + void *userdata, + GError **error); + +gboolean +_set_anchor (SmlDataSyncDataStoreSession *session, + gboolean remote, + const char *value, + void *userdata, + GError **error); /* ************************************ */ /* ***** Change Callbacks ***** */ /* ************************************ */ -SmlBool _recv_change( - SmlDataSyncObject *dsObject, - const char *source, - SmlChangeType type, - const char *uid, - char *data, - unsigned int size, - void *userdata, - SmlError **error); - -SmlBool _recv_unwanted_change( - SmlDataSyncObject *dsObject, - const char *source, - SmlChangeType type, - const char *uid, - char *data, - unsigned int size, - void *userdata, - SmlError **error); - -SmlBool _recv_change_status( - SmlDataSyncObject *dsObject, - unsigned int code, - const char *newuid, - void *userdata, - SmlError **error); +gboolean +_recv_change (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + void *userdata, + GError **error); + +gboolean +_recv_unwanted_change (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + void *userdata, + GError **error); + +gboolean +_recv_change_status (SmlDataSyncDataStoreSession *session, + SmlDataSyncChangeItem *item, + SmlErrorType code, + void *userdata, + GError **error); #endif //_SYNCML_CALLBACKS_H Modified: plugins/syncml/trunk/src/syncml_common.c ============================================================================== --- plugins/syncml/trunk/src/syncml_common.c Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_common.c Mon Nov 9 17:33:17 2009 (r5952) @@ -26,7 +26,6 @@ #include "syncml_ds_server.h" #include <opensync/opensync-plugin.h> -#include <libsyncml/data_sync_api/callbacks.h> void syncml_free_database(SmlDatabase *database) { @@ -152,12 +151,6 @@ database->uid_updates = g_hash_table_new(g_str_hash, g_str_equal); - database->url = osync_plugin_resource_get_name(res); - if (!database->url) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Database name not set"); - goto error_free_database; - } - database->objtype = osync_plugin_resource_get_objtype(res); if (!database->objtype) { osync_error_set(error, OSYNC_ERROR_GENERIC, "\"objtype\" of a database not set"); @@ -229,7 +222,7 @@ SmlPluginEnv *env = (SmlPluginEnv *)data; g_assert(env); - SmlBool waitForConnectDone = FALSE; + gboolean waitForConnectDone = FALSE; if (env->databases && ((SmlDatabase *)env->databases->data)->alert_type_mutex && !((SmlDatabase *)env->databases->data)->connectCtx) { @@ -240,12 +233,12 @@ if (!waitForConnectDone && env->waitForDisconnect && ( - (env->state1 >= SML_DATA_SYNC_EVENT_DISCONNECT && + (env->state1 >= SML_DATA_SYNC_SESSION_EVENT_DISCONNECT && (!env->dsObject2 || - env->state2 >= SML_DATA_SYNC_EVENT_DISCONNECT || - env->state2 < SML_DATA_SYNC_EVENT_CONNECT) + env->state2 >= SML_DATA_SYNC_SESSION_EVENT_DISCONNECT || + env->state2 < SML_DATA_SYNC_SESSION_EVENT_CONNECT) ) || - env->state1 < SML_DATA_SYNC_EVENT_CONNECT + env->state1 < SML_DATA_SYNC_SESSION_EVENT_CONNECT ) ) { @@ -281,18 +274,22 @@ if (!env->waitForDisconnect) { /* this is an abort */ osync_trace(TRACE_INTERNAL, "%s: abort detected", __func__); - SmlError *error = NULL; - if (env->dsObject2 && env->state2 > SML_DATA_SYNC_EVENT_CONNECT) + GError *error = NULL; + if (env->dsObject2 && env->state2 > SML_DATA_SYNC_SESSION_EVENT_CONNECT) { - smlDataSyncAbort(env->dsObject2, &error); + if (env->session2) + sml_data_sync_session_abort(env->session2, &error); } else { - smlDataSyncAbort(env->dsObject1, &error); + if (env->session1) + sml_data_sync_session_abort(env->session1, &error); } if (error != NULL) { OSyncError *oserror = NULL; - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); report_error_on_context(&(env->disconnectCtx), &oserror, TRUE); + g_error_free(error); + error = NULL; } } } @@ -327,9 +324,9 @@ /* Cleanup the libsyncml library */ if (env->dsObject1) - smlDataSyncObjectUnref(&(env->dsObject1)); + g_object_unref(env->dsObject1); if (env->dsObject2) - smlDataSyncObjectUnref(&(env->dsObject2)); + g_object_unref(env->dsObject2); while (env->databases) { SmlDatabase *db = env->databases->data; syncml_free_database(db); @@ -426,19 +423,20 @@ } } -SmlDatabase *get_database_from_source( +SmlDatabase *get_database_from_data_store( SmlPluginEnv *env, - const char *source, - SmlError **error) + SmlDataSyncDataStore *data_store, + GError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %s, %p)", __func__, env, source, error); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, data_store, error); /* find database */ SmlDatabase *database = NULL; GList *o = env->databases; while (o) { database = o->data; - if (!strcmp(database->url, source)) { + if (database->data_store_1 == data_store || + (database->data_store_2 && database->data_store_2 == data_store)) { /* abort the scan */ o = NULL; } else { @@ -447,15 +445,16 @@ if (o) o = o->next; } if (!database) { - smlErrorSet(error, SML_ERROR_GENERIC, - "Cannot found datastore %s.", - source); + g_set_error (error, + OSYNC_PLUGIN_SYNCML_ERROR, + SML_ERROR_GENERIC, + "Cannot found datastore %p.", data_store); goto error; } osync_trace(TRACE_EXIT, "%s", __func__); return database; error: - osync_trace(TRACE_EXIT_ERROR, "%s -%s", __func__, smlErrorPrint(error)); + osync_trace(TRACE_EXIT_ERROR, "%s -%s", __func__, (*error)->message); return NULL; } @@ -465,7 +464,7 @@ SmlDatabase *database = (SmlDatabase *)data; SmlPluginEnv *env = database->env; - SmlError *error = NULL; + GError *error = NULL; OSyncError *oserror = NULL; /* The context is preserved in the environment. @@ -478,9 +477,9 @@ if (g_atomic_int_dec_and_test(&(env->toBeConnected))) { /* all database received the connect callback */ osync_trace(TRACE_INTERNAL, "%s: executing connect", __func__); - if (!smlDataSyncInit(env->dsObject1, &error)) + if (!sml_data_sync_initialize(env->dsObject1, &error)) goto error; - if (!smlDataSyncRun(env->dsObject1, &error)) + if (!sml_data_sync_run(env->dsObject1, &error)) goto error; } else { osync_trace(TRACE_INTERNAL, "%s: just another connect", __func__); @@ -489,8 +488,8 @@ osync_trace(TRACE_EXIT, "%s", __func__); return; error: - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&oserror)); report_error_on_context(&(database->connectCtx), &oserror, TRUE); } @@ -519,30 +518,30 @@ return TRUE; } -osync_bool parse_config( - SmlTransportType tsp, - SmlDataSyncObject *dsObject, - OSyncPluginConfig *config, - OSyncError **oerror) +osync_bool +parse_config (SmlTransportType tsp, + SmlDataSync *dsObject, + OSyncPluginConfig *config, + OSyncError **oerror) { osync_trace(TRACE_ENTRY, "%s(%d, %p, %p, %p)", __func__, tsp, dsObject, config, oerror); OSyncPluginConnection *conn; char *url = NULL; - SmlError *error = NULL; + GError *error = NULL; - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_USE_TIMESTAMP_ANCHOR, "1", &error)) goto error; - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_MAX_MSG_SIZE, g_strdup_printf("%d", OSYNC_PLUGIN_SYNCML_MAX_MSG_SIZE), &error)) goto error; - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_MAX_OBJ_SIZE, g_strdup_printf("%d",OSYNC_PLUGIN_SYNCML_MAX_OBJ_SIZE), @@ -557,13 +556,13 @@ switch(osync_plugin_connection_get_type(conn)) { case OSYNC_PLUGIN_CONNECTION_BLUETOOTH: - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, SML_DATA_SYNC_CONFIG_CONNECTION_BLUETOOTH, &error)) goto error; - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_TRANSPORT_CONFIG_BLUETOOTH_ADDRESS, osync_plugin_connection_bt_get_addr(conn), @@ -572,7 +571,7 @@ if (osync_plugin_connection_bt_get_channel(conn)) { char *channel = g_strdup_printf("%u", osync_plugin_connection_bt_get_channel(conn)); - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_TRANSPORT_CONFIG_BLUETOOTH_CHANNEL, channel, &error)) @@ -585,7 +584,7 @@ break; case OSYNC_PLUGIN_CONNECTION_USB: /* TODO: osync_plugin_connection_usb_get_interface(conn); */ - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, SML_DATA_SYNC_CONFIG_CONNECTION_USB, @@ -594,7 +593,7 @@ if (osync_plugin_connection_usb_get_interface(conn)) { char *port = g_strdup_printf("%u", osync_plugin_connection_usb_get_interface(conn)); - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_TRANSPORT_CONFIG_PORT, port, &error)) @@ -607,7 +606,7 @@ break; case OSYNC_PLUGIN_CONNECTION_SERIAL: /* TODO serial */ - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, SML_DATA_SYNC_CONFIG_CONNECTION_SERIAL, @@ -616,7 +615,7 @@ break; case OSYNC_PLUGIN_CONNECTION_IRDA: /* TODO IRDA */ - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, SML_DATA_SYNC_CONFIG_CONNECTION_IRDA, @@ -626,7 +625,7 @@ case OSYNC_PLUGIN_CONNECTION_NETWORK: /* TODO Network */ if (tsp == SML_TRANSPORT_OBEX_CLIENT && - !smlDataSyncSetOption( + !sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, SML_DATA_SYNC_CONFIG_CONNECTION_NET, @@ -640,7 +639,7 @@ osync_plugin_connection_net_get_port(conn)); } else { char *port = g_strdup_printf("%u", osync_plugin_connection_net_get_port(conn)); - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_TRANSPORT_CONFIG_PORT, port, &error)) @@ -665,7 +664,7 @@ if (value != NULL && strlen(value) == 0) value = NULL; if (value && - !smlDataSyncSetOption( + !sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_AUTH_USERNAME, value, &error)) @@ -674,7 +673,7 @@ if (value != NULL && strlen(value) == 0) value = NULL; if (value && - !smlDataSyncSetOption( + !sml_data_sync_set_option( dsObject, SML_DATA_SYNC_CONFIG_AUTH_PASSWORD, value, &error)) @@ -725,7 +724,7 @@ /* build URL together with connection config */ char *value = g_strdup_printf("%s%s", url, val); safe_cfree(&url); - if (!smlDataSyncSetOption( + if (!sml_data_sync_set_option( dsObject, SML_TRANSPORT_CONFIG_URL, value, &error)) { @@ -748,15 +747,15 @@ } if (key && - !smlDataSyncSetOption(dsObject, key, val, &error)) + !sml_data_sync_set_option(dsObject, key, val, &error)) goto error; } osync_trace(TRACE_EXIT, "%s - TRUE", __func__); return TRUE; error: - osync_error_set(oerror, OSYNC_ERROR_MISCONFIGURATION, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(oerror, OSYNC_ERROR_MISCONFIGURATION, "%s", error->message); + g_error_free(error); oerror: osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(oerror)); return FALSE; @@ -770,7 +769,7 @@ OSyncError **oerror) { osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, info, oerror); - SmlError *error = NULL; + GError *error = NULL; SmlPluginEnv *env = osync_try_malloc0(sizeof(SmlPluginEnv), oerror); if (!env) @@ -784,13 +783,17 @@ osync_trace(TRACE_INTERNAL, "The config: %p", config); /* create data sync object */ - env->dsObject1 = smlDataSyncNew(sessionType, tspType, &error); - if (!env->dsObject1) + env->dsObject1 = sml_data_sync_new(); + if (!sml_data_sync_set_session_type(env->dsObject1, sessionType, &error)) + goto error_free_env; + if (!sml_data_sync_set_transport_type(env->dsObject1, tspType, &error)) goto error_free_env; if (sessionType == SML_SESSION_TYPE_CLIENT) { - env->dsObject2 = smlDataSyncNew(sessionType, tspType, &error); - if (!env->dsObject2) + env->dsObject2 = sml_data_sync_new(); + if (!sml_data_sync_set_session_type(env->dsObject2, sessionType, &error)) + goto error_free_env; + if (!sml_data_sync_set_transport_type(env->dsObject2, tspType, &error)) goto error_free_env; } @@ -826,31 +829,23 @@ osync_objtype_sink_unref(mainsink); /* set callbacks */ - smlDataSyncRegisterEventCallback(env->dsObject1, _recv_event, env); - smlDataSyncRegisterGetAlertTypeCallback(env->dsObject1, _get_alert_type, env); - smlDataSyncRegisterGetAnchorCallback(env->dsObject1, _get_anchor, env); - smlDataSyncRegisterSetAnchorCallback(env->dsObject1, _set_anchor, env); + sml_data_sync_register_event_callback(env->dsObject1, _recv_event, env); /* FIXME: disabled devinf callbacks due to missing OSyncCapabilities interface - #1079 smlDataSyncRegisterWriteDevInfCallback(env->dsObject1, _write_devinf, env); smlDataSyncRegisterReadDevInfCallback(env->dsObject1, _read_devinf, env); */ - smlDataSyncRegisterHandleRemoteDevInfCallback(env->dsObject1, _handle_remote_devinf, env); - smlDataSyncRegisterChangeStatusCallback(env->dsObject1, _recv_change_status); + sml_data_sync_register_handle_remote_dev_inf_callback(env->dsObject1, _handle_remote_devinf, env); if (sessionType == SML_SESSION_TYPE_CLIENT) { - smlDataSyncRegisterEventCallback(env->dsObject2, _recv_event, env); - smlDataSyncRegisterGetAlertTypeCallback(env->dsObject2, _get_alert_type, env); - smlDataSyncRegisterGetAnchorCallback(env->dsObject2, _get_anchor, env); - smlDataSyncRegisterSetAnchorCallback(env->dsObject2, _set_anchor, env); + sml_data_sync_register_event_callback(env->dsObject2, _recv_event, env); /* FIXME: disabled devinf callbacks due to missing OSyncCapabilities interface - #1079 smlDataSyncRegisterWriteDevInfCallback(env->dsObject2, _write_devinf, env); smlDataSyncRegisterReadDevInfCallback(env->dsObject2, _read_devinf, env); */ - smlDataSyncRegisterHandleRemoteDevInfCallback(env->dsObject2, _handle_remote_devinf, env); - smlDataSyncRegisterChangeStatusCallback(env->dsObject2, _recv_change_status); + sml_data_sync_register_handle_remote_dev_inf_callback(env->dsObject2, _handle_remote_devinf, env); } osync_trace(TRACE_INTERNAL, "%s: config loaded", __func__); @@ -870,8 +865,8 @@ finalize(env); error: if (error) { - osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); } osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(oerror)); return NULL; Modified: plugins/syncml/trunk/src/syncml_common.h ============================================================================== --- plugins/syncml/trunk/src/syncml_common.h Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_common.h Mon Nov 9 17:33:17 2009 (r5952) @@ -42,8 +42,7 @@ #include <glib.h> -#include <libsyncml/data_sync_api/defines.h> -#include <libsyncml/data_sync_api/standard.h> +#include <libsyncml/syncml.h> #include <libxml/xmlmemory.h> #include <libxml/parser.h> @@ -78,14 +77,16 @@ #define SYNCML_PLUGIN_CONFIG_AUTH_TYPE "AuthType" typedef struct SmlPluginEnv { - SmlDataSyncObject *dsObject1; - SmlDataSyncObject *dsObject2; + SmlDataSync *dsObject1; + SmlDataSync *dsObject2; + SmlDataSyncSession *session1; + SmlDataSyncSession *session2; SmlSessionType sessionType; /* libsyncml state management */ - SmlBool abort; - SmlBool waitForDisconnect; + gboolean abort; + gboolean waitForDisconnect; SmlDataSyncEventType state1; SmlDataSyncEventType state2; @@ -114,7 +115,8 @@ const char *objformat_name; OSyncObjTypeSink *sink; const char *objtype; - const char *url; + SmlDataSyncDataStore *data_store_1; + SmlDataSyncDataStore *data_store_2; char *remoteNext; char *localNext; @@ -159,7 +161,7 @@ osync_bool parse_config( SmlTransportType tsp, - SmlDataSyncObject *dsObject, + SmlDataSync *dsObject, OSyncPluginConfig *config, OSyncError **oerror); @@ -181,14 +183,16 @@ OSyncChangeType _to_osync_changetype(SmlChangeType type); unsigned int get_num_changes(OSyncChange **changes); -SmlDatabase *get_database_from_source( +SmlDatabase *get_database_from_data_store( SmlPluginEnv *env, - const char *source, - SmlError **error); + SmlDataSyncDataStore *data_store, + GError **error); SmlChangeType _get_changetype(OSyncChange *change); void sink_sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data); +#define OSYNC_PLUGIN_SYNCML_ERROR g_quark_from_static_string("OSyncPluginSyncml") + #endif //_SYNCML_COMMON_H Modified: plugins/syncml/trunk/src/syncml_devinf.c ============================================================================== --- plugins/syncml/trunk/src/syncml_devinf.c Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_devinf.c Mon Nov 9 17:33:17 2009 (r5952) @@ -1,4 +1,5 @@ #include "syncml_common.h" +#include "syncml_devinf.h" const char *get_database_pref_content_type( SmlDatabase *database, @@ -38,11 +39,11 @@ return ct; } -SmlBool _handle_remote_devinf( - SmlDataSyncObject *dsObject, - SmlDevInf *devinf, - void *userdata, - SmlError **error) +gboolean +_handle_remote_devinf (SmlDataSyncSession *session, + SmlDevInf *devinf, + void *userdata, + GError **error) { osync_trace(TRACE_ENTRY, "%s", __func__); SmlPluginEnv *env = userdata; @@ -59,14 +60,15 @@ osync_assert(caps); /* now manage all content type capabilities */ - unsigned int capCount = smlDevInfNumCTCaps(devinf); + gsize capCount = sml_dev_inf_num_ctcaps(devinf); unsigned int i; for (i=0; i < capCount; i++) { - const SmlDevInfCTCap *ctcap = smlDevInfGetNthCTCap(devinf, i); + SmlDevInfCTCap *ctcap = sml_dev_inf_get_nth_ctcap(devinf, i); /* define objtype */ - char *cttype = smlDevInfCTCapGetCTType(ctcap); + SmlDevInfContentType *ct = sml_dev_inf_ctcap_get_content_type(ctcap); + const char *cttype = sml_dev_inf_content_type_get_cttype(ct); OSyncCapabilitiesObjType *capsobjtype = NULL; if (strstr(cttype, "calendar")) { @@ -78,22 +80,20 @@ /* iterate over properties */ if (capsobjtype) { - unsigned int propCount = smlDevInfCTCapNumProperties(ctcap); + gsize propCount = sml_dev_inf_ctcap_num_properties(ctcap); unsigned int k; for (k=0; k < propCount; k++) { - const SmlDevInfProperty *prop = smlDevInfCTCapGetNthProperty(ctcap, k); + SmlDevInfProperty *prop = sml_dev_inf_ctcap_get_nth_property(ctcap, k); OSyncCapability *cap = osync_capability_new(capsobjtype, &oerror); if (!cap) goto error; - char *name = smlDevInfPropertyGetPropName(prop); - osync_capability_set_name(cap, (const char *) name); - safe_cfree(&name); + const char *name = sml_dev_inf_property_get_prop_name(prop); + osync_capability_set_name(cap, name); } } - safe_cfree(&cttype); } osync_plugin_info_set_capabilities(env->pluginInfo, caps); @@ -113,11 +113,11 @@ /* CACHE DATABASE */ /* ************************ */ -SmlBool init_devinf_database_schema(OSyncDB *db, OSyncError **oerror) +gboolean init_devinf_database_schema(OSyncDB *db, OSyncError **oerror) { osync_trace(TRACE_ENTRY, "%s", __func__); unsigned int db_schema_version = 1; - SmlBool schema_update = FALSE; + gboolean schema_update = FALSE; /* check if all necessary tables exist */ osync_trace(TRACE_INTERNAL, "%s - Does all tables exist?", __func__); @@ -261,14 +261,14 @@ return FALSE; } -SmlBool store_devinf(SmlDevInf *devinf, const char *filename, SmlError **error) +gboolean store_devinf(SmlDevInf *devinf, const char *filename, GError **error) { osync_trace(TRACE_ENTRY, "%s - %s", __func__, filename); g_assert(devinf); g_assert(filename); g_assert(error); OSyncError *oerror; - SmlBool success = TRUE; + gboolean success = TRUE; /* init database stuff */ OSyncDB *db = osync_db_new(&oerror); @@ -440,7 +440,7 @@ char *data_type = smlDevInfPropertyGetDataType(property); unsigned int max_occur = smlDevInfPropertyGetMaxOccur(property); unsigned int max_size = smlDevInfPropertyGetMaxSize(property); - SmlBool no_truncate = smlDevInfPropertyGetNoTruncate(property); + gboolean no_truncate = smlDevInfPropertyGetNoTruncate(property); char *display_name = smlDevInfPropertyGetDisplayName(property); char *esc_prop_name = osync_db_sql_escape(prop_name); char *esc_data_type = osync_db_sql_escape(data_type); @@ -560,7 +560,7 @@ return FALSE; } -SmlDevInf *load_devinf(const char *devid, const char *filename, SmlError **error) +SmlDevInf *load_devinf(const char *devid, const char *filename, GError **error) { osync_trace(TRACE_ENTRY, "%s - %s from %s", __func__, devid, filename); g_assert(devid); @@ -830,11 +830,11 @@ /* ***** Device Information Callbacks ***** */ /* ************************************************ */ -SmlBool _write_devinf( +gboolean _write_devinf( SmlDataSyncObject *dsObject, SmlDevInf *devinf, void *userdata, - SmlError **error) + GError **error) { SmlPluginEnv *env = userdata; return store_devinf(devinf, env->devinf_path, error); @@ -844,7 +844,7 @@ SmlDataSyncObject *dsObject, const char *devid, void *userdata, - SmlError **error) + GError **error) { SmlPluginEnv *env = userdata; return load_devinf(devid, env->devinf_path, error); Modified: plugins/syncml/trunk/src/syncml_devinf.h ============================================================================== --- plugins/syncml/trunk/src/syncml_devinf.h Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_devinf.h Mon Nov 9 17:33:17 2009 (r5952) @@ -12,23 +12,22 @@ /* ***** Device Information Callbacks ***** */ /* ************************************************ */ -SmlBool _write_devinf( - SmlDataSyncObject *dsObject, - SmlDevInf *devinf, - void *userdata, - SmlError **error); +gboolean +_write_devinf (SmlDataSyncSession *session, + SmlDevInf *devinf, + void *userdata, + GError **error); -SmlDevInf *_read_devinf( - SmlDataSyncObject *dsObject, - const char *devid, - void *userdata, - SmlError **error); +SmlDevInf* +_read_devinf (SmlDataSyncSession *session, + const gchar *devid, + void *userdata, + GError **error); - -SmlBool _handle_remote_devinf( - SmlDataSyncObject *dsObject, - SmlDevInf *devinf, - void *userdata, - SmlError **error); +gboolean +_handle_remote_devinf (SmlDataSyncSession *session, + SmlDevInf *devinf, + void *userdata, + GError **error); #endif //_SYNCML_DEVINF_H Modified: plugins/syncml/trunk/src/syncml_ds_client.c ============================================================================== --- plugins/syncml/trunk/src/syncml_ds_client.c Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_ds_client.c Mon Nov 9 17:33:17 2009 (r5952) @@ -21,14 +21,13 @@ #include "syncml_ds_client.h" #include "syncml_callbacks.h" #include "syncml_devinf.h" -#include <libsyncml/data_sync_api/callbacks.h> -SmlBool ds_client_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **oerror) +gboolean ds_client_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **oerror) { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, info, oerror); SmlDatabase *database = NULL; - SmlError *error = NULL; + GError *error = NULL; OSyncPluginConfig *config = osync_plugin_info_get_config(info); OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); OSyncList *l, *list = osync_plugin_info_get_objtype_sinks(info); @@ -77,26 +76,33 @@ env->databases = g_list_append(env->databases, database); - if (!smlDataSyncAddDatastore( - env->dsObject1, - get_database_pref_content_type(database, oerror), - NULL, - database->url, - &error)) - goto error; - if (!smlDataSyncAddDatastore( - env->dsObject2, - get_database_pref_content_type(database, oerror), - NULL, - database->url, - &error)) - goto error; + SmlDataSyncDataStore *data_store = NULL; + + data_store = sml_data_sync_data_store_new(); + sml_data_sync_data_store_set_local_uri(data_store, osync_plugin_resource_get_name(res)); + sml_data_sync_data_store_set_content_type(data_store, get_database_pref_content_type(database, oerror)); + sml_data_sync_data_store_register_get_alert_type_callback(data_store, _get_alert_type, env); + sml_data_sync_data_store_register_get_anchor_callback(data_store, _get_anchor, env); + sml_data_sync_data_store_register_set_anchor_callback(data_store, _set_anchor, env); + if (!sml_data_sync_add_data_store(env->dsObject1, data_store, &error)) + goto error; + database->data_store_1 = data_store; + + data_store = sml_data_sync_data_store_new(); + sml_data_sync_data_store_set_local_uri(data_store, osync_plugin_resource_get_name(res)); + sml_data_sync_data_store_set_content_type(data_store, get_database_pref_content_type(database, oerror)); + sml_data_sync_data_store_register_get_alert_type_callback(data_store, _get_alert_type, env); + sml_data_sync_data_store_register_get_anchor_callback(data_store, _get_anchor, env); + sml_data_sync_data_store_register_set_anchor_callback(data_store, _set_anchor, env); + if (!sml_data_sync_add_data_store(env->dsObject2, data_store, &error)) + goto error; + database->data_store_2 = data_store; } osync_trace(TRACE_EXIT, "%s - TRUE", __func__); return TRUE; error: - osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); oerror: if (list) osync_list_free(list); @@ -114,26 +120,33 @@ database->slowsync = slow_sync; - if (env->state1 >= SML_DATA_SYNC_EVENT_GOT_ALL_CHANGES) { + if (env->state1 >= SML_DATA_SYNC_SESSION_EVENT_GOT_ALL_CHANGES) { report_success_on_context(&(ctx)); } else { database->getChangesCtx = ctx; osync_context_ref(database->getChangesCtx); } - smlDataSyncRegisterChangeCallback(env->dsObject1, _recv_change, env); - smlDataSyncRegisterChangeCallback(env->dsObject2, _recv_unwanted_change, env); + sml_data_sync_data_store_register_change_callback(database->data_store_1, _recv_change, env); + sml_data_sync_data_store_register_change_callback(database->data_store_2, _recv_unwanted_change, env); + sml_data_sync_data_store_register_change_status_callback(database->data_store_1, _recv_change_status, env); + sml_data_sync_data_store_register_change_status_callback(database->data_store_2, _recv_change_status, env); osync_trace(TRACE_EXIT, "%s", __func__); return; } -void ds_client_commit(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *data) +void +ds_client_commit (OSyncObjTypeSink *sink, + OSyncPluginInfo *info, + OSyncContext *ctx, + OSyncChange *change, + void *data) { osync_trace(TRACE_ENTRY, "%s", __func__); g_assert(ctx); - SmlError *error = NULL; + GError *error = NULL; OSyncError *oserror = NULL; SmlDatabase *database = (SmlDatabase*)data; @@ -147,31 +160,48 @@ osync_change_ref(change); - // prepare data + /* prepare change item */ + OSyncData *odata = osync_change_get_data(change); char *buf = NULL; unsigned int size = 0; osync_data_get_data(odata, &buf, &size); - + SmlDataSyncChangeItem *item = sml_data_sync_change_item_new(); + if (!sml_data_sync_change_item_set_data(item, buf, size, &error)) + goto error; + sml_data_sync_change_item_set_action(item, _get_changetype(change)); + SmlLocation *loc = sml_location_new(); + sml_location_set_uri(loc, osync_change_get_uid(change)); + if (!sml_data_sync_change_item_set_location(item, loc, &error)) + goto error; + g_object_unref(loc); + loc = NULL; + + /* determine data store session */ + + SmlDataSyncDataStoreSession *session = NULL; + session = sml_data_sync_session_get_data_store_session (database->env->session2, + database->data_store_2, + &error); + if (!session) + goto error; + + /* add change to data store session */ + osync_trace(TRACE_INTERNAL, "%s: Committing entry \"%s\": \"%s\"", __func__, osync_change_get_uid(change), buf); - if (!smlDataSyncAddChange( - database->env->dsObject2, - database->url, - _get_changetype(change), - osync_change_get_uid(change), - buf, size, - tracer, &error)) + if (!sml_data_sync_data_store_session_add_change(session, item, tracer, &error)) goto error; + g_object_unref(item); osync_context_report_success(ctx); osync_trace(TRACE_EXIT, "%s", __func__); return; error: - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); oserror: if (tracer) { osync_change_unref(change); @@ -187,7 +217,7 @@ osync_trace(TRACE_ENTRY, "%s", __func__); g_assert(ctx); - SmlError *error = NULL; + GError *error = NULL; OSyncError *oserror = NULL; SmlDatabase *database = (SmlDatabase*)data; @@ -221,17 +251,17 @@ /* a client must create a new DsSession */ - if (!smlDataSyncInit(database->env->dsObject2, &error)) + if (!sml_data_sync_initialize(database->env->dsObject2, &error)) goto error; - if (!smlDataSyncRun(database->env->dsObject2, &error)) + if (!sml_data_sync_run(database->env->dsObject2, &error)) goto error; osync_trace(TRACE_EXIT, "%s", __func__); return; error: - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); /* oserror: */ osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&oserror)); report_error_on_context(&(database->commitCtx), &oserror, TRUE); Modified: plugins/syncml/trunk/src/syncml_ds_client.h ============================================================================== --- plugins/syncml/trunk/src/syncml_ds_client.h Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_ds_client.h Mon Nov 9 17:33:17 2009 (r5952) @@ -23,7 +23,7 @@ OSyncContext *ctx, void *data); -SmlBool ds_client_init_databases( +gboolean ds_client_init_databases( SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **oerror); Modified: plugins/syncml/trunk/src/syncml_ds_server.c ============================================================================== --- plugins/syncml/trunk/src/syncml_ds_server.c Mon Nov 9 17:15:26 2009 (r5951) +++ plugins/syncml/trunk/src/syncml_ds_server.c Mon Nov 9 17:33:17 2009 (r5952) @@ -21,13 +21,12 @@ #include "syncml_ds_server.h" #include "syncml_callbacks.h" #include "syncml_devinf.h" -#include <libsyncml/data_sync_api/callbacks.h> -SmlBool ds_server_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **oerror) +gboolean ds_server_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **oerror) { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, info, oerror); SmlDatabase *database = NULL; - SmlError *error = NULL; + GError *error = NULL; OSyncPluginConfig *config = osync_plugin_info_get_config(info); OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); OSyncList *l, *list = osync_plugin_info_get_objtype_sinks(info); @@ -77,13 +76,17 @@ env->databases = g_list_append(env->databases, database); - if (!smlDataSyncAddDatastore( - env->dsObject1, - get_database_pref_content_type(database, oerror), - NULL, - database->url, - &error)) - goto error; + SmlDataSyncDataStore *data_store = NULL; + + data_store = sml_data_sync_data_store_new(); + sml_data_sync_data_store_set_local_uri(data_store, osync_plugin_resource_get_name(res)); + sml_data_sync_data_store_set_content_type(data_store, get_database_pref_content_type(database, oerror)); + sml_data_sync_data_store_register_get_alert_type_callback(data_store, _get_alert_type, env); + sml_data_sync_data_store_register_get_anchor_callback(data_store, _get_anchor, env); + sml_data_sync_data_store_register_set_anchor_callback(data_store, _set_anchor, env); + if (!sml_data_sync_add_data_store(env->dsObject1, data_store, &error)) + goto error; + database->data_store_1 = data_store; } osync_list_free(list); @@ -92,8 +95,8 @@ osync_trace(TRACE_EXIT, "%s - TRUE", __func__); return TRUE; error: - osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(oerror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); oerror: if (list) osync_list_free(list); @@ -114,7 +117,8 @@ database->getChangesCtx = ctx; osync_context_ref(database->getChangesCtx); - smlDataSyncRegisterChangeCallback(env->dsObject1, _recv_change, env); + sml_data_sync_data_store_register_change_callback(database->data_store_1, _recv_change, env); + sml_data_sync_data_store_register_change_status_callback(database->data_store_1, _recv_change_status, env); osync_trace(TRACE_EXIT, "%s", __func__); return; @@ -125,7 +129,7 @@ osync_trace(TRACE_ENTRY, "%s", __func__); g_assert(ctx); - SmlError *error = NULL; + GError *error = NULL; OSyncError *oserror = NULL; SmlDatabase *database = (SmlDatabase*)data; @@ -141,31 +145,48 @@ osync_change_ref(change); - // prepare data + /* prepare change item */ + OSyncData *odata = osync_change_get_data(change); char *buf = NULL; unsigned int size = 0; osync_data_get_data(odata, &buf, &size); + SmlDataSyncChangeItem *item = sml_data_sync_change_item_new(); + if (!sml_data_sync_change_item_set_data(item, buf, size, &error)) + goto error; + sml_data_sync_change_item_set_action(item, _get_changetype(change)); + SmlLocation *loc = sml_location_new(); + sml_location_set_uri(loc, osync_change_get_uid(change)); + if (!sml_data_sync_change_item_set_location(item, loc, &error)) + goto error; + g_object_unref(loc); + loc = NULL; + + /* determine data store session */ + + SmlDataSyncDataStoreSession *session = NULL; + session = sml_data_sync_session_get_data_store_session (database->env->session1, + database->data_store_1, + &error); + if (!session) + goto error; + + /* add change to data store session */ osync_trace(TRACE_INTERNAL, "%s: Committing entry \"%s\": \"%s\"", __func__, osync_change_get_uid(change), buf); - if (!smlDataSyncAddChange( - database->env->dsObject1, - database->url, - _get_changetype(change), - osync_change_get_uid(change), - buf, size, - tracer, &error)) + if (!sml_data_sync_data_store_session_add_change(session, item, tracer, &error)) goto error; + g_object_unref(item); osync_context_report_success(ctx); osync_trace(TRACE_EXIT, "%s", __func__); return; error: - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); oserror: if (tracer) { osync_change_unref(change); @@ -181,7 +202,7 @@ osync_trace(TRACE_ENTRY, "%s", __func__); g_assert(ctx); - SmlError *error = NULL; + GError *error = NULL; OSyncError *oserror = NULL; SmlDatabase *database = (SmlDatabase*)data; @@ -193,15 +214,15 @@ g_assert(database->pendingChanges == 0); if (g_list_length(database->env->databases) == database->env->gotDatabaseCommits && - !smlDataSyncSendChanges(database->env->dsObject1, &error)) + !sml_data_sync_session_send_changes(database->env->session1, &error)) goto error; osync_trace(TRACE_EXIT, "%s", __func__); return; error: - osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", smlErrorPrint(&error)); - smlErrorDeref(&error); + osync_error_set(&oserror, OSYNC_ERROR_GENERIC, "%s", error->message); + g_error_free(error); osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&oserror)); report_error_on_context(&(dat... [truncated message content] |