You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
(56) |
Apr
(109) |
May
(15) |
Jun
(3) |
Jul
(37) |
Aug
(96) |
Sep
(40) |
Oct
(4) |
Nov
(54) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(47) |
Feb
(30) |
Mar
(102) |
Apr
(120) |
May
(68) |
Jun
(54) |
Jul
(53) |
Aug
(122) |
Sep
(190) |
Oct
(71) |
Nov
(85) |
Dec
(108) |
2007 |
Jan
(72) |
Feb
(190) |
Mar
(53) |
Apr
(101) |
May
(145) |
Jun
(148) |
Jul
(167) |
Aug
(143) |
Sep
(23) |
Oct
(198) |
Nov
(223) |
Dec
(195) |
2008 |
Jan
(100) |
Feb
(129) |
Mar
(79) |
Apr
(77) |
May
(34) |
Jun
(95) |
Jul
(112) |
Aug
(160) |
Sep
(82) |
Oct
(124) |
Nov
(199) |
Dec
(355) |
2009 |
Jan
(436) |
Feb
(89) |
Mar
(298) |
Apr
(189) |
May
(33) |
Jun
(88) |
Jul
(105) |
Aug
(44) |
Sep
(181) |
Oct
(87) |
Nov
(75) |
Dec
(1) |
2010 |
Jan
(63) |
Feb
(21) |
Mar
(3) |
Apr
(1) |
May
(1) |
Jun
(3) |
Jul
(26) |
Aug
(37) |
Sep
(26) |
Oct
(15) |
Nov
(13) |
Dec
|
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] |
From: <svn...@op...> - 2009-11-09 16:15:57
|
Author: bellmich Date: Mon Nov 9 17:15:26 2009 New Revision: 5951 URL: http://www.opensync.org/changeset/5951 Log: support libsyncml-3.0.pc Modified: branches/3rd-party-cmake-modules/modules/FindLibSyncMl.cmake Modified: branches/3rd-party-cmake-modules/modules/FindLibSyncMl.cmake ============================================================================== --- branches/3rd-party-cmake-modules/modules/FindLibSyncMl.cmake Sun Nov 8 17:11:26 2009 (r5950) +++ branches/3rd-party-cmake-modules/modules/FindLibSyncMl.cmake Mon Nov 9 17:15:26 2009 (r5951) @@ -16,24 +16,35 @@ INCLUDE( FindPkgConfig ) -# Take care about libsyncml-1.0.pc settings +# Take care about libsyncml-x.y.pc settings IF ( LibSyncMl_FIND_REQUIRED ) SET( _pkgconfig_REQUIRED "REQUIRED" ) ELSE ( LibSyncMl_FIND_REQUIRED ) SET( _pkgconfig_REQUIRED "" ) ENDIF ( LibSyncMl_FIND_REQUIRED ) +# determine API generation + +SET( LIBSYNCML_PC "libsyncml-1.0" ) +PKG_SEARCH_MODULE( LIBSYNCML ${_pkgconfig_REQUIRED} libsyncml-3.0 ) +IF ( LIBSYNCML_FOUND ) + SET ( LIBSYNCML_FOUND FALSE ) + SET( LIBSYNCML_PC "libsyncml-3.0" ) +ENDIF ( LIBSYNCML_FOUND ) + +# check for libsyncml-x.y.pc + IF ( LIBSYNCML_MIN_VERSION ) - PKG_SEARCH_MODULE( LIBSYNCML ${_pkgconfig_REQUIRED} libsyncml-1.0>=${LIBSYNCML_MIN_VERSION} ) + PKG_SEARCH_MODULE( LIBSYNCML ${_pkgconfig_REQUIRED} ${LIBSYNCML_PC}>=${LIBSYNCML_MIN_VERSION} ) ELSE( LIBSYNCML_MIN_VERSION ) - PKG_SEARCH_MODULE( LIBSYNCML ${_pkgconfig_REQUIRED} libsyncml-1.0 ) + PKG_SEARCH_MODULE( LIBSYNCML ${_pkgconfig_REQUIRED} ${LIBSYNCML_PC} ) ENDIF ( LIBSYNCML_MIN_VERSION ) # Look for libsyncml include dir and libraries without pkg-config... IF ( NOT LIBSYNCML_FOUND AND NOT PKG_CONFIG_FOUND ) FIND_PATH( _libsyncml_include_DIR libsyncml/syncml.h - PATH_SUFFIXES libsyncml-1.0 + PATH_SUFFIXES ${LIBSYNCML_PC} PATHS /opt/local/include/ /sw/include/ |
From: <svn...@op...> - 2009-11-09 16:10:50
|
Author: bellmich Date: Mon Nov 9 17:10:34 2009 New Revision: 1352 URL: http://libsyncml.opensync.org/changeset/1352 Log: made some popular content types public Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c trunk/libsyncml/data_sync_api/sml_data_sync_defines.h trunk/libsyncml/sml_defines.h trunk/libsyncml/sml_notification.c trunk/tests/check_devinf.c trunk/tests/check_ds.c trunk/tests/check_san.c trunk/tests/check_session.c trunk/tests/check_sync.c trunk/tests/check_wbxml_assembler.c trunk/tests/check_xml_assembler.c Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_devinf.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/libsyncml/data_sync_api/data_sync_devinf.c Mon Nov 9 17:10:34 2009 (r1352) @@ -24,6 +24,8 @@ #include "sml_data_sync_session_private.h" #include "sml_data_sync_data_store_private.h" +#include "sml_data_sync_defines.h" + #include "libsyncml/sml_support.h" #include "libsyncml/sml_error_internals.h" #include "../sml_defines.h" @@ -743,7 +745,7 @@ /* fix missing identifier */ if (!self->priv->local) { self->priv->local = sml_location_new(); - gchar *ident = sml_data_sync_dev_inf_get_identifier(); + const gchar *ident = sml_data_sync_dev_inf_get_identifier(); sml_location_set_uri(self->priv->local, ident); smlSafeCFree(&ident); } Modified: trunk/libsyncml/data_sync_api/sml_data_sync_defines.h ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync_defines.h Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/libsyncml/data_sync_api/sml_data_sync_defines.h Mon Nov 9 17:10:34 2009 (r1352) @@ -123,6 +123,15 @@ #define SML_TRANSPORT_CONFIG_DATASTORE_CONTACT "CONTACT" #define SML_TRANSPORT_CONFIG_DATASTORE_NOTE "NOTE" +/* Well known content types */ + +#define SML_ELEMENT_TEXT_VCARD "text/x-vcard" +#define SML_ELEMENT_TEXT_VCARD_30 "text/vcard" +#define SML_ELEMENT_TEXT_VCAL "text/x-vcalendar" +#define SML_ELEMENT_TEXT_ICAL "text/calendar" +#define SML_ELEMENT_TEXT_PLAIN "text/plain" +#define SML_ELEMENT_TEXT_MESSAGE "text/x-vMessage" + #ifdef __cplusplus } #endif Modified: trunk/libsyncml/sml_defines.h ============================================================================== --- trunk/libsyncml/sml_defines.h Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/libsyncml/sml_defines.h Mon Nov 9 17:10:34 2009 (r1352) @@ -174,13 +174,6 @@ SML_DEVINF_CTCAP_MAXSIZE } SmlDevInfCTCapType; -#define SML_ELEMENT_TEXT_VCARD "text/x-vcard" -#define SML_ELEMENT_TEXT_VCARD_30 "text/vcard" -#define SML_ELEMENT_TEXT_VCAL "text/x-vcalendar" -#define SML_ELEMENT_TEXT_ICAL "text/calendar" -#define SML_ELEMENT_TEXT_PLAIN "text/plain" -#define SML_ELEMENT_TEXT_MESSAGE "text/x-vMessage" - #define SML_ELEMENT_DEVINF_XML "application/vnd.syncml-devinf+xml" #define SML_ELEMENT_WBXML "application/vnd.syncml+wbxml" #define SML_ELEMENT_XML "application/vnd.syncml+xml" Modified: trunk/libsyncml/sml_notification.c ============================================================================== --- trunk/libsyncml/sml_notification.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/libsyncml/sml_notification.c Mon Nov 9 17:10:34 2009 (r1352) @@ -28,6 +28,7 @@ #include "sml_md5.h" #include "data_sync_api/sml_location.h" +#include "data_sync_api/sml_data_sync_defines.h" SmlNotification* smlNotificationNew (SmlNotificationVersion version, Modified: trunk/tests/check_devinf.c ============================================================================== --- trunk/tests/check_devinf.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_devinf.c Mon Nov 9 17:10:34 2009 (r1352) @@ -25,6 +25,7 @@ #include <libsyncml/objects/sml_devinf_obj.h> #include <libsyncml/data_sync_api/sml_location.h> #include "libsyncml/parser/sml_xml_parse.h" +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <string.h> #include <unistd.h> Modified: trunk/tests/check_ds.c ============================================================================== --- trunk/tests/check_ds.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_ds.c Mon Nov 9 17:10:34 2009 (r1352) @@ -29,6 +29,7 @@ #include <libsyncml/sml_session_internals.h> #include <libsyncml/sml_elements_internals.h> #include <libsyncml/data_sync_api/sml_location.h> +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <string.h> #include <unistd.h> Modified: trunk/tests/check_san.c ============================================================================== --- trunk/tests/check_san.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_san.c Mon Nov 9 17:10:34 2009 (r1352) @@ -22,6 +22,7 @@ #include "tests/support.h" #include "libsyncml/sml_error_internals.h" #include "libsyncml/sml_notification_internals.h" +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> /* If the notification is a normal SyncML message then a manager is * required. The easiest way are two function which create and destroy Modified: trunk/tests/check_session.c ============================================================================== --- trunk/tests/check_session.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_session.c Mon Nov 9 17:10:34 2009 (r1352) @@ -27,6 +27,7 @@ #include <libsyncml/sml_transport_internals.h> #include <libsyncml/objects/sml_auth.c> #include <libsyncml/data_sync_api/sml_location.h> +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <libsyncml/sml_notification.h> Modified: trunk/tests/check_sync.c ============================================================================== --- trunk/tests/check_sync.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_sync.c Mon Nov 9 17:10:34 2009 (r1352) @@ -27,6 +27,7 @@ #include <libsyncml/objects/sml_devinf_obj.h> #include <libsyncml/data_sync_api/sml_location.h> +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <libsyncml/sml_error_internals.h> Modified: trunk/tests/check_wbxml_assembler.c ============================================================================== --- trunk/tests/check_wbxml_assembler.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_wbxml_assembler.c Mon Nov 9 17:10:34 2009 (r1352) @@ -26,6 +26,7 @@ #include <libsyncml/sml_command_internals.h> #include <libsyncml/sml_elements_internals.h> #include <libsyncml/data_sync_api/sml_location.h> +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <libsyncml/sml_error_internals.h> static SmlAssembler *start_assembler(SmlSession *session, unsigned int limit) Modified: trunk/tests/check_xml_assembler.c ============================================================================== --- trunk/tests/check_xml_assembler.c Mon Nov 9 17:09:42 2009 (r1351) +++ trunk/tests/check_xml_assembler.c Mon Nov 9 17:10:34 2009 (r1352) @@ -24,6 +24,7 @@ #include <libsyncml/sml_elements_internals.h> #include <libsyncml/data_sync_api/sml_location.h> #include <libsyncml/data_sync_api/sml_data_sync_change_item_internals.h> +#include <libsyncml/data_sync_api/sml_data_sync_defines.h> #include <libsyncml/sml_error_internals.h> static SmlAssembler *start_assembler(SmlSession *session, unsigned int limit) |
From: <svn...@op...> - 2009-11-09 16:10:10
|
Author: bellmich Date: Mon Nov 9 17:09:42 2009 New Revision: 1351 URL: http://libsyncml.opensync.org/changeset/1351 Log: if a string is empty then the location should only be erased Modified: trunk/libsyncml/data_sync_api/sml_data_sync.c Modified: trunk/libsyncml/data_sync_api/sml_data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync.c Mon Nov 9 17:07:30 2009 (r1350) +++ trunk/libsyncml/data_sync_api/sml_data_sync.c Mon Nov 9 17:09:42 2009 (r1351) @@ -474,10 +474,12 @@ self->priv->remote = sml_location_new(); sml_location_set_uri(self->priv->remote, value); } else if (!strcmp(SML_DATA_SYNC_CONFIG_IDENTIFIER, name)) { - if (self->priv->local) + if (self->priv->local) { g_object_unref(self->priv->local); - self->priv->local = sml_location_new(); + self->priv->local = NULL; + } if (value && strlen(value)) { + self->priv->local = sml_location_new(); sml_location_set_uri(self->priv->local, value); } else { smlTrace(TRACE_INTERNAL, |
From: <svn...@op...> - 2009-11-09 16:07:52
|
Author: bellmich Date: Mon Nov 9 17:07:30 2009 New Revision: 1350 URL: http://libsyncml.opensync.org/changeset/1350 Log: add a real version higher than 0.5.99 to support version checking Modified: trunk/CMakeLists.txt Modified: trunk/CMakeLists.txt ============================================================================== --- trunk/CMakeLists.txt Fri Oct 23 17:09:12 2009 (r1349) +++ trunk/CMakeLists.txt Mon Nov 9 17:07:30 2009 (r1350) @@ -2,7 +2,7 @@ SET( LIBSYNCML_VERSION_MAJOR "0" ) SET( LIBSYNCML_VERSION_MINOR "5" ) -SET( LIBSYNCML_VERSION_PATCH "4" ) +SET( LIBSYNCML_VERSION_PATCH "100" ) SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION_MAJOR}.${LIBSYNCML_VERSION_MINOR}.${LIBSYNCML_VERSION_PATCH}" ) # The most recent interface number that this library implements. |
From: <svn...@op...> - 2009-11-08 16:11:48
|
Author: dgollub Date: Sun Nov 8 17:11:26 2009 New Revision: 5950 URL: http://www.opensync.org/changeset/5950 Log: Marshal/demarhasl the objtype sink also on the plugin initialize phase to get information if plugins provide a get_changes or read function, which are optional and have impact on conflict-handling (e.g. read() and ignore resolution-hanlder) if they aren't available. Modified: trunk/opensync/client/opensync_client.c trunk/opensync/client/opensync_client_internals.h trunk/opensync/client/opensync_client_proxy.c trunk/opensync/client/opensync_client_proxy_internals.h trunk/opensync/ipc/opensync_serializer.c trunk/opensync/ipc/opensync_serializer_internals.h trunk/tests/client-tests/check_proxy.c Modified: trunk/opensync/client/opensync_client.c ============================================================================== --- trunk/opensync/client/opensync_client.c Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/client/opensync_client.c Sun Nov 8 17:11:26 2009 (r5950) @@ -861,6 +861,10 @@ if (!reply) goto error_finalize; + /* Marshal available ObjType sinks */ + if (!osync_marshal_objtype_sinks(reply, client, FALSE, error)) + goto error_free_message; + if (!osync_queue_send_message(client->outgoing, NULL, reply, error)) goto error_free_message; @@ -957,12 +961,8 @@ OSyncMessage *reply = NULL; OSyncPluginConfig *config = NULL; OSyncList *res = NULL; - unsigned int avail = 0; - OSyncObjTypeSink *sink = NULL; unsigned int num_res = 0; OSyncPluginResource *resource = NULL; - OSyncList *objtypesinks = NULL; - OSyncList *list; config = osync_plugin_info_get_config(client->plugin_info); res = osync_plugin_config_get_resources(config); @@ -984,29 +984,9 @@ if (osync_error_is_set(error)) goto error_free_message; - objtypesinks = osync_plugin_info_get_objtype_sinks(client->plugin_info); - list = objtypesinks; - while(list) { - sink = (OSyncObjTypeSink*)list->data; - if (osync_objtype_sink_is_available(sink)) { - avail++; - } - list = list->next; - } - - if (!osync_message_write_uint(reply, avail, error)) + /* Marshal available ObjType sinks */ + if (!osync_marshal_objtype_sinks(reply, client, TRUE, error)) goto error_free_message; - - list = objtypesinks; - while(list) { - sink = (OSyncObjTypeSink*)list->data; - if (osync_objtype_sink_is_available(sink)) { - if (!osync_marshal_objtype_sink(reply, sink, error)) - goto error_free_message; - } - list = list->next; - } - osync_list_free(objtypesinks); if (!_osync_client_handle_capabilities_message(client, reply, error)) goto error_free_message; @@ -1033,7 +1013,6 @@ return TRUE; error_free_message: - osync_list_free(objtypesinks); osync_message_unref(reply); error: osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); @@ -2060,3 +2039,9 @@ osync_trace(TRACE_EXIT, "%s", __func__); } + +OSyncPluginInfo *osync_client_get_plugin_info(OSyncClient *client) +{ + osync_return_val_if_fail(client, NULL); + return client->plugin_info; +} Modified: trunk/opensync/client/opensync_client_internals.h ============================================================================== --- trunk/opensync/client/opensync_client_internals.h Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/client/opensync_client_internals.h Sun Nov 8 17:11:26 2009 (r5950) @@ -31,4 +31,6 @@ osync_bool osync_client_setup_pipes(OSyncClient *client, const char *pipe_path, OSyncError **error); osync_bool osync_client_connect_pipes(OSyncClient *client, OSyncError **error); +OSyncPluginInfo *osync_client_get_plugin_info(OSyncClient *client); + #endif /*OPENSYNC_CLIENT_INTERNALS_H_*/ Modified: trunk/opensync/client/opensync_client_proxy.c ============================================================================== --- trunk/opensync/client/opensync_client_proxy.c Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/client/opensync_client_proxy.c Sun Nov 8 17:11:26 2009 (r5950) @@ -258,6 +258,10 @@ osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); if (osync_message_get_cmd(message) == OSYNC_MESSAGE_REPLY) { + + if (!osync_demarshal_objtype_sinks(message, proxy, &locerror)) + goto error; + ctx->init_callback(proxy, ctx->init_callback_data, NULL); } else if (osync_message_get_cmd(message) == OSYNC_MESSAGE_ERRORREPLY) { @@ -431,9 +435,7 @@ OSyncClientProxy *proxy = ctx->proxy; OSyncError *error = NULL; OSyncError *locerror = NULL; - unsigned int num_sinks = 0; unsigned int i = 0; - OSyncObjTypeSink *sink = NULL; OSyncMember *member = osync_client_proxy_get_member(proxy); unsigned int num_res = 0; OSyncPluginConfig *config = NULL; @@ -445,22 +447,12 @@ osync_message_read_int(message, &proxy->has_main_sink, &locerror); - osync_message_read_uint(message, &num_sinks, &locerror); if (osync_error_is_set(&locerror)) goto error; - osync_trace(TRACE_INTERNAL, "main sink?: %i, num objs?: %i", proxy->has_main_sink, num_sinks); - - for (i = 0; i < num_sinks; i++) { - if (!osync_demarshal_objtype_sink(message, &sink, &locerror)) - goto error; - - proxy->objtypes = g_list_append(proxy->objtypes, sink); - - if (proxy->member) - osync_member_add_objtype_sink(proxy->member, sink); - } + if (!osync_demarshal_objtype_sinks(message, proxy, &locerror)) + goto error; if (!_osync_client_proxy_read_discover_message(proxy, message, &locerror)) goto error; @@ -1286,6 +1278,15 @@ return TRUE; } +void osync_client_proxy_add_objtype_sink(OSyncClientProxy *proxy, OSyncObjTypeSink *sink) +{ + osync_return_if_fail(proxy); + osync_return_if_fail(sink); + + osync_objtype_sink_ref(sink); + proxy->objtypes = g_list_append(proxy->objtypes, sink); +} + osync_bool osync_client_proxy_initialize(OSyncClientProxy *proxy, initialize_cb callback, void *userdata, const char *formatdir, const char *plugindir, const char *plugin, const char *groupname, const char *configdir, OSyncPluginConfig *config, OSyncError **error) { callContext *ctx = NULL; @@ -1343,8 +1344,7 @@ sink = osync_client_proxy_find_objtype_sink(proxy, objtype); /* TODO: In discovery phase *sink COULD be NULL. Review if this is correct behavior. */ if (sink) { - osync_objtype_sink_ref(sink); - proxy->objtypes = g_list_append(proxy->objtypes, sink); + osync_client_proxy_add_objtype_sink(proxy, sink); } } } Modified: trunk/opensync/client/opensync_client_proxy_internals.h ============================================================================== --- trunk/opensync/client/opensync_client_proxy_internals.h Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/client/opensync_client_proxy_internals.h Sun Nov 8 17:11:26 2009 (r5950) @@ -76,5 +76,7 @@ osync_bool osync_client_proxy_sync_done(OSyncClientProxy *proxy, sync_done_cb callback, void *userdata, const char *objtype, OSyncError **error); +void osync_client_proxy_add_objtype_sink(OSyncClientProxy *proxy, OSyncObjTypeSink *sink); + #endif /* OSYNC_CLIENT_PROXY_INTERNALS_H_ */ Modified: trunk/opensync/ipc/opensync_serializer.c ============================================================================== --- trunk/opensync/ipc/opensync_serializer.c Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/ipc/opensync_serializer.c Sun Nov 8 17:11:26 2009 (r5950) @@ -30,6 +30,11 @@ #include "opensync-plugin.h" #include "plugin/opensync_objtype_sink_internals.h" +#include "client/opensync_client_internals.h" +#include "client/opensync_client_proxy_internals.h" + +#include "opensync-group.h" + #include "opensync_serializer.h" #include "opensync_serializer_internals.h" @@ -487,6 +492,82 @@ return FALSE; } +osync_bool osync_marshal_objtype_sinks(OSyncMessage *reply, OSyncClient *client, osync_bool only_available, OSyncError **error) +{ + + unsigned int avail = 0; + OSyncPluginInfo *plugin_info = osync_client_get_plugin_info(client); + OSyncList *list, *objtypesinks = osync_plugin_info_get_objtype_sinks(plugin_info); + OSyncObjTypeSink *sink; + + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; + if (!only_available || osync_objtype_sink_is_available(sink)) { + avail++; + } + list = list->next; + } + + if (!osync_message_write_uint(reply, avail, error)) + goto error; + + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; + if (!only_available || osync_objtype_sink_is_available(sink)) { + if (!osync_marshal_objtype_sink(reply, sink, error)) + goto error; + } + list = list->next; + } + osync_list_free(objtypesinks); + + return TRUE; + +error: + osync_list_free(objtypesinks); + return FALSE; +} + +osync_bool osync_demarshal_objtype_sinks(OSyncMessage *message, OSyncClientProxy *proxy, OSyncError **error) +{ + OSyncObjTypeSink *sink, *proxy_sink, *member_sink; + unsigned int i, num_sinks; + OSyncMember *member; + + if (!osync_message_read_uint(message, &num_sinks, error)) + goto error; + + osync_trace(TRACE_INTERNAL, "num objs?: %u", num_sinks); + + for (i = 0; i < num_sinks; i++) { + if (!osync_demarshal_objtype_sink(message, &sink, error)) + goto error; + + /* Update the sink if there already exists one */ + if ((proxy_sink = osync_client_proxy_find_objtype_sink(proxy, osync_objtype_sink_get_name(sink)))) { + osync_bool func_read = osync_objtype_sink_get_function_read(sink); + osync_bool func_getchanges = osync_objtype_sink_get_function_getchanges(sink); + + osync_objtype_sink_set_function_read(proxy_sink, func_read); + osync_objtype_sink_set_function_getchanges(proxy_sink, func_getchanges); + } else { + osync_client_proxy_add_objtype_sink(proxy, sink); + } + + if ((member = osync_client_proxy_get_member(proxy)) && + !(member_sink = osync_member_find_objtype_sink(member, osync_objtype_sink_get_name(sink)))) { + osync_member_add_objtype_sink(member, sink); + } + } + + return TRUE; + +error: + return FALSE; +} + osync_bool osync_marshal_error(OSyncMessage *message, OSyncError *marshal_error, OSyncError **error) { osync_assert(message); Modified: trunk/opensync/ipc/opensync_serializer_internals.h ============================================================================== --- trunk/opensync/ipc/opensync_serializer_internals.h Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/opensync/ipc/opensync_serializer_internals.h Sun Nov 8 17:11:26 2009 (r5950) @@ -50,6 +50,9 @@ osync_bool osync_marshal_pluginresource(OSyncMessage *message, OSyncPluginResource *res, OSyncError **error); osync_bool osync_demarshal_pluginresource(OSyncMessage *message, OSyncPluginResource **res, OSyncError **error); +osync_bool osync_marshal_objtype_sinks(OSyncMessage *reply, OSyncClient *client, osync_bool only_available, OSyncError **error); +osync_bool osync_demarshal_objtype_sinks(OSyncMessage *message, OSyncClientProxy *proxy, OSyncError **error); + /*@}*/ #endif /* _OPENSYNC_SERIALIZER_INTERNALS_H_ */ Modified: trunk/tests/client-tests/check_proxy.c ============================================================================== --- trunk/tests/client-tests/check_proxy.c Fri Nov 6 22:34:10 2009 (r5949) +++ trunk/tests/client-tests/check_proxy.c Sun Nov 8 17:11:26 2009 (r5950) @@ -170,7 +170,12 @@ while (init_replies != 1) { g_usleep(100); } +/* TODO: create a mock-sync testcase which doesn't report any objtypes wihtout an initial discover call. + * e.g. empty OSyncPluingconfig + fail_unless(osync_client_proxy_num_objtypes(proxy) == 0, NULL); + + */ fail_unless(osync_client_proxy_discover(proxy, discover_callback, GINT_TO_POINTER(1), &error), NULL); fail_unless(error == NULL, NULL); |
From: <svn...@op...> - 2009-11-06 21:34:44
|
Author: scriptor Date: Fri Nov 6 22:34:10 2009 New Revision: 5949 URL: http://www.opensync.org/changeset/5949 Log: Fixed an error (...DIRS vs. ...LIBRARIES). Modified: plugins/ldap-sync/tests/CMakeLists.txt Modified: plugins/ldap-sync/tests/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/tests/CMakeLists.txt Fri Nov 6 17:07:00 2009 (r5948) +++ plugins/ldap-sync/tests/CMakeLists.txt Fri Nov 6 22:34:10 2009 (r5949) @@ -290,7 +290,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ) ADD_EXECUTABLE( check_detector1 check_detector1.c ) -TARGET_LINK_LIBRARIES( check_detector1 ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARIES} ) +TARGET_LINK_LIBRARIES( check_detector1 ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ) ADD_TEST( detect1 check_detector1 ${TESTDIR}/contact1.xml ) @@ -319,7 +319,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ) ADD_EXECUTABLE( check_do_convert_from_to check_do_convert_from_to.c ) -TARGET_LINK_LIBRARIES( check_do_convert_from_to ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARIES} ) +TARGET_LINK_LIBRARIES( check_do_convert_from_to ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ) ADD_TEST( convert_vcards1 ${TESTDIR}/check_convert_from_to ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR}/tests/vcards/*.vcf" "--to-ldap-evolutionperson" ) @@ -549,9 +549,6 @@ IF (RUN_AUTH_TESTS) - INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ) - LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ) - ADD_TEST( plugin_auth_simple_slapd ${TESTDIR}/check_plugin_auth "plugin_auth_simple_slapd" ${CMAKE_BINARY_DIR} "${CMAKE_SOURCE_DIR}/tests/ldap-sync.conf_simple_slapd" ) ADD_TEST( plugin_auth_digest_md5_slapd ${TESTDIR}/check_plugin_auth "plugin_auth_digest_md5_slapd" ${CMAKE_BINARY_DIR} "${CMAKE_SOURCE_DIR}/tests/ldap-sync.conf_digest_md5_slapd" ) |
From: <svn...@op...> - 2009-11-06 16:07:16
|
Author: svnbot Date: Fri Nov 6 17:07:00 2009 New Revision: 5948 URL: http://www.opensync.org/changeset/5948 Log: Pinned svn:externals to revision r5947 for tag osynctool/tags/osynctool-test-tag/ Modified: osynctool/tags/osynctool-test-tag/ (props changed) |
From: <svn...@op...> - 2009-11-06 16:06:44
|
Author: dgollub Date: Fri Nov 6 17:06:24 2009 New Revision: 5947 URL: http://www.opensync.org/changeset/5947 Log: Test-tag to demonstrate the post-commit hook, please ignore. Added: osynctool/tags/osynctool-test-tag/ (props changed) - copied from r5946, osynctool/trunk/ |
From: <svn...@op...> - 2009-11-06 11:57:30
|
Author: dgollub Date: Fri Nov 6 12:57:14 2009 New Revision: 5946 URL: http://www.opensync.org/changeset/5946 Log: syncml-plugin branch for libsyncml-0.5.x maintenance port Added: plugins/syncml/branches/libsyncml-0.5.x/ - copied from r5945, plugins/syncml/trunk/ |
From: <svn...@op...> - 2009-11-06 11:55:18
|
Author: dgollub Date: Fri Nov 6 12:55:04 2009 New Revision: 5945 URL: http://www.opensync.org/changeset/5945 Log: Changed syncml-plugin directory-hierarchy to tags/branches/trunk To branch libsyncml 0.5.x development Added: plugins/syncml/branches/ plugins/syncml/tags/ plugins/syncml/trunk/ (props changed) plugins/syncml/trunk/AUTHORS - copied unchanged from r5944, plugins/syncml/AUTHORS plugins/syncml/trunk/CMakeLists.txt - copied unchanged from r5944, plugins/syncml/CMakeLists.txt plugins/syncml/trunk/COPYING - copied unchanged from r5944, plugins/syncml/COPYING plugins/syncml/trunk/config.h.cmake - copied unchanged from r5944, plugins/syncml/config.h.cmake plugins/syncml/trunk/src/ - copied from r5944, plugins/syncml/src/ plugins/syncml/trunk/tests/ - copied from r5944, plugins/syncml/tests/ Deleted: plugins/syncml/AUTHORS plugins/syncml/CMakeLists.txt plugins/syncml/COPYING plugins/syncml/config.h.cmake plugins/syncml/src/ plugins/syncml/tests/ Modified: plugins/syncml/ (props changed) |
From: <svn...@op...> - 2009-11-05 22:11:14
|
Author: scriptor Date: Thu Nov 5 23:11:01 2009 New Revision: 5944 URL: http://www.opensync.org/changeset/5944 Log: I have added further diagnostic messages to make it clear to the user what cmake is actually doing. Corrected TARGET_LINK_LIBRARIES for those cases, when libsasl2 can not be found. Added liblber (belongs to libldap). This is necessary according to the docs. Removed references to libgcrypt that were still left. I had removed this dependency. cmake_policy commands must be the very first ones in a CMakeLists.txt, as it seems. I have defined CPACK_SOURCE_IGNORE_FILES, as it would be reasonable. Unfortunately, cpack does not realize, that I have set CMP0010. And I don't know, either, what could be wrong in the CPACK_SOURCE_IGNORE_FILES line. As of today the LDAP plugin builds on windows 2000 using the MinGW compiler. Though, I have not run any tests, yet. Modified: plugins/ldap-sync/CMakeLists.txt plugins/ldap-sync/src/CMakeLists.txt Modified: plugins/ldap-sync/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/CMakeLists.txt Thu Nov 5 23:10:48 2009 (r5943) +++ plugins/ldap-sync/CMakeLists.txt Thu Nov 5 23:11:01 2009 (r5944) @@ -20,28 +20,29 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # - -PROJECT( libopensync-plugin-ldap ) - -SET( VERSION "0.40" ) -SET( CPACK_PACKAGE_VERSION "${VERSION}" ) -SET( OPENSYNC_MIN_VERSION "${VERSION}" ) - -cmake_minimum_required(VERSION 2.4) +################################################################### +# Policy commands must appear as the very first ones, as it seems. IF (COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) - cmake_policy(SET CMP0010 NEW) - MESSAGE( STATUS "Policies CMP0003 and CMP0010 have just been set to NEW." ) + cmake_policy(SET CMP0010 OLD) + cmake_policy(GET CMP0010 policy_ten) - MESSAGE( STATUS "policy_ten = \"${policy_ten}\"" ) + MESSAGE( STATUS "CMP0010 has been set to \"${policy_ten}\"" ) ELSE (COMMAND cmake_policy) MESSAGE( STATUS " Could NOT find the command \"cmake_policy\". Ignoring.") ENDIF (COMMAND cmake_policy) -# SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -################# Making a package: ##################### -SET(CPACK_SOURCE_IGNORE_FILES "/Testing/;tags;/obsolete/;build;build_debug;svn_;/CVS/;/\\.svn/;\\.swp$;.*~;") +################### Name and version: ############################# +PROJECT( libopensync-plugin-ldap ) + +SET( VERSION "0.40" ) +SET( CPACK_PACKAGE_VERSION "${VERSION}" ) +# SET( OPENSYNC_MIN_VERSION "${VERSION}" ) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +# SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + ######################################################### @@ -131,9 +132,22 @@ # Set some defaults -INCLUDE( Testing ) -INCLUDE( ShowStatus ) -INCLUDE( OpenSyncInternal ) +INCLUDE( Testing RESULT_VARIABLE TESTING_MODULE ) +IF (NOT TESTING_MODULE) + MESSAGE(STATUS " cmake/modules/Testing.cmake could NOT be found. Ignoring.") +ENDIF (NOT TESTING_MODULE) + +INCLUDE( ShowStatus RESULT_VARIABLE SHOWSTATUS_MODULE ) +IF (NOT SHOWSTATUS_MODULE) + MESSAGE(STATUS " cmake/modules/ShowStatus.cmake could NOT be found. Ignoring.") +ENDIF (NOT SHOWSTATUS_MODULE) + +INCLUDE( OpenSyncInternal RESULT_VARIABLE OPENSYNC_INTERNAL ) +IF (NOT OPENSYNC_INTERNAL) + MESSAGE(FATAL_ERROR " cmake/modules/OpenSyncInternal.cmake could NOT be found. Exiting.") +ENDIF (NOT OPENSYNC_INTERNAL) + + # Now, that CMAKE_BUILD_TYPE has been corrupted by OpenSyncInternal.cmake @@ -185,27 +199,44 @@ MESSAGE(STATUS "CWD = $ENV{PWD}" ) MESSAGE(STATUS "LDAP_PLUGIN_OPENSYNC_CONFIGDIR = ${LDAP_PLUGIN_OPENSYNC_CONFIGDIR}") MESSAGE(STATUS "LDAP_PLUGIN_OPENSYNC_SCHEMASDIR = ${LDAP_PLUGIN_OPENSYNC_SCHEMASDIR}") + IF ( USE_OPENLDAP ) - MESSAGE(STATUS "libldap from openldap is to be used.") + MESSAGE (STATUS "libldap from openldap is to be used.") ELSE ( USE_OPENLDAP ) IF ( USE_MOZLDAP ) - MESSAGE(STATUS "libldap60 from Mozilla is to be used.") + MESSAGE (STATUS "libldap60 from Mozilla is to be used.") ENDIF ( USE_MOZLDAP ) ENDIF ( USE_OPENLDAP ) +IF ( LIBSASL2_FOUND ) + MESSAGE (STATUS "Strong, SASL based binds are enabled.") +ELSE ( LIBSASL2_FOUND ) + MESSAGE (STATUS "Only the \"simple\" bind method is possible. libsasl2 has NOT been found.") +ENDIF ( LIBSASL2_FOUND ) + + ##################### debugging cmake... ################################# # "cmake ... -DCMAKE_BUILD_TYPE=Whatever" sometimes does not work. # Actually, it NEVER works here...What's going on? MESSAGE(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}" ) -SHOW_STATUS( ENABLE_UNITTESTS "Build the test suite:\t\t" ) -SHOW_STATUS( RUN_LONG_TESTS "Run rather time consuming tests, as well:" ) -SHOW_STATUS( RUN_AUTH_TESTS "Run the authentication specific tests, too:" ) + +IF(CMAKE_CROSSCOMPILING) + MESSAGE(STATUS "We are cross-compiling.") +ENDIF(CMAKE_CROSSCOMPILING) + +IF (SHOWSTATUS_MODULE) + SHOW_STATUS( ENABLE_UNITTESTS "Build the test suite:\t\t" ) + SHOW_STATUS( RUN_LONG_TESTS "Run rather time consuming tests, as well:" ) + SHOW_STATUS( RUN_AUTH_TESTS "Run the authentication specific tests, too:" ) +ENDIF (SHOWSTATUS_MODULE) + ########################################################################## ## Packaging +SET(CPACK_SOURCE_IGNORE_FILES "/Testing/;tags;/obsolete/;build;build_debug;svn_;/CVS/;/\\.svn/;\\.swp$;.*~;") OPENSYNC_PACKAGE( ${PROJECT_NAME} ${VERSION} ) # vim:tw=0:nowrap Modified: plugins/ldap-sync/src/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/src/CMakeLists.txt Thu Nov 5 23:10:48 2009 (r5943) +++ plugins/ldap-sync/src/CMakeLists.txt Thu Nov 5 23:11:01 2009 (r5944) @@ -25,8 +25,12 @@ # Determine _LDAP_INCLUDE_DIRS IF ( LIBLDAP_FOUND ) - # libldap from openldap - SET ( _LDAP_INCLUDE_DIRS ${LDAP_INCLUDE_DIR} ) + # libldap and liblber from openldap + IF ( LIBLBER_FOUND ) + SET ( _LDAP_INCLUDE_DIRS ${LDAP_INCLUDE_DIR} ${LBER_INCLUDE_DIR} ) + ELSE ( LIBLBER_FOUND ) + SET ( _LDAP_INCLUDE_DIRS ${LDAP_INCLUDE_DIR} ) + ENDIF ( LIBLBER_FOUND ) ELSE ( LIBLDAP_FOUND ) IF ( LIBMOZLDAP_FOUND ) @@ -50,7 +54,11 @@ # Determine _LDAP_LIBRARY_DIRS IF ( LIBLDAP_FOUND ) - SET ( _LDAP_LIBRARY_DIRS ${LDAP_LIBRARY_DIRS} ) + IF ( LIBLBER_FOUND ) + SET ( _LDAP_LIBRARY_DIRS ${LDAP_LIBRARY_DIRS} ${LBER_LIBRARY_DIRS} ) + ELSE ( LIBLBER_FOUND ) + SET ( _LDAP_LIBRARY_DIRS ${LDAP_LIBRARY_DIRS} ) + ENDIF ( LIBLBER_FOUND ) ELSE ( LIBLDAP_FOUND ) IF ( LIBMOZLDAP_FOUND ) IF ( LIBMOZLDAP_LIBDIR ) @@ -66,7 +74,11 @@ # Determine _LDAP_LIBRARIES IF ( LIBLDAP_FOUND ) - SET ( _LDAP_LIBRARIES ${LDAP_LIBRARY} ) + IF ( LIBLBER_FOUND) + SET ( _LDAP_LIBRARIES ${LDAP_LIBRARY} ${LBER_LIBRARY} ) + ELSE ( LIBLBER_FOUND) + SET ( _LDAP_LIBRARIES ${LDAP_LIBRARY} ) + ENDIF ( LIBLBER_FOUND) ELSE ( LIBLDAP_FOUND ) IF ( LIBMOZLDAP_FOUND ) @@ -123,9 +135,13 @@ +IF (LIBSASL2_FOUND) + TARGET_LINK_LIBRARIES( ldap-sync ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${_LDAP_LIBRARIES} ${SASL2_LIBRARY}) +ELSE (LIBSASL2_FOUND) + TARGET_LINK_LIBRARIES( ldap-sync ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${_LDAP_LIBRARIES}) +ENDIF (LIBSASL2_FOUND) -TARGET_LINK_LIBRARIES( ldap-sync ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${_LDAP_LIBRARIES} ${GCRYPT_LIBRARY} ${SASL2_LIBRARY}) -TARGET_LINK_LIBRARIES( ldap-format ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${_LDAP_LIBRARIES} ${GCRYPT_LIBRARY}) +TARGET_LINK_LIBRARIES( ldap-format ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${_LDAP_LIBRARIES}) |
From: <svn...@op...> - 2009-11-05 22:11:04
|
Author: scriptor Date: Thu Nov 5 23:10:48 2009 New Revision: 5943 URL: http://www.opensync.org/changeset/5943 Log: I have added liblber from openldap. This library must explicitely be mentioned according to the docs. And it is indeed necessary on platforms other than linux. Modified: branches/3rd-party-cmake-modules/modules/FindLibLdap.cmake plugins/ldap-sync/config.h.cmake Modified: branches/3rd-party-cmake-modules/modules/FindLibLdap.cmake ============================================================================== --- branches/3rd-party-cmake-modules/modules/FindLibLdap.cmake Thu Nov 5 21:12:29 2009 (r5942) +++ branches/3rd-party-cmake-modules/modules/FindLibLdap.cmake Thu Nov 5 23:10:48 2009 (r5943) @@ -14,19 +14,50 @@ # -MESSAGE(STATUS "checking for libldap...") +MESSAGE(STATUS "checking for libldap and liblber...") FIND_PATH(LDAP_INCLUDE_DIR NAMES ldap.h PATHS /include /usr/include /usr/local/include /usr/share/include /opt/include DOC "Try and find the header file ldap.h") +FIND_PATH(LBER_INCLUDE_DIR NAMES lber.h + PATHS /include /usr/include /usr/local/include /usr/share/include /opt/include ${LDAP_INCLUDE_DIR} + DOC "Try and find the header file lber.h") + + + FIND_LIBRARY(LDAP_LIBRARY NAMES ldap PATHS /usr/lib /lib /usr/local/lib /usr/share/lib /opt/lib /opt/share/lib /var/lib /usr/lib64 /lib64 /usr/local/lib64 /usr/share/lib64 /opt/lib64 /opt/share/lib64 /var/lib64 DOC "Try and find libldap") + +IF (LDAP_LIBRARY) + get_filename_component(LDAP_LIBRARY_DIRS ${LDAP_LIBRARY} PATH) + FIND_LIBRARY(LBER_LIBRARY NAMES lber + PATHS /usr/lib /lib /usr/local/lib /usr/share/lib /opt/lib /opt/share/lib /var/lib /usr/lib64 /lib64 /usr/local/lib64 /usr/share/lib64 /opt/lib64 /opt/share/lib64 /var/lib64 ${LDAP_LIBRARY_DIRS} + DOC "Try and find liblber") +ELSE (LDAP_LIBRARY) + FIND_LIBRARY(LBER_LIBRARY NAMES lber + PATHS /usr/lib /lib /usr/local/lib /usr/share/lib /opt/lib /opt/share/lib /var/lib /usr/lib64 /lib64 /usr/local/lib64 /usr/share/lib64 /opt/lib64 /opt/share/lib64 /var/lib64 + DOC "Try and find liblber") +ENDIF (LDAP_LIBRARY) + + + + +IF (LBER_LIBRARY) + SET( LIBLBER_FOUND 1 ) + get_filename_component(LBER_LIBRARY_DIRS ${LBER_LIBRARY} PATH) + MESSAGE(STATUS " Found ${LBER_LIBRARY}") +ELSE(LBER_LIBRARY) + MESSAGE( STATUS " Could NOT find liblber.") +ENDIF (LBER_LIBRARY) + + + + IF (LDAP_INCLUDE_DIR AND LDAP_LIBRARY) - SET( LIBLDAP_FOUND 1 ) - get_filename_component(LDAP_LIBRARY_DIRS ${LDAP_LIBRARY} PATH) + SET( LIBLDAP_FOUND 1 ) MESSAGE(STATUS " Found ${LDAP_LIBRARY}") ELSE (LDAP_INCLUDE_DIR AND LDAP_LIBRARY) IF ( LibLdap_FIND_REQUIRED ) Modified: plugins/ldap-sync/config.h.cmake ============================================================================== --- plugins/ldap-sync/config.h.cmake Thu Nov 5 21:12:29 2009 (r5942) +++ plugins/ldap-sync/config.h.cmake Thu Nov 5 23:10:48 2009 (r5943) @@ -26,23 +26,34 @@ -/****** 1. libldap from openldap: http://www.openldap.org/ ******/ +/****** 1. libldap and from openldap: http://www.openldap.org/ ******/ /* Whether or not libldap from openldap has been found. */ #cmakedefine LIBLDAP_FOUND +/* Whether or not liblber from openldap has been found. */ +#cmakedefine LIBLBER_FOUND + /* Whether or not libldap from openldap is to be used. */ #cmakedefine USE_OPENLDAP /* Where is the ldap.h from openldap? */ #cmakedefine LDAP_INCLUDE_DIR "${LDAP_INCLUDE_DIR}" +/* Where is the lber.h from openldap? */ +#cmakedefine LBER_INCLUDE_DIR "${LBER_INCLUDE_DIR}" + /* Where is libldap.so from openldap? */ #cmakedefine LDAP_LIBRARY "${LDAP_LIBRARY}" +/* Where is liblber.so from openldap? */ +#cmakedefine LBER_LIBRARY "${LBER_LIBRARY}" + /* In which directories can libldap.so be found? */ #cmakedefine LDAP_LIBRARY_DIRS "${LDAP_LIBRARY_DIRS}" +/* In which directories can liblber.so be found? */ +#cmakedefine LBER_LIBRARY_DIRS "${LBER_LIBRARY_DIRS}" /****** 2. libldap60 from Mozilla: |
From: <svn...@op...> - 2009-11-05 20:12:42
|
Author: dgollub Date: Thu Nov 5 21:12:29 2009 New Revision: 5942 URL: http://www.opensync.org/changeset/5942 Log: Reenable pending limit. This got temporarly disabled by r5858 to address issue described in #1161 Finally we can commit/write more then 10 changes with the SyncML plugin, without loosing pending limit capability! Modified: trunk/opensync/client/opensync_client.c Modified: trunk/opensync/client/opensync_client.c ============================================================================== --- trunk/opensync/client/opensync_client.c Thu Nov 5 20:55:58 2009 (r5941) +++ trunk/opensync/client/opensync_client.c Thu Nov 5 21:12:29 2009 (r5942) @@ -1813,11 +1813,7 @@ client->incoming = osync_queue_ref(incoming); - /* FIXME: temporarily disable pending limit. - Re-enable this once the syncml pending limit deadlock has been fixed */ -#if 0 osync_queue_set_pending_limit(incoming, OSYNC_QUEUE_PENDING_LIMIT); -#endif return TRUE; |
From: <svn...@op...> - 2009-11-05 19:56:17
|
Author: dgollub Date: Thu Nov 5 20:55:58 2009 New Revision: 5941 URL: http://www.opensync.org/changeset/5941 Log: Return commit context immdetially. Use osync_context_report_uid_update() in sink sync_done() phase to report UID changes. This is required since SyncML is working async and report mappings changes, with the <Map> command, once all changes got commmit. So we do this in sync_done() Tested only DataSync-Server plugin. DataSync-Client untested. TODO: How to handle commit errors without commit context in syncml-plugin? refs #1161 Modified: plugins/syncml/src/syncml_callbacks.c plugins/syncml/src/syncml_common.c plugins/syncml/src/syncml_common.h plugins/syncml/src/syncml_ds_client.c plugins/syncml/src/syncml_ds_server.c Modified: plugins/syncml/src/syncml_callbacks.c ============================================================================== --- plugins/syncml/src/syncml_callbacks.c Thu Nov 5 20:16:33 2009 (r5940) +++ plugins/syncml/src/syncml_callbacks.c Thu Nov 5 20:55:58 2009 (r5941) @@ -400,12 +400,12 @@ &error, OSYNC_ERROR_GENERIC, "Unable to commit change. Error %i", code); - report_error_on_context(&(ctx->context), &error, TRUE); + //report_error_on_context(&(ctx->context), &error, TRUE); + // TODO port .... result = FALSE; } else { if (newuid) - osync_change_set_uid(ctx->change, newuid); - report_success_on_context(&(ctx->context)); + g_hash_table_insert(ctx->database->uid_updates, g_strdup(osync_change_get_uid(ctx->change)), g_strdup(newuid)); } // cleanup Modified: plugins/syncml/src/syncml_common.c ============================================================================== --- plugins/syncml/src/syncml_common.c Thu Nov 5 20:16:33 2009 (r5940) +++ plugins/syncml/src/syncml_common.c Thu Nov 5 20:55:58 2009 (r5941) @@ -59,6 +59,11 @@ } osync_trace(TRACE_INTERNAL, "%s - configuration cleaned", __func__); + if (database->uid_updates) { + g_hash_table_destroy(database->uid_updates); + database->uid_updates = NULL; + } + // cleanup contexts // if something is present here then it must be failed // because this is a software bug @@ -145,6 +150,8 @@ database->syncChanges = NULL; database->syncContexts = NULL; + 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"); @@ -870,3 +877,26 @@ return NULL; } +static void report_uid_updates(gpointer key, gpointer value, gpointer user_data) +{ + OSyncContext *ctx = (OSyncContext *) user_data; + + const char *olduid = (const char *) key; + const char *newuid = (const char *) value; + + osync_context_report_uid_update(ctx, olduid, newuid); +} + +void sink_sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, ctx, data); + SmlDatabase *database = (SmlDatabase *)data; + g_assert(database); + + g_hash_table_foreach(database->uid_updates, report_uid_updates, ctx); + + osync_context_report_success(ctx); + + osync_trace(TRACE_EXIT, "%s", __func__, ctx); +} + Modified: plugins/syncml/src/syncml_common.h ============================================================================== --- plugins/syncml/src/syncml_common.h Thu Nov 5 20:16:33 2009 (r5940) +++ plugins/syncml/src/syncml_common.h Thu Nov 5 20:55:58 2009 (r5941) @@ -128,6 +128,8 @@ OSyncContext *getChangesCtx; OSyncContext *commitCtx; + GHashTable *uid_updates; + GMutex *alert_type_mutex; GCond *alert_type_cond; @@ -135,7 +137,6 @@ } SmlDatabase; struct commitContext { - OSyncContext *context; OSyncChange *change; SmlDatabase *database; }; @@ -187,4 +188,7 @@ SmlChangeType _get_changetype(OSyncChange *change); + +void sink_sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data); + #endif //_SYNCML_COMMON_H Modified: plugins/syncml/src/syncml_ds_client.c ============================================================================== --- plugins/syncml/src/syncml_ds_client.c Thu Nov 5 20:16:33 2009 (r5940) +++ plugins/syncml/src/syncml_ds_client.c Thu Nov 5 20:55:58 2009 (r5941) @@ -45,6 +45,7 @@ osync_objtype_sink_set_get_changes_func(sink, ds_client_get_changeinfo); osync_objtype_sink_set_commit_func(sink, ds_client_commit); osync_objtype_sink_set_committed_all_func(sink, ds_client_committed_all); + osync_objtype_sink_set_sync_done_func(sink, sink_sync_done); /* Request a state database from the framework. */ osync_objtype_sink_enable_state_db(sink, TRUE); @@ -142,11 +143,9 @@ if (!tracer) goto oserror; tracer->change = change; - tracer->context = ctx; tracer->database = database; osync_change_ref(change); - osync_context_ref(ctx); // prepare data OSyncData *odata = osync_change_get_data(change); @@ -165,6 +164,8 @@ tracer, &error)) goto error; + osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); return; Modified: plugins/syncml/src/syncml_ds_server.c ============================================================================== --- plugins/syncml/src/syncml_ds_server.c Thu Nov 5 20:16:33 2009 (r5940) +++ plugins/syncml/src/syncml_ds_server.c Thu Nov 5 20:55:58 2009 (r5941) @@ -44,6 +44,7 @@ osync_objtype_sink_set_get_changes_func(sink, ds_server_get_changeinfo); osync_objtype_sink_set_commit_func(sink, ds_server_commit); osync_objtype_sink_set_committed_all_func(sink, ds_server_committed_all); + osync_objtype_sink_set_sync_done_func(sink, sink_sync_done); // Request a state database from the framework. osync_objtype_sink_enable_state_db(sink, TRUE); @@ -136,11 +137,9 @@ if (!tracer) goto oserror; tracer->change = change; - tracer->context = ctx; tracer->database = database; osync_change_ref(change); - osync_context_ref(ctx); // prepare data OSyncData *odata = osync_change_get_data(change); @@ -159,6 +158,8 @@ tracer, &error)) goto error; + osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); return; |
From: <svn...@op...> - 2009-11-05 19:16:52
|
Author: dgollub Date: Thu Nov 5 20:16:33 2009 New Revision: 5940 URL: http://www.opensync.org/changeset/5940 Log: Workaround wrong de-reference calls of the disconnect context which seems to get called too often. Which caused an segfault on disconnenct ... Modified: plugins/syncml/src/syncml_common.c Modified: plugins/syncml/src/syncml_common.c ============================================================================== --- plugins/syncml/src/syncml_common.c Thu Nov 5 20:10:05 2009 (r5939) +++ plugins/syncml/src/syncml_common.c Thu Nov 5 20:16:33 2009 (r5940) @@ -244,7 +244,12 @@ { /* The disconnect already happened or * the session never existed (connect error). */ - report_success_on_context(&ctx); + /* FIXME: at this point there seems to be already one reference taken: + * report_success_on_context(&ctx); + * + * use the regular context_report_success to avoid double-free + */ + osync_context_report_success(ctx); } else { env->disconnectCtx = ctx; osync_context_ref(env->disconnectCtx); |
From: <svn...@op...> - 2009-11-05 19:10:14
|
Author: dgollub Date: Thu Nov 5 20:10:05 2009 New Revision: 5939 URL: http://www.opensync.org/changeset/5939 Log: Fix osync_trace() varg list which was missing the error parameter. Added input_data and input_size of converter trace instrumentation for easier debugging. Modified: trunk/opensync/data/opensync_change.c trunk/opensync/format/opensync_converter.c Modified: trunk/opensync/data/opensync_change.c ============================================================================== --- trunk/opensync/data/opensync_change.c Thu Nov 5 20:09:09 2009 (r5938) +++ trunk/opensync/data/opensync_change.c Thu Nov 5 20:10:05 2009 (r5939) @@ -179,7 +179,7 @@ OSyncConvCmpResult osync_change_compare(OSyncChange *leftchange, OSyncChange *rightchange, OSyncError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, leftchange, rightchange, error); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, leftchange, rightchange, error); osync_assert(rightchange); osync_assert(leftchange); Modified: trunk/opensync/format/opensync_converter.c ============================================================================== --- trunk/opensync/format/opensync_converter.c Thu Nov 5 20:09:09 2009 (r5938) +++ trunk/opensync/format/opensync_converter.c Thu Nov 5 20:10:05 2009 (r5939) @@ -190,7 +190,7 @@ osync_assert(converter->convert_func); /* Invoke the converter */ - osync_trace(TRACE_ENTRY, "Converter function from \"%s\" to \"%s\"", osync_objformat_get_name(converter->source_format), osync_objformat_get_name(converter->target_format)); + osync_trace(TRACE_ENTRY, "Converter function from \"%s\" to \"%s\" - input_data: %p input_size: %u", osync_objformat_get_name(converter->source_format), osync_objformat_get_name(converter->target_format), input_data, input_size); if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, config, converter->userdata, error)) { osync_trace(TRACE_EXIT_ERROR, "Converter function: %s", osync_error_print(error)); |
From: <svn...@op...> - 2009-11-05 19:09:21
|
Author: dgollub Date: Thu Nov 5 20:09:09 2009 New Revision: 5938 URL: http://www.opensync.org/changeset/5938 Log: ix jumps based on uninitialized values - reported by valgrind. Caused crashes if one or more members didn't had any capabilities. Modified: trunk/opensync/engine/opensync_obj_engine.c Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Thu Nov 5 20:00:41 2009 (r5937) +++ trunk/opensync/engine/opensync_obj_engine.c Thu Nov 5 20:09:09 2009 (r5938) @@ -304,7 +304,7 @@ OSyncCapabilities *caps1 = osync_member_get_capabilities(member1); OSyncCapabilities *caps2 = osync_member_get_capabilities(member2); - OSyncChange *clone_change1, *clone_change2; + OSyncChange *clone_change1 = NULL, *clone_change2 = NULL; OSyncChange *change1 = change; OSyncChange *change2 = mapping_change; |
From: <svn...@op...> - 2009-11-05 19:00:54
|
Author: dgollub Date: Thu Nov 5 20:00:41 2009 New Revision: 5937 URL: http://www.opensync.org/changeset/5937 Log: Instrument start of conversion function with trace entry/exit calls. This helps debugging with trace files when a conversion plugin fails. Modified: trunk/opensync/format/opensync_converter.c Modified: trunk/opensync/format/opensync_converter.c ============================================================================== --- trunk/opensync/format/opensync_converter.c Thu Nov 5 19:56:39 2009 (r5936) +++ trunk/opensync/format/opensync_converter.c Thu Nov 5 20:00:41 2009 (r5937) @@ -190,8 +190,14 @@ osync_assert(converter->convert_func); /* Invoke the converter */ - if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, config, converter->userdata, error)) + osync_trace(TRACE_ENTRY, "Converter function from \"%s\" to \"%s\"", osync_objformat_get_name(converter->source_format), osync_objformat_get_name(converter->target_format)); + if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, config, converter->userdata, error)) { + + osync_trace(TRACE_EXIT_ERROR, "Converter function: %s", osync_error_print(error)); goto error; + } + + osync_trace(TRACE_EXIT, "Converter function"); if (output_size == 0) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Converter Bug (%s -> %s). Conversion result is data with size 0.", osync_objformat_get_name(converter->source_format), osync_objformat_get_name(converter->target_format)); |
From: <svn...@op...> - 2009-11-05 18:56:49
|
Author: dgollub Date: Thu Nov 5 19:56:39 2009 New Revision: 5936 URL: http://www.opensync.org/changeset/5936 Log: By default the format-plugin should fail on any conversion, otherwise this cause unexpected conversion path once the example format plugin got installed in the system-environment Modified: trunk/docs/examples/plugins/src/format.c Modified: trunk/docs/examples/plugins/src/format.c ============================================================================== --- trunk/docs/examples/plugins/src/format.c Thu Nov 5 19:44:57 2009 (r5935) +++ trunk/docs/examples/plugins/src/format.c Thu Nov 5 19:56:39 2009 (r5936) @@ -90,7 +90,13 @@ * */ - return TRUE; + /* XXX: your conversion code */ + /* return TRUE; */ + + + /* on any conversion error: */ + osync_error_set(error, OSYNC_ERROR_CONVERT, "Conversion of format1 to format2 failed."); + return FALSE; } static osync_bool conv_format2_to_format1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) @@ -102,7 +108,13 @@ * */ - return TRUE; + /* XXX: your conversion code */ + /* return TRUE; */ + + + /* on any conversion error: */ + osync_error_set(error, OSYNC_ERROR_CONVERT, "Conversion of format2 to format1 failed."); + return FALSE; } static osync_bool destroy_format1(char *input, unsigned int size, void *data, OSyncError **error) |
From: <svn...@op...> - 2009-11-05 18:45:12
|
Author: dgollub Date: Thu Nov 5 19:44:57 2009 New Revision: 5935 URL: http://www.opensync.org/changeset/5935 Log: Sort xmlformat-doc to fix sanity check if xmlformat is sorted. We still need a better alternative to avoid to many sort calls ... Modified: format-plugins/xmlformat/trunk/src/xmlformat-doc.c Modified: format-plugins/xmlformat/trunk/src/xmlformat-doc.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat-doc.c Thu Nov 5 19:41:39 2009 (r5934) +++ format-plugins/xmlformat/trunk/src/xmlformat-doc.c Thu Nov 5 19:44:57 2009 (r5935) @@ -92,11 +92,19 @@ { OSyncXMLFormat *ret = osync_xmlformat_parse(input, inpsize, error); *free_input = TRUE; + if (!ret) - return FALSE; + goto error; + + if (!osync_xmlformat_sort(ret, error)) /* XXX: avoid a sort here if possible ... */ + goto error; + *output = (char *)ret; *outpsize = osync_xmlformat_size(); return TRUE; + +error: + return FALSE; } static osync_bool destroy(char *input, unsigned int inpsize, void *user_data, OSyncError **error) |
From: <svn...@op...> - 2009-11-05 18:41:53
|
Author: dgollub Date: Thu Nov 5 19:41:39 2009 New Revision: 5934 URL: http://www.opensync.org/changeset/5934 Log: Fail if conversion results in a converted-change with size 0. This should report broekn format plugins. Modified: trunk/opensync/format/opensync_converter.c Modified: trunk/opensync/format/opensync_converter.c ============================================================================== --- trunk/opensync/format/opensync_converter.c Thu Nov 5 19:40:46 2009 (r5933) +++ trunk/opensync/format/opensync_converter.c Thu Nov 5 19:41:39 2009 (r5934) @@ -193,6 +193,11 @@ if (!converter->convert_func(input_data, input_size, &output_data, &output_size, &free_input, config, converter->userdata, error)) goto error; + if (output_size == 0) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Converter Bug (%s -> %s). Conversion result is data with size 0.", osync_objformat_get_name(converter->source_format), osync_objformat_get_name(converter->target_format)); + goto error; + } + /* Validate if for this objformat are format-plugin validiation-function is provided */ if (osync_objformat_must_validate(converter->target_format)) { if (!osync_objformat_validate(converter->target_format, output_data, output_size, error)) |
From: <svn...@op...> - 2009-11-05 18:40:56
|
Author: dgollub Date: Thu Nov 5 19:40:46 2009 New Revision: 5933 URL: http://www.opensync.org/changeset/5933 Log: Sanity check for demerger. Check if the change to demerge has a reasonable size ... size > 0 This avoids that a format-plugin which isn't expecting an empty change is crashing. Instead the engine fails smoothly with an OSyncError Modified: trunk/opensync/format/opensync_merger.c Modified: trunk/opensync/format/opensync_merger.c ============================================================================== --- trunk/opensync/format/opensync_merger.c Thu Nov 5 19:38:46 2009 (r5932) +++ trunk/opensync/format/opensync_merger.c Thu Nov 5 19:40:46 2009 (r5933) @@ -120,6 +120,16 @@ osync_data_get_data(data, &buffer, &size); + if (size == 0) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Can't demerge data with 0 size."); + goto error; + } + + if (buffer == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "No data to demerge."); + goto error; + } + if (!merger->demerge_func(&buffer, &size, caps, NULL /*userdata!*/, error)) goto error; |
From: <svn...@op...> - 2009-11-05 18:39:12
|
Author: dgollub Date: Thu Nov 5 19:38:46 2009 New Revision: 5932 URL: http://www.opensync.org/changeset/5932 Log: Fix conversion from xmlformat-doc to xmlformat by reporting the missing size of the XMLFormat struct. Converters reporting an output size of 0 are broken! Modified: format-plugins/xmlformat/trunk/src/xmlformat-doc.c Modified: format-plugins/xmlformat/trunk/src/xmlformat-doc.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat-doc.c Thu Nov 5 19:16:15 2009 (r5931) +++ format-plugins/xmlformat/trunk/src/xmlformat-doc.c Thu Nov 5 19:38:46 2009 (r5932) @@ -95,6 +95,7 @@ if (!ret) return FALSE; *output = (char *)ret; + *outpsize = osync_xmlformat_size(); return TRUE; } |
From: <svn...@op...> - 2009-11-05 18:16:30
|
Author: dgollub Date: Thu Nov 5 19:16:15 2009 New Revision: 5931 URL: http://www.opensync.org/changeset/5931 Log: Print error-stack for more verbose error messages Modified: osynctool/trunk/tools/osynctool.c Modified: osynctool/trunk/tools/osynctool.c ============================================================================== --- osynctool/trunk/tools/osynctool.c Thu Nov 5 19:13:34 2009 (r5930) +++ osynctool/trunk/tools/osynctool.c Thu Nov 5 19:16:15 2009 (r5931) @@ -1324,6 +1324,7 @@ int main (int argc, char *argv[]) { OSyncError *error = NULL; + char *error_stack = NULL; char *groupname = NULL; char *membername = NULL; char *pluginname = NULL; @@ -1680,7 +1681,9 @@ error_free_group_env: osync_group_env_unref(group_env); error: - fprintf(stderr, "ERROR: %s\n", osync_error_print(&error)); + error_stack = osync_error_print_stack(&error); + fprintf(stderr, "\nError Summary:\n%s\n", error_stack); + osync_free(error_stack); osync_trace(TRACE_EXIT, "%s: %s", __func__, osync_error_print(&error)); osync_error_unref(&error); return -1; |