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: <dg...@su...> - 2009-01-31 22:59:50
|
Author: henrik Date: Sat Jan 31 23:58:15 2009 New Revision: 5249 URL: http://www.opensync.org/changeset/5249 Log: Do not try to clean paths, if there are no paths to clean. Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 23:13:36 2009 (r5248) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 23:58:15 2009 (r5249) @@ -62,9 +62,11 @@ # (unless $KEEP_TEMP_FILES is set) if [ -z "${KEEP_TEMP_FILES}" ]; then # echo "Cleaning" - for DIR in "${PATHS_TO_CLEAN[@]}"; do - rm -rf "${DIR}" || true - done + if [ "${#PATHS_TO_CLEAN[*]}" != "0" ]; then + for DIR in "${PATHS_TO_CLEAN[@]}"; do + rm -rf "${DIR}" || true + done + fi else for DIR in "${PATHS_TO_CLEAN[@]}"; do echo "Not deleting [${DIR}]" |
From: <dg...@su...> - 2009-01-31 22:34:31
|
Author: henrik Date: Sat Jan 31 22:37:12 2009 New Revision: 5246 URL: http://www.opensync.org/changeset/5246 Log: Use 'which' instead of 'whereis' to find the Thunderbird executable Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 18:16:47 2009 (r5245) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 22:37:12 2009 (r5246) @@ -166,8 +166,8 @@ # Try to find the GRE directory # This is an ugly hack, but what else can we do? - TB_EXE=`whereis -b thunderbird | cut -s -d " " -f 2 -` - test -n "${TB_EXE}" || TB_EXE=`whereis -b icedove | cut -s -d " " -f 2 -` + TB_EXE=`which thunderbird` + test -n "${TB_EXE}" || TB_EXE=`which icedove` myecho "TB_EXE [${TB_EXE}]" test -n "${TB_EXE}" || error_exit "Could not find Thunderbird" 1 |
From: <dg...@su...> - 2009-01-31 22:34:30
|
Author: henrik Date: Sat Jan 31 22:59:59 2009 New Revision: 5247 URL: http://www.opensync.org/changeset/5247 Log: Show Thunderbird/Sunbird version and contents of GRE (Gecko Runtime Environement) directory to help debugging Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_init_sunbird.sh plugins/mozilla-sync/trunk/tests/blackbox_test_init_thunderbird.sh Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_init_sunbird.sh ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_init_sunbird.sh Sat Jan 31 22:37:12 2009 (r5246) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_init_sunbird.sh Sat Jan 31 22:59:59 2009 (r5247) @@ -16,4 +16,10 @@ initialize_test "Sunbird initialization" initialize_sunbird +echo "sunbird --version" +sunbird --version + +echo "ls -lR ${GRE_DIR}" +ls -lR ${GRE_DIR} + success_exit Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_init_thunderbird.sh ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_init_thunderbird.sh Sat Jan 31 22:37:12 2009 (r5246) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_init_thunderbird.sh Sat Jan 31 22:59:59 2009 (r5247) @@ -16,4 +16,10 @@ initialize_test "Thunderbird initialization" initialize_thunderbird +echo "thunderbird --version" +thunderbird --version + +echo "ls -lR ${GRE_DIR}" +ls -lR ${GRE_DIR} + success_exit |
From: <dg...@su...> - 2009-01-31 22:15:22
|
Author: henrik Date: Sat Jan 31 23:13:36 2009 New Revision: 5248 URL: http://www.opensync.org/changeset/5248 Log: Move test for OpenSync plugins from initialize_synctool (exectued for almost all cases) to blackbox_test_init_osynctool.sh which is executed ony one Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in plugins/mozilla-sync/trunk/tests/blackbox_test_init_osynctool.sh Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 22:59:59 2009 (r5247) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sat Jan 31 23:13:36 2009 (r5248) @@ -222,16 +222,6 @@ banner "Initializing osynctool" ${VALGRIND} osynctool --version || error_exit "Could not execute osynctool" 1 - (${VALGRIND} osynctool --listplugins | grep "file-sync\$") || - error_exit "Plugin file-sync is missing" 1 - (${VALGRIND} osynctool --listplugins | grep "mozilla-sync\$") || - error_exit "Plugin mozilla-sync is missing" 1 - (${VALGRIND} osynctool --listformats | grep "xmlformat-contact\$") || - error_exit "Format xmlformat-contact is missing" 1 - (${VALGRIND} osynctool --listformats | grep "vcard21\$") || - error_exit "Format vcard21 is missing" 1 - (${VALGRIND} osynctool --listformats | grep "vevent20\$") || - error_exit "Format vevent20 is missing" 1 # Create a temporary directory for osynctool make_temp_dir CONFIG_DIR config Modified: plugins/mozilla-sync/trunk/tests/blackbox_test_init_osynctool.sh ============================================================================== --- plugins/mozilla-sync/trunk/tests/blackbox_test_init_osynctool.sh Sat Jan 31 22:59:59 2009 (r5247) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_init_osynctool.sh Sat Jan 31 23:13:36 2009 (r5248) @@ -17,4 +17,20 @@ initialize_thunderbird initialize_osynctool +echo "" +echo "Checking for OpenSync plugins" +(${VALGRIND} osynctool --listplugins | grep "file-sync\$") || + error_exit "Plugin file-sync is missing" 1 +(${VALGRIND} osynctool --listplugins | grep "mozilla-sync\$") || + error_exit "Plugin mozilla-sync is missing" 1 + +echo "" +echo "Checking for OpenSync formats" +(${VALGRIND} osynctool --listformats | grep "xmlformat-contact\$") || + error_exit "Format xmlformat-contact is missing" 1 +(${VALGRIND} osynctool --listformats | grep "vcard21\$") || + error_exit "Format vcard21 is missing" 1 +(${VALGRIND} osynctool --listformats | grep "vevent20\$") || + error_exit "Format vevent20 is missing" 1 + success_exit |
From: <dg...@su...> - 2009-01-31 17:18:21
|
Author: dgollub Date: Sat Jan 31 18:16:47 2009 New Revision: 5245 URL: http://www.opensync.org/changeset/5245 Log: Add sync_mixed_objtype testcase to test mixed-objtype syncing #992 This testcase is on intention not integrated into CTest, since it's failing due to a bug in the mock-format plugin (marshal function assigned to the wrong registered objformat - r5243). Added: trunk/tests/data/sync_mixed_objtype/ (props changed) - copied from r5221, trunk/tests/data/sync/ Modified: trunk/tests/data/sync_mixed_objtype/configs/group/2/mock-sync.conf trunk/tests/data/sync_mixed_objtype/configs/group/2/syncmember.conf trunk/tests/sync-tests/check_sync.c Modified: trunk/tests/data/sync_mixed_objtype/configs/group/2/mock-sync.conf ============================================================================== --- trunk/tests/data/sync/configs/group/2/mock-sync.conf Fri Jan 23 00:51:13 2009 (r5221) +++ trunk/tests/data/sync_mixed_objtype/configs/group/2/mock-sync.conf Sat Jan 31 18:16:47 2009 (r5245) @@ -5,10 +5,10 @@ <Enabled>1</Enabled> <Formats> <Format> - <Name>mockformat1</Name> + <Name>mockformat2</Name> </Format> </Formats> - <ObjType>mockobjtype1</ObjType> + <ObjType>mockobjtype2</ObjType> <Path>data2</Path> </Resource> </Resources> Modified: trunk/tests/data/sync_mixed_objtype/configs/group/2/syncmember.conf ============================================================================== --- trunk/tests/data/sync/configs/group/2/syncmember.conf Fri Jan 23 00:51:13 2009 (r5221) +++ trunk/tests/data/sync_mixed_objtype/configs/group/2/syncmember.conf Sat Jan 31 18:16:47 2009 (r5245) @@ -2,10 +2,10 @@ <syncmember version="1.0"> <pluginname>mock-sync</pluginname> <objtype> - <name>mockobjtype1</name> + <name>mockobjtype2</name> <enabled>1</enabled> <objformat> - <name>mockformat1</name> + <name>mockformat2</name> <config /> </objformat> </objtype> Modified: trunk/tests/sync-tests/check_sync.c ============================================================================== --- trunk/tests/sync-tests/check_sync.c Sat Jan 31 18:12:45 2009 (r5244) +++ trunk/tests/sync-tests/check_sync.c Sat Jan 31 18:16:47 2009 (r5245) @@ -2711,7 +2711,7 @@ osync_engine_unref(engine); /* Client checks */ - fail_unless(num_client_connected == 2, NULL); + fail_unless(num_client_connected == 2, "num_client_connected: %d expected: 2", num_client_connected); fail_unless(num_client_main_connected == 2, NULL); fail_unless(num_client_read == 2, NULL); fail_unless(num_client_main_read == 2, NULL); @@ -3347,6 +3347,118 @@ } END_TEST + +/* Testing mixed-objtype syncing (#992) + * + */ +START_TEST (sync_mixed_objtype) +{ + char *testbed = setup_testbed("sync_mixed_objtype"); + char *formatdir = g_strdup_printf("%s/formats", testbed); + char *plugindir = g_strdup_printf("%s/plugins", testbed); + + osync_testing_system_abort("cp testdata data1/testdata"); + + OSyncError *error = NULL; + OSyncGroup *group = osync_group_new(&error); + fail_unless(group != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_group_set_schemadir(group, testbed); + fail_unless(osync_group_load(group, "configs/group", &error), NULL); + fail_unless(error == NULL, NULL); + + OSyncEngine *engine = osync_engine_new(group, &error); + fail_unless(engine != NULL, NULL); + fail_unless(error == NULL, NULL); + osync_group_unref(group); + + osync_engine_set_schemadir(engine, testbed); + osync_engine_set_plugindir(engine, plugindir); + osync_engine_set_formatdir(engine, formatdir); + + osync_engine_set_conflict_callback(engine, conflict_handler_choose_first, GINT_TO_POINTER(1)); + osync_engine_set_changestatus_callback(engine, entry_status, GINT_TO_POINTER(1)); + osync_engine_set_mappingstatus_callback(engine, mapping_status, GINT_TO_POINTER(1)); + osync_engine_set_enginestatus_callback(engine, engine_status, GINT_TO_POINTER(1)); + osync_engine_set_memberstatus_callback(engine, member_status, GINT_TO_POINTER(1)); + + + fail_unless(osync_engine_initialize(engine, &error), NULL); + fail_unless(error == NULL, NULL); + + fail_unless(osync_engine_synchronize_and_block(engine, &error), NULL); + fail_unless(error == NULL, NULL); + + fail_unless(osync_engine_finalize(engine, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_engine_unref(engine); + + /* Client checks */ + fail_unless(num_client_connected == 2, NULL); + fail_unless(num_client_main_connected == 2, NULL); + fail_unless(num_client_read == 2, NULL); + fail_unless(num_client_main_read == 2, NULL); + fail_unless(num_client_written == 2, NULL); + fail_unless(num_client_main_written == 2, NULL); + fail_unless(num_client_disconnected == 2, NULL); + fail_unless(num_client_main_disconnected == 2, NULL); + fail_unless(num_client_errors == 0, NULL); + fail_unless(num_client_sync_done == 2, NULL); + fail_unless(num_client_main_sync_done == 2, NULL); + + /* Client checks */ + fail_unless(num_engine_connected == 1, NULL); + fail_unless(num_engine_errors == 0, NULL); + fail_unless(num_engine_read == 1, NULL); + fail_unless(num_engine_written == 1, NULL); + fail_unless(num_engine_sync_done == 1, NULL); + fail_unless(num_engine_disconnected == 1, NULL); + fail_unless(num_engine_successful == 1, NULL); + fail_unless(num_engine_end_conflicts == 1, NULL); + fail_unless(num_engine_prev_unclean == 0, NULL); + + /* Change checks */ + fail_unless(num_change_read == 1, NULL); + fail_unless(num_change_written == 1, "num_change_written: %d epxected:1", num_change_written); + fail_unless(num_change_error == 0, NULL); + + /* Mapping checks */ + fail_unless(num_mapping_solved == 1, NULL); + //fail_unless(num_mapping_written == 1, NULL); + fail_unless(num_mapping_errors == 0, NULL); + fail_unless(num_mapping_conflicts == 0, NULL); + + fail_unless(!system("test \"x$(diff -x \".*\" data1 data2)\" = \"x\""), NULL); + + char *path = g_strdup_printf("%s/configs/group/archive.db", testbed); + OSyncMappingTable *maptable = mappingtable_load(path, "mockobjtype1", 1); + g_free(path); + check_mapping(maptable, 1, 1, 2, "testdata"); + check_mapping(maptable, 2, 1, 2, "testdata"); + osync_mapping_table_close(maptable); + osync_mapping_table_unref(maptable); + + path = g_strdup_printf("%s/configs/group/1/hashtable.db", testbed); + OSyncHashTable *table = hashtable_load(path, "mockobjtype1", 1); + g_free(path); + check_hash(table, "testdata"); + osync_hashtable_unref(table); + + path = g_strdup_printf("%s/configs/group/2/hashtable.db", testbed); + table = hashtable_load(path, "mockobjtype1", 1); + g_free(path); + check_hash(table, "testdata"); + osync_hashtable_unref(table); + + g_free(formatdir); + g_free(plugindir); + + destroy_testbed(testbed); +} +END_TEST + OSYNC_TESTCASE_START("sync") OSYNC_TESTCASE_ADD(sync_setup_connect) OSYNC_TESTCASE_ADD(sync_easy_new) @@ -3367,6 +3479,7 @@ OSYNC_TESTCASE_ADD(sync_slowsync_connect) OSYNC_TESTCASE_ADD(sync_slowsync_mainsink_connect) OSYNC_TESTCASE_ADD(sync_initial_slow_sync) +OSYNC_TESTCASE_ADD(sync_mixed_objtype) /* TODO: stateless sync */ OSYNC_TESTCASE_END |
From: <dg...@su...> - 2009-01-31 17:14:19
|
Author: dgollub Date: Sat Jan 31 18:12:45 2009 New Revision: 5244 URL: http://www.opensync.org/changeset/5244 Log: Reassing mixed-objtype synced mapping-entries after the MULITPLY engine event. To fix conversion to the correct destination format of the peer. Converting in the "native" ObjEngine allows to access the origianl OSyncObjTypeSink which stores the resource/format configuration of the peer. To handle the objengine re-assigning before the conversion, the alternative-objtype hashtable of the member get used. Modified: trunk/opensync/engine/opensync_engine.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sat Jan 31 18:05:12 2009 (r5243) +++ trunk/opensync/engine/opensync_engine.c Sat Jan 31 18:12:45 2009 (r5244) @@ -967,6 +967,7 @@ osync_bool osync_engine_handle_mixed_objtypes(OSyncEngine *engine, OSyncError **error) { OSyncList *o, *s, *e; + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, engine, error); for (o = engine->object_engines; o; o = o->next) { OSyncObjEngine *objengine = o->data; @@ -982,22 +983,25 @@ OSyncChange *change; OSyncObjFormat *objformat; const char *current_objtype; + const char *alternative_objtype; OSyncObjEngine *new_objengine; OSyncSinkEngine *new_sinkengine; + OSyncMember *member; change = osync_entry_engine_get_change(mapping_entry_engine); if (!change) continue; + member = osync_client_proxy_get_member(sinkengine->proxy); objformat = osync_change_get_objformat(change); osync_assert(objformat); current_objtype = osync_objformat_get_objtype(objformat); - /* ... otherwise we need to reassign the mappin entry engine - * to different objengine - */ - new_objengine = osync_engine_find_objengine(engine, current_objtype); + /* Reassign the mapping to the alternative ObjEngine */ + alternative_objtype = osync_member_get_alternative_objtype(member, current_objtype); + + new_objengine = osync_engine_find_objengine(engine, alternative_objtype); if (!new_objengine) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Couldn't find Object Type Engine for Object Type \"%s\" " @@ -1020,9 +1024,11 @@ } } + osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); return FALSE; } @@ -1117,6 +1123,7 @@ static void _osync_engine_generate_multiplied_event(OSyncEngine *engine) { + OSyncError *locerror = NULL; if (osync_bitcount(engine->obj_errors | engine->obj_multiplied) == osync_list_length(engine->object_engines)) { if (osync_bitcount(engine->obj_errors)) { @@ -1127,12 +1134,22 @@ osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_ERROR, locerror); osync_engine_event(engine, OSYNC_ENGINE_EVENT_ERROR); } else { + if (!osync_engine_handle_mixed_objtypes(engine, &locerror)) + goto error; + osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_MULTIPLIED, NULL); osync_engine_event(engine, OSYNC_ENGINE_EVENT_MULTIPLIED); } } else osync_trace(TRACE_INTERNAL, "Not yet: %i", osync_bitcount(engine->obj_errors | engine->obj_multiplied)); + return; +error: + osync_trace(TRACE_ERROR, "%s", osync_error_print(&locerror)); + osync_engine_set_error(engine, locerror); + osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_ERROR, locerror); + osync_engine_event(engine, OSYNC_ENGINE_EVENT_ERROR); + //osync_error_unref(&locerror); } static void _osync_engine_generate_prepared_write_event(OSyncEngine *engine) @@ -1145,8 +1162,6 @@ goto error; } else { osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_PREPARED_WRITE, NULL); - if (!osync_engine_handle_mixed_objtypes(engine, &locerror)) - goto error; /* This is only for debugging purposes */ osync_engine_trace_multiply_summary(engine); @@ -1535,6 +1550,29 @@ return FALSE; } +unsigned int osync_engine_num_active_proxies_for_objtypes(OSyncEngine *engine, const char *objtype) +{ + unsigned int num, i, active_proxies = 0; + + osync_trace(TRACE_ENTRY, "%s(%p, %s)", __func__, engine, objtype); + + num = osync_engine_num_proxies(engine); + for (i = 0; i < num; i++) { + OSyncClientProxy *proxy = osync_engine_nth_proxy(engine, i); + OSyncObjTypeSink *sink = osync_client_proxy_find_objtype_sink(proxy, objtype); + + if (!sink) { + OSyncMember *member = osync_client_proxy_get_member(proxy); + if (!osync_member_get_alternative_objtype(member, objtype)) + continue; + } + + active_proxies++; + } + + osync_trace(TRACE_EXIT, "%s: %u", __func__, active_proxies); + return active_proxies; +} osync_bool osync_engine_initialize(OSyncEngine *engine, OSyncError **error) { @@ -1599,13 +1637,21 @@ const char *objtype = o->data; OSyncObjEngine *objengine = NULL; + osync_trace(TRACE_INTERNAL, "ObjType: %s", objtype); + /* Respect if the object type is disabled */ if (!osync_group_objtype_enabled(engine->group, objtype)) continue; + /* Check if there are at least two proxies with native objtype + * and alternative-objtypes to sync this objtype + */ + if (osync_engine_num_active_proxies_for_objtypes(engine, objtype) < 2) + continue; + objengine = osync_obj_engine_new(engine, objtype, engine->formatenv, error); if (!objengine) - goto error; + goto error_finalize; osync_obj_engine_set_callback(objengine, _osync_engine_event_callback, engine); engine->object_engines = osync_list_append(engine->object_engines, objengine); @@ -1616,6 +1662,11 @@ osync_obj_engine_set_slowsync(objengine, TRUE); } + if (osync_list_length(engine->object_engines) == 0) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "No synchronizable Object Engine available"); + goto error_finalize; + } + engine->state = OSYNC_ENGINE_STATE_INITIALIZED; osync_trace(TRACE_EXIT, "%s", __func__); |
From: <dg...@su...> - 2009-01-31 17:06:47
|
Author: dgollub Date: Sat Jan 31 18:05:12 2009 New Revision: 5243 URL: http://www.opensync.org/changeset/5243 Log: The mock-format plugin assigns the marshal function to all formats, even if it's only valid for one format Modified: trunk/tests/mock-plugin/mock_format.c Modified: trunk/tests/mock-plugin/mock_format.c ============================================================================== --- trunk/tests/mock-plugin/mock_format.c Sat Jan 31 18:00:28 2009 (r5242) +++ trunk/tests/mock-plugin/mock_format.c Sat Jan 31 18:05:12 2009 (r5243) @@ -238,6 +238,7 @@ osync_objformat_set_copy_func(format, copy_file); osync_objformat_set_create_func(format, create_file); + /* TODO ... marshal function is only valid for mockformat1 not mockformat2! */ osync_objformat_set_marshal_func(format, marshal_file); osync_objformat_set_demarshal_func(format, demarshal_file); } |
From: <dg...@su...> - 2009-01-31 17:02:02
|
Author: dgollub Date: Sat Jan 31 18:00:28 2009 New Revision: 5242 URL: http://www.opensync.org/changeset/5242 Log: Implement for OSyncMember a hashtable which stores the "alternative" objtypes. "alternative" objtypes are those objtypes which could be handled by the member with a "native" objtype, when doing mixed-objtype-syncing. Modified: trunk/opensync/group/opensync_group.c trunk/opensync/group/opensync_member.c trunk/opensync/group/opensync_member_internals.h Modified: trunk/opensync/group/opensync_group.c ============================================================================== --- trunk/opensync/group/opensync_group.c Sat Jan 31 17:57:47 2009 (r5241) +++ trunk/opensync/group/opensync_group.c Sat Jan 31 18:00:28 2009 (r5242) @@ -216,14 +216,20 @@ for (t=targetformats; t; t = t->next) { const char *targetformat_name = t->data; OSyncObjFormat *targetformat = osync_format_env_find_objformat(formatenv, targetformat_name); + OSyncObjFormat *sourceformat; + const char *source_objtype; const char *target_objtype = osync_objformat_get_objtype(targetformat); osync_assert(target_objtype); /* If targetformat is not supported, skip it */ - if (!osync_member_support_targetformat(member, formatenv, targetformat)) + sourceformat = osync_member_support_targetformat(member, formatenv, targetformat); + if (!sourceformat) continue; + source_objtype = osync_objformat_get_objtype(sourceformat); + osync_member_add_alternative_objtype(member, source_objtype, target_objtype); + /* For each objtype, add 1 to the hashtable. */ g_hash_table_replace(table, (char *)target_objtype, NULL); Modified: trunk/opensync/group/opensync_member.c ============================================================================== --- trunk/opensync/group/opensync_member.c Sat Jan 31 17:57:47 2009 (r5241) +++ trunk/opensync/group/opensync_member.c Sat Jan 31 18:00:28 2009 (r5242) @@ -142,6 +142,12 @@ goto error; member->ref_count = 1; + + member->alternative_objtype_table = g_hash_table_new_full(g_str_hash, g_str_equal, osync_free, osync_free); + if (!member->alternative_objtype_table) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "No memory left"); + goto error; + } osync_trace(TRACE_EXIT, "%s: %p", __func__, member); return member; @@ -180,6 +186,9 @@ if (osync_member_get_capabilities(member)) osync_capabilities_unref(osync_member_get_capabilities(member)); + + if (member->alternative_objtype_table) + g_hash_table_destroy(member->alternative_objtype_table); osync_member_flush_objtypes(member); @@ -680,7 +689,7 @@ return list; } -osync_bool osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat) +OSyncObjFormat *osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat) { GList *o; @@ -694,11 +703,25 @@ /** TODO error handling */ if (osync_format_env_find_path(formatenv, sourceformat, targetformat, NULL)) - return TRUE; + return sourceformat; } } - return FALSE; + return NULL; +} + +const char *osync_member_get_alternative_objtype(OSyncMember *member, const char *orig_objtype) +{ + const char *alternative_objtype = NULL; + + alternative_objtype = g_hash_table_lookup(member->alternative_objtype_table, orig_objtype); + + return alternative_objtype; +} + +void osync_member_add_alternative_objtype(OSyncMember *member, const char *native_objtype, const char *alternative_objtype) +{ + g_hash_table_insert(member->alternative_objtype_table, osync_strdup(alternative_objtype), osync_strdup(native_objtype)); } OSyncList *osync_member_get_all_objformats(OSyncMember *member) Modified: trunk/opensync/group/opensync_member_internals.h ============================================================================== --- trunk/opensync/group/opensync_member_internals.h Sat Jan 31 17:57:47 2009 (r5241) +++ trunk/opensync/group/opensync_member_internals.h Sat Jan 31 18:00:28 2009 (r5242) @@ -40,6 +40,8 @@ char *name; char *pluginname; + + GHashTable *alternative_objtype_table; GList *objtypes; /* OSyncObjTypeSink */ OSyncObjTypeSink *main_sink; @@ -80,10 +82,31 @@ * @param member Pointer to member * @param formatenv Pointer to a loaded OSyncFormatEnv for conversion path building * @param targetformat The target format to test - * @returns TRUE if member supports with the given OSyncFormatEnv the targetformat, FALSE otherwise + * @returns Source OSyncObjFormat which can convert to targetformat, NULL if not supported + * + */ +OSYNC_TEST_EXPORT OSyncObjFormat *osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat); + +/** @brief Get the alternative Object Type to a provided Object Type + * + * The alternative Object Type is the Object Type which could be handled by + * this member due to format-conversion and mixed-objtype syncing. + * + * @param member Pointer to member + * @param orig_objtype The original object type to look for an alternative for + * @returns The name of the alternative object type or NULL if there is no alternative for this member + * + */ +OSYNC_TEST_EXPORT const char *osync_member_get_alternative_objtype(OSyncMember *member, const char *orig_objtype); + +/** @brief Add an alternative object type for this member + * + * @param member Pointer to member + * @param native_objtype The native object type of this member which can reprsent the alternative + * @param alternative_objtype The alternative object type t add * */ -OSYNC_TEST_EXPORT osync_bool osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat); +OSYNC_TEST_EXPORT void osync_member_add_alternative_objtype(OSyncMember *member, const char *native_objtype, const char *alternative_objtype); #ifdef OPENSYNC_UNITTESTS /** @brief Set the schemadir for configuration validation to a custom directory. |
From: <dg...@su...> - 2009-01-31 16:59:20
|
Author: dgollub Date: Sat Jan 31 17:57:47 2009 New Revision: 5241 URL: http://www.opensync.org/changeset/5241 Log: Start with empty lists in osync_archive_load_changes() Avoid issues with uninitalized lists. Modified: trunk/opensync/archive/opensync_archive.c Modified: trunk/opensync/archive/opensync_archive.c ============================================================================== --- trunk/opensync/archive/opensync_archive.c Sat Jan 31 14:05:17 2009 (r5240) +++ trunk/opensync/archive/opensync_archive.c Sat Jan 31 17:57:47 2009 (r5241) @@ -380,6 +380,11 @@ osync_assert(mappingids); osync_assert(memberids); + *ids = NULL; + *uids = NULL; + *mappingids = NULL; + *memberids = NULL; + if (!osync_archive_create_changes(archive->db, objtype, error)) goto error; |
From: <dg...@su...> - 2009-01-31 13:06:51
|
Author: dgollub Date: Sat Jan 31 14:05:17 2009 New Revision: 5240 URL: http://www.opensync.org/changeset/5240 Log: Fix engine_sync_read_write_stress2 testcase. Same regression fix as in commit r5239 Modified: trunk/tests/engine-tests/check_engine.c Modified: trunk/tests/engine-tests/check_engine.c ============================================================================== --- trunk/tests/engine-tests/check_engine.c Sat Jan 31 14:03:59 2009 (r5239) +++ trunk/tests/engine-tests/check_engine.c Sat Jan 31 14:05:17 2009 (r5240) @@ -1932,8 +1932,6 @@ g_free(path); _member_add_format(debug->member2, "mockobjtype1", "mockformat1"); - _member_add_format(debug->member2, "mockobjtype2", "mockformat2"); - _member_add_format(debug->member2, "mockobjtype3", "mockformat3"); debug->plugin = osync_plugin_new(&error); fail_unless(debug->plugin != NULL, NULL); |
From: <dg...@su...> - 2009-01-31 13:05:30
|
Author: dgollub Date: Sat Jan 31 14:03:59 2009 New Revision: 5239 URL: http://www.opensync.org/changeset/5239 Log: Fix testcase engine_sync_read_write. Regression got introduced by r5237 (mixed-objtype related modification) test-fixture "group5" (from _create_group5) create two members with different set of formats/objtypes. The second member had additionally mockformat2/mockobjtype2 and mockformat3/mockobjtype3. Member 1 didn't. So the engine failed syncing, since there were no further peer-sinkengine which would support this anyway. Since this testcase doesn't is intended to this this, the two additional format got dropped. This still needs to be handled in the osync_engine_initialize() function, by an error/fail. And not in the actual sync() call #992 Modified: trunk/tests/engine-tests/check_engine.c Modified: trunk/tests/engine-tests/check_engine.c ============================================================================== --- trunk/tests/engine-tests/check_engine.c Fri Jan 30 17:58:35 2009 (r5238) +++ trunk/tests/engine-tests/check_engine.c Sat Jan 31 14:03:59 2009 (r5239) @@ -1525,8 +1525,6 @@ g_free(path); _member_add_format(debug->member2, "mockobjtype1", "mockformat1"); - _member_add_format(debug->member2, "mockobjtype2", "mockformat2"); - _member_add_format(debug->member2, "mockobjtype3", "mockformat3"); debug->plugin = osync_plugin_new(&error); fail_unless(debug->plugin != NULL, NULL); |
From: <dg...@su...> - 2009-01-30 17:00:07
|
Author: cstender Date: Fri Jan 30 17:58:35 2009 New Revision: 5238 URL: http://www.opensync.org/changeset/5238 Log: fixed build Modified: trunk/opensync/group/opensync_group.c Modified: trunk/opensync/group/opensync_group.c ============================================================================== --- trunk/opensync/group/opensync_group.c Thu Jan 29 22:29:33 2009 (r5237) +++ trunk/opensync/group/opensync_group.c Fri Jan 30 17:58:35 2009 (r5238) @@ -29,6 +29,7 @@ #include "opensync_group_internals.h" #include "opensync_group_private.h" #include "opensync-db.h" +#include "opensync_member_internals.h" #ifdef OPENSYNC_UNITTESTS #include "opensync_member_internals.h" |
From: <dg...@su...> - 2009-01-30 15:13:13
|
Author: bellmich Date: Fri Jan 30 16:11:35 2009 New Revision: 909 URL: http://libsyncml.opensync.org/changeset/909 Log: added support for device faking and direct target setting Modified: trunk/tools/syncml-ds-tool.c Modified: trunk/tools/syncml-ds-tool.c ============================================================================== --- trunk/tools/syncml-ds-tool.c Fri Jan 30 16:01:07 2009 (r908) +++ trunk/tools/syncml-ds-tool.c Fri Jan 30 16:11:35 2009 (r909) @@ -97,7 +97,10 @@ * @subsection OPTION_GENERAL General SyncML options * * @param --identifier "<ident>" - * set the identity of the SyncML peer. + * set the local identity of SyncML (source). + * + * @param --target "<ident>" + * set the remote identity of SyncML (target). * * @param --username "<username>" * set the username for authentication. @@ -146,6 +149,20 @@ * @arg @b version can be "1.0", "1.1" or "1.2". * The default version is "1.1". * + * @subsection OPTION_FAKE_DEVICE Device faking options + * + * Some SyncML servers try to enforce access policies via device filtering. + * These options can be used to work around such filters. + * + * @param --fake-manufacturer "<Man>" + * set the manufacturer of the faked device. + * + * @param --fake-model "<Mod>" + * set the model of the faked device. + * + * @param --fake-software-version "<SwV>" + * set the software version of the faked device. + * * @section EXAMPLES * * @subsection EXAMPLE_BLUETOOTH Get the contacts from your phone via Bluetooth @@ -224,6 +241,7 @@ SmlError *error = NULL; char *identifier = NULL; +char *target = NULL; char *username = NULL; char *password = NULL; @@ -792,7 +810,8 @@ fprintf(stderr, "\tGeneral SyncML options:\n"); fprintf(stderr, "\t=======================\n\n"); - fprintf(stderr, "\t--identifier <ident>\tsets the identity of the SyncML peer.\n"); + fprintf(stderr, "\t--identifier <ident>\tsets the local identity of the SyncML (source).\n"); + fprintf(stderr, "\t--target <ident>\tsets the remote identity of SyncML (target).\n"); fprintf(stderr, "\t--username <username>\tsets the username for authentication.\n"); fprintf(stderr, "\t--password <password>\tsets the password for authentication.\n"); fprintf(stderr, "\t--maxMsgSize <limit>\tsets the maximum message size (default: %s)\n", maxMsgSize); @@ -813,7 +832,13 @@ fprintf(stderr, "\t\tNokias for example often requires \"PC Suite\".\n"); fprintf(stderr, "\t\tPlease use --identifier \"PC Suite\" in this case.\n"); fprintf(stderr, "\t<version>\tcan be \"1.0\", \"1.1\" or \"1.2\".\n"); - fprintf(stderr, "\t\tThe default version is \"1.1\".\n"); + fprintf(stderr, "\t\tThe default version is \"1.1\".\n\n"); + + fprintf(stderr, "\tDevice faking configuration:\n"); + fprintf(stderr, "\t============================\n\n"); + fprintf(stderr, "\t--fake-manufacturer <Man>\tset the manufacturer of the faked device.\n"); + fprintf(stderr, "\t--fake-model <Mod>\t\tset the model of the faked device.\n"); + fprintf(stderr, "\t--fake-software-version <SwV>\tset the software version of the faked device.\n"); fprintf(stderr, "\n"); exit (1); @@ -1106,6 +1131,16 @@ argv[i], error)) goto error; identifier = g_strdup(argv[i]); + } else if (!strcmp (arg, "--target")) { + i++; + if (!argv[i]) + usage (argv[0]); + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_TARGET, + argv[i], error)) + goto error; + target = g_strdup(argv[i]); } else if (!strcmp (arg, "--username")) { i++; if (!argv[i]) @@ -1244,6 +1279,48 @@ SML_TRANSPORT_CONFIG_SSL_SERVER_CERT, argv[i], error)) goto error; + } else if (!strcmp (arg, "--fake-manufacturer")) { + i++; + if (!argv[i]) + usage (argv[0]); + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_DEVICE, + "1", error)) + goto error; + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_MANUFACTURER, + argv[i], error)) + goto error; + } else if (!strcmp (arg, "--fake-model")) { + i++; + if (!argv[i]) + usage (argv[0]); + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_DEVICE, + "1", error)) + goto error; + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_MODEL, + argv[i], error)) + goto error; + } else if (!strcmp (arg, "--fake-software-version")) { + i++; + if (!argv[i]) + usage (argv[0]); + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_DEVICE, + "1", error)) + goto error; + if (!smlDataSyncSetOption( + dsObject, + SML_DATA_SYNC_CONFIG_FAKE_SOFTWARE_VERSION, + argv[i], error)) + goto error; } else if (!strcmp (arg, "--")) { break; } else { @@ -1349,7 +1426,8 @@ printf("unknown\n"); break; } - printf("Identifier: %s\n", identifier); + printf("Identifier (Source): %s \n", identifier); + printf("Target: %s\n", target); printf("\nDatastores:\n"); int i = 0; for (i = 0; i < smlDevInfNumDataStores(remoteDevinf); i++) { |
From: <dg...@su...> - 2009-01-30 15:02:43
|
Author: bellmich Date: Fri Jan 30 16:01:07 2009 New Revision: 908 URL: http://libsyncml.opensync.org/changeset/908 Log: added support for setting the target directly Modified: trunk/libsyncml/data_sync_api/data_sync.c trunk/libsyncml/data_sync_api/data_sync.h trunk/libsyncml/data_sync_api/defines.h trunk/libsyncml/data_sync_api/transport_http_client.c Modified: trunk/libsyncml/data_sync_api/data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.c Fri Jan 30 15:59:55 2009 (r907) +++ trunk/libsyncml/data_sync_api/data_sync.c Fri Jan 30 16:01:07 2009 (r908) @@ -173,8 +173,17 @@ goto error; } } else if (!strcmp(SML_TRANSPORT_CONFIG_URL, name)) { - /* The URL is used as Target in the session header. */ dsObject->url = g_strdup(value); + /* If the Target is not set explicitly + * then the URL is used as the Target in the session header. + * This is only relevant for HTTP clients today. + */ + if (!dsObject->target) + dsObject->target = g_strdup(value); + } else if (!strcmp(SML_DATA_SYNC_CONFIG_TARGET, name)) { + if (dsObject->target) + smlSafeCFree(&(dsObject->target)); + dsObject->target = g_strdup(value); } else if (!strcmp(SML_DATA_SYNC_CONFIG_IDENTIFIER, name)) { if (dsObject->identifier) smlSafeCFree(&(dsObject->identifier)); @@ -762,6 +771,8 @@ /* cleanup configuration */ if ((*dsObject)->url) smlSafeCFree(&((*dsObject)->url)); + if ((*dsObject)->target) + smlSafeCFree(&((*dsObject)->target)); if ((*dsObject)->identifier) smlSafeCFree(&((*dsObject)->identifier)); if ((*dsObject)->username) Modified: trunk/libsyncml/data_sync_api/data_sync.h ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.h Fri Jan 30 15:59:55 2009 (r907) +++ trunk/libsyncml/data_sync_api/data_sync.h Fri Jan 30 16:01:07 2009 (r908) @@ -136,6 +136,7 @@ char *password; char *url; + char *target; SmlProtocolVersion version; Modified: trunk/libsyncml/data_sync_api/defines.h ============================================================================== --- trunk/libsyncml/data_sync_api/defines.h Fri Jan 30 15:59:55 2009 (r907) +++ trunk/libsyncml/data_sync_api/defines.h Fri Jan 30 16:01:07 2009 (r908) @@ -68,6 +68,7 @@ #define SML_DATA_SYNC_CONFIG_VERSION "VERSION" #define SML_DATA_SYNC_CONFIG_IDENTIFIER "IDENTIFIER" +#define SML_DATA_SYNC_CONFIG_TARGET "TARGET" #define SML_DATA_SYNC_CONFIG_USE_WBXML "USE_WBXML" #define SML_DATA_SYNC_CONFIG_USE_STRING_TABLE "USE_STRING_TABLE" Modified: trunk/libsyncml/data_sync_api/transport_http_client.c ============================================================================== --- trunk/libsyncml/data_sync_api/transport_http_client.c Fri Jan 30 15:59:55 2009 (r907) +++ trunk/libsyncml/data_sync_api/transport_http_client.c Fri Jan 30 16:01:07 2009 (r908) @@ -79,7 +79,7 @@ /* create session */ char *sessionString = smlManagerGetNewSessionID(dsObject->manager); - SmlLocation *target = smlLocationNew(dsObject->url, NULL, error); + SmlLocation *target = smlLocationNew(dsObject->target, NULL, error); SmlLocation *source = smlLocationNew(dsObject->identifier, NULL, error); dsObject->session = smlSessionNew(SML_SESSION_TYPE_CLIENT, SML_MIMETYPE_XML, |
From: <dg...@su...> - 2009-01-30 15:01:35
|
Author: bellmich Date: Fri Jan 30 15:59:55 2009 New Revision: 907 URL: http://libsyncml.opensync.org/changeset/907 Log: Sometimes the OBEX client connects to the OBEX server when the startup of the OBEX server is not complete. The result is an internal I/O error. Modified: trunk/tests/check_data_sync_api.c Modified: trunk/tests/check_data_sync_api.c ============================================================================== --- trunk/tests/check_data_sync_api.c Wed Jan 28 14:52:09 2009 (r906) +++ trunk/tests/check_data_sync_api.c Fri Jan 30 15:59:55 2009 (r907) @@ -344,6 +344,8 @@ goto error; if (!smlDataSyncRun(client, &error)) goto error; + /* The OBEX server needs some time to start. */ + sleep(5); if (!smlDataSyncRun(server, &error)) goto error; } |
From: <dg...@su...> - 2009-01-29 23:37:52
|
Author: dgollub Date: Thu Jan 29 22:29:33 2009 New Revision: 5237 URL: http://www.opensync.org/changeset/5237 Log: Introduce support for determining "mixed objtypes". This commit addresses following problem: To create/initialize an OSyncObjEngine at least two member are required which share the same ObjType. With mixed-objtype this this would not work. Example: (objtype) Member 1: event Member 2: calendar The engine would fail in initializing since it would not found a pair of equal objtypes. This commit adds some logic to detect how many possible ObjEngine could be initialized, and would not restrict them to at least one. With the introduction with "dummy" OSyncSinkEngine, an OSyncObjEngine can be created also only with one membr which has "real" support of the ObjType. The detection of this "mixed objtype" is based on format-conversion. Format conversion allows allows in a very generic way to find relation between different objtypes, due to their different formats. All possible conversion pathes get created to determine if "event" and "calendar" can synced together. Modified: trunk/opensync/engine/opensync_engine.c trunk/opensync/group/opensync_group.c trunk/opensync/group/opensync_group_internals.h trunk/opensync/group/opensync_member.c trunk/opensync/group/opensync_member_internals.h Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Tue Jan 27 18:47:04 2009 (r5236) +++ trunk/opensync/engine/opensync_engine.c Thu Jan 29 22:29:33 2009 (r5237) @@ -1540,7 +1540,8 @@ { osync_bool prev_sync_unclean = FALSE, first_sync = FALSE; OSyncGroup *group = NULL; - int i = 0, num = 0; + OSyncList *o, *supported_objtypes; + int i; osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, engine, error); if (engine->state != OSYNC_ENGINE_STATE_UNINITIALIZED) { @@ -1557,11 +1558,6 @@ goto error; } - if (osync_group_num_objtypes(engine->group) == 0) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "No synchronizable objtype"); - goto error; - } - /* Check if this is the first Synchronization. * On the first synchronization a Slow-Sync is required for all (ObjType)Sinks! */ @@ -1596,16 +1592,11 @@ if (!_osync_engine_initialize_member(engine, member, error)) goto error_finalize; } - - /* Lets see which objtypes are synchronizable in this group */ - num = osync_group_num_objtypes(engine->group); - if (num == 0) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "No synchronizable objtype"); - goto error; - } - for (i = 0; i < num; i++) { - const char *objtype = osync_group_nth_objtype(engine->group, i); + /* Lets see which objtypes are synchronizable in this group */ + supported_objtypes = osync_group_get_supported_objtypes_mixed(engine->group, engine->formatenv); + for (o = supported_objtypes; o; o = o->next) { + const char *objtype = o->data; OSyncObjEngine *objengine = NULL; /* Respect if the object type is disabled */ Modified: trunk/opensync/group/opensync_group.c ============================================================================== --- trunk/opensync/group/opensync_group.c Tue Jan 27 18:47:04 2009 (r5236) +++ trunk/opensync/group/opensync_group.c Thu Jan 29 22:29:33 2009 (r5237) @@ -157,6 +157,12 @@ } } +static void osync_group_build_mixed_list(gpointer key, gpointer value, gpointer user_data) +{ + OSyncList **l = user_data; + *l = osync_list_append(*l, key); +} + static GList *osync_group_get_supported_objtypes(OSyncGroup *group) { GList *m = NULL; @@ -186,6 +192,66 @@ return ret; } +OSyncList *osync_group_get_supported_objtypes_mixed(OSyncGroup *group, OSyncFormatEnv *formatenv) +{ + + GList *m; + OSyncList *ret = NULL; + OSyncList *t, *targetformats = osync_group_get_objformats(group); + + GHashTable *table = g_hash_table_new(g_str_hash, g_str_equal); + + + for (m=group->members; m; m = m->next) { + OSyncMember *member = m->data; + int i, num_member = osync_member_num_objtypes(member); + /* ... and get the objtype from each of the members. */ + for (i = 0; i < num_member; i++) { + const char *objtype = osync_member_nth_objtype(member, i); + osync_assert(objtype); + g_hash_table_replace(table, (char *)objtype, NULL); + } + + for (t=targetformats; t; t = t->next) { + const char *targetformat_name = t->data; + OSyncObjFormat *targetformat = osync_format_env_find_objformat(formatenv, targetformat_name); + const char *target_objtype = osync_objformat_get_objtype(targetformat); + + osync_assert(target_objtype); + + /* If targetformat is not supported, skip it */ + if (!osync_member_support_targetformat(member, formatenv, targetformat)) + continue; + + /* For each objtype, add 1 to the hashtable. */ + g_hash_table_replace(table, (char *)target_objtype, NULL); + + } + } + + g_hash_table_foreach(table, osync_group_build_mixed_list, &ret); + g_hash_table_destroy(table); + + return ret; +} + +OSyncList *osync_group_get_objformats(OSyncGroup *group) +{ + GList *m = NULL; + OSyncList *list = NULL; + + /* Loop over all members... */ + for (m = group->members; m; m = m->next) { + OSyncMember *member = m->data; + OSyncList *objformats = osync_member_get_all_objformats(member); + + list = osync_list_concat(list, objformats); + + } + + return list; +} + #ifdef OPENSYNC_UNITTESTS void osync_group_set_schemadir(OSyncGroup *group, const char *schemadir) Modified: trunk/opensync/group/opensync_group_internals.h ============================================================================== --- trunk/opensync/group/opensync_group_internals.h Tue Jan 27 18:47:04 2009 (r5236) +++ trunk/opensync/group/opensync_group_internals.h Thu Jan 29 22:29:33 2009 (r5237) @@ -109,6 +109,36 @@ */ OSYNC_TEST_EXPORT OSyncFilter *osync_group_nth_filter(OSyncGroup *group, int nth); +/** @brief Gets list of all supported object types in this group, including + * mixed object types + * + * So called "mixed object types" are object types which actually are able + * to be represeented in each other object type. + * + * An example could be: + * + * Object Format: vcalendar Object Type: calendar + * Object Format: vevent10 Object Type: event + * + * To detect "mixed object type" all potential conversion path get build. + * For this is a loaded OSyncFormatEnv required. + * + * @param group The group + * @param formatenv Pointer to loaded OSyncFormatEnv + * @returns List of supported object types, including mixed ones + * + */ +OSYNC_TEST_EXPORT OSyncList *osync_group_get_supported_objtypes_mixed(OSyncGroup *group, OSyncFormatEnv *formatenv); + +/** @brief Get list of all list of all used OSyncObjFormat elemets + * + * Very complex/expensive! + * + * @param group The group + * @returns The list of ObjFormat elements, or NULL + */ +OSYNC_TEST_EXPORT OSyncList *osync_group_get_objformats(OSyncGroup *group); + #ifdef OPENSYNC_UNITTESTS /** @brief Set the schemadir for configuration validation to a custom directory. * This is actually only inteded for UNITTESTS to run tests without Modified: trunk/opensync/group/opensync_member.c ============================================================================== --- trunk/opensync/group/opensync_member.c Tue Jan 27 18:47:04 2009 (r5236) +++ trunk/opensync/group/opensync_member.c Thu Jan 29 22:29:33 2009 (r5237) @@ -492,6 +492,7 @@ for (i = 0; i < osync_objtype_sink_num_objformat_sinks(sink); i++) { OSyncObjFormatSink *format_sink = osync_objtype_sink_nth_objformat_sink(sink, i); + osync_assert(format_sink); const char *format = osync_objformat_sink_get_objformat(format_sink); const char *format_config = osync_objformat_sink_get_config(format_sink); xmlNode *objformat_node = xmlNewChild(node, NULL, (xmlChar*)"objformat", NULL); @@ -665,6 +666,57 @@ return osync_objtype_sink_get_objformat_sinks(sink); } +OSyncList *osync_member_get_objformat_sinks_all(OSyncMember *member) +{ + GList *o; + OSyncList *list = NULL; + + for (o = member->objtypes; o; o = o->next) { + OSyncObjTypeSink *sink = o->data; + OSyncList *format_sinks = osync_objtype_sink_get_objformat_sinks(sink); + list = osync_list_concat(list, format_sinks); + } + + return list; +} + +osync_bool osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat) +{ + GList *o; + + for (o = member->objtypes; o; o = o->next) { + OSyncObjTypeSink *sink = o->data; + OSyncList *format_sinks = osync_objtype_sink_get_objformat_sinks(sink); + for (; format_sinks; format_sinks = format_sinks->next) { + OSyncObjFormatSink *format_sink = format_sinks->data; + const char *objformat_name = osync_objformat_sink_get_objformat(format_sink); + OSyncObjFormat *sourceformat = osync_format_env_find_objformat(formatenv, objformat_name); + + /** TODO error handling */ + if (osync_format_env_find_path(formatenv, sourceformat, targetformat, NULL)) + return TRUE; + } + } + + return FALSE; +} + +OSyncList *osync_member_get_all_objformats(OSyncMember *member) +{ + OSyncList *o, *format_sinks, *list = NULL; + + format_sinks = osync_member_get_objformat_sinks_all(member); + for (o = format_sinks; o; o = o->next) { + OSyncObjFormatSink *format_sink = o->data; + const char *objformat; + objformat = osync_objformat_sink_get_objformat(format_sink); + + list = osync_list_prepend(list, osync_strdup(objformat)); + } + + return list; +} + void osync_member_add_objtype_sink(OSyncMember *member, OSyncObjTypeSink *sink) { osync_assert(member); Modified: trunk/opensync/group/opensync_member_internals.h ============================================================================== --- trunk/opensync/group/opensync_member_internals.h Tue Jan 27 18:47:04 2009 (r5236) +++ trunk/opensync/group/opensync_member_internals.h Thu Jan 29 22:29:33 2009 (r5237) @@ -55,6 +55,36 @@ #endif /* OPENSYNC_UNITTESTS */ }; +/** @brief Get list of all OSyncObjFormatSink elements + * + * @param member Pointer to member + * @returns Pointer to OSyncList with element of OSyncObjformatSink, or NULL + * + */ +OSYNC_TEST_EXPORT OSyncList *osync_member_get_objformat_sinks_all(OSyncMember *member); + +/** @brief Get names of all object formats of this member + * + * @param member Pointer to member + * @returns Pointer to OSyncList with strings of object formats, or NULL + * + */ +OSYNC_TEST_EXPORT OSyncList *osync_member_get_all_objformats(OSyncMember *member); + +/** @brief Check if a member supports, with the help of various conversions, + * a specific format + * + * To determine if a target format is supported by this member, a loaded + * OSyncFormatEnv is required. + * + * @param member Pointer to member + * @param formatenv Pointer to a loaded OSyncFormatEnv for conversion path building + * @param targetformat The target format to test + * @returns TRUE if member supports with the given OSyncFormatEnv the targetformat, FALSE otherwise + * + */ +OSYNC_TEST_EXPORT osync_bool osync_member_support_targetformat(OSyncMember *member, OSyncFormatEnv *formatenv, OSyncObjFormat *targetformat); + #ifdef OPENSYNC_UNITTESTS /** @brief Set the schemadir for configuration validation to a custom directory. * This is actually only inteded for UNITTESTS to run tests without |
From: <dg...@su...> - 2009-01-28 13:53:34
|
Author: bellmich Date: Wed Jan 28 14:52:09 2009 New Revision: 906 URL: http://libsyncml.opensync.org/changeset/906 Log: test generic content-types too Modified: trunk/tests/check_data_sync_api.c Modified: trunk/tests/check_data_sync_api.c ============================================================================== --- trunk/tests/check_data_sync_api.c Wed Jan 28 14:46:49 2009 (r905) +++ trunk/tests/check_data_sync_api.c Wed Jan 28 14:52:09 2009 (r906) @@ -406,12 +406,8 @@ SmlError *error = NULL; init_testbed("OBEX", "17002"); - /* register datastore - * the source must be identical because this is http - */ client_source = "dcim"; server_source = "photos"; - // server_source = "addressbook"; if (!smlDataSyncAddDatastore( client, "image/jpeg", @@ -438,6 +434,42 @@ } END_TEST +START_TEST (check_unknown_ct) +{ + SmlError *error = NULL; + init_testbed("HTTP", "17003"); + + /* register datastore + * the source must be identical because this is http + */ + client_source = "data"; + server_source = "data"; + if (!smlDataSyncAddDatastore( + client, + "unknown/content-type", + NULL, + client_source, + &error)) + goto error; + if (!smlDataSyncAddDatastore( + server, + "unknown/content-type", + NULL, + server_source, + &error)) + goto error; + + /* configure test data */ + client_items = g_list_append(client_items, "this is some data"); + + run_testbed(); + + return; +error: + fail("%s", smlErrorPrint(&error)); +} +END_TEST + Suite *ds_suite(void) { Suite *s = suite_create("OMA DS API"); @@ -445,6 +477,7 @@ create_case(s, "check_text_vcard_21", check_text_vcard_21); create_case(s, "check_image_jpeg", check_image_jpeg); + create_case(s, "check_unknown_ct", check_unknown_ct); return s; } |
From: <dg...@su...> - 2009-01-28 13:48:14
|
Author: bellmich Date: Wed Jan 28 14:46:49 2009 New Revision: 905 URL: http://libsyncml.opensync.org/changeset/905 Log: added a test for the high level DS API Added: trunk/tests/check_data_sync_api.c Modified: trunk/tests/CMakeLists.txt Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Wed Jan 28 14:45:42 2009 (r904) +++ trunk/tests/CMakeLists.txt Wed Jan 28 14:46:49 2009 (r905) @@ -29,6 +29,7 @@ ADD_CHECK_TEST( san check_san.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( devinf check_devinf.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( sync check_sync.c ${TEST_TARGET_LIBRARIES} ) + ADD_CHECK_TEST( ds_api check_data_sync_api.c ${TEST_TARGET_LIBRARIES} ) # dependent tests Added: trunk/tests/check_data_sync_api.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/tests/check_data_sync_api.c Wed Jan 28 14:46:49 2009 (r905) @@ -0,0 +1,466 @@ +/* + * libsyncml - A syncml protocol implementation + * Copyright (C) 2009 Michael Bell <mic...@op...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "support.h" + +#include <libsyncml/syncml.h> +#include <libsyncml/syncml_internals.h> +#include <libsyncml/data_sync_api/defines.h> +#include <libsyncml/data_sync_api/standard.h> +#include <libsyncml/data_sync_api/callbacks.h> +#include <glib.h> +// #include <glib/gstdio.h> + +//#include <stdio.h> +//#include <stdlib.h> +//#include <string.h> + +GMutex *runMutex = NULL; +int locks; + +GList *client_items; +SmlDataSyncObject *client; +SmlDataSyncObject *server; +const char *client_source; +const char *server_source; +char *transport; + + +/* ************************************ */ +/* *********** CALLBACKS ************** */ +/* ************************************ */ + +SmlBool sendAllChanges( + SmlDataSyncObject *dsObject, + SmlError **error) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + + if (dsObject == client) + { + GList *list = client_items; + size_t count = 0; + for (;list;list = list->next) + { + count++; + const char *test_data = list->data; + char *name = g_strdup_printf("%d", count); + if (!smlDataSyncAddChange(client, client_source, SML_CHANGE_ADD, + name , test_data, strlen(test_data), NULL, error)) + fail("%s", smlErrorPrint(error)); + smlSafeCFree(&name); + } + } + + smlTrace(TRACE_EXIT, "%s", __func__); + return smlDataSyncSendChanges(dsObject, error); +} + +static void recvEventCallback( + SmlDataSyncObject *dsObject, + SmlDataSyncEventType type, + void *userdata, + SmlError *error) +{ + smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, dsObject, type, userdata, error); + SmlError *locerror = NULL; + + switch (type) { + case SML_DATA_SYNC_EVENT_ERROR: + fail("error from ds api: %s", smlErrorPrint(&error)); + break; + case SML_DATA_SYNC_EVENT_CONNECT: + /* g_message("Remote device was successfully connected."); */ + break; + case SML_DATA_SYNC_EVENT_DISCONNECT: + /* g_message("Remote device was successfully disconnected."); */ + break; + case SML_DATA_SYNC_EVENT_FINISHED: + /* g_message("SyncML session finished successfully."); */ + if (g_atomic_int_dec_and_test(&locks)) + g_mutex_unlock(runMutex); + break; + case SML_DATA_SYNC_EVENT_GOT_ALL_ALERTS: + /* g_message("All alerts of the remote device were received."); */ + if (dsObject == client) + { + if (!sendAllChanges(dsObject, &locerror)) + goto error; + } + break; + case SML_DATA_SYNC_EVENT_GOT_ALL_CHANGES: + /* g_message("All changes of the remote device were received."); */ + if (dsObject == server) + { + if (!sendAllChanges(dsObject, &locerror)) + goto error; + } + /* the map of the client is send automatically */ + break; + case SML_DATA_SYNC_EVENT_GOT_ALL_MAPPINGS: + if (dsObject == server) + { + /* g_message("All mappings of the remote device were received."); */ + } else { + g_error("Received a map but I'm a client!"); + } + break; + default: + g_error("Unknown event(%d).\n", type); + break; + } + + smlTrace(TRACE_EXIT, "%s", __func__); + return; + +error: + fprintf(stderr, "An error occured while handling events: %s\n", smlErrorPrint(&locerror)); + smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(&locerror)); + smlErrorDeref(&locerror); + exit(3); +} + +static SmlBool recvChangeCallback( + SmlDataSyncObject *dsObject, + const char *source, + SmlChangeType type, + const char *uid, + char *data, + unsigned int size, + void *userdata, + SmlError **error) +{ + smlTrace(TRACE_ENTRY, "%s(%s: %s)", __func__, VA_STRING(source), VA_STRING(uid)); + + /* clients should never receive a change in this test */ + + if (dsObject == client) + fail("A change was received from the server."); + + /* check the source */ + + if (strcmp(server_source, source)) + fail("The source %s is wrong.", server_source); + + /* handle the item */ + GList *list = client_items; + size_t count = 0; + for (; list; list = list->next) { + count++; + + /* test the uid */ + char *name = g_strdup_printf("%d", count); + if (strcmp(name, uid)) { + smlSafeCFree(&name); + continue; + } + smlSafeCFree(&name); + + /* item with correct uid */ + if (strcmp(list->data, data)) + fail("The data of the item %s was wrong(%s != %s).", uid, data, list->data); + } + smlSafeCFree(&data); + + smlTrace(TRACE_EXIT, "%s - TRUE", __func__); + return TRUE; +} + +//static SmlAlertType recvAlertTypeCallback( +// SmlDataSyncObject *dsObject, +// const char *source, +// SmlAlertType type, +// void *userdata, +// SmlError **error) +//{ +// smlTrace(TRACE_ENTRY, "%s - %s: %d", __func__, VA_STRING(source), type); +// /* find the appropriate datasoure */ +// SmlDsToolLocationType *datastore = NULL; +// GList *o = datastores; +// while (o) { +// datastore = o->data; +// if (!strcmp(datastore->source, source)) { +// /* abort the scan */ +// o = NULL; +// } else { +// datastore = NULL; +// } +// if (o) o = o->next; +// } +// if (!datastore) { +// smlErrorSet(error, SML_ERROR_GENERIC, +// "Cannot found datastore %s.", +// source); +// goto error; +// } +// smlTrace(TRACE_INTERNAL, "%s: datastores scanned", __func__); +// +// /* synchronize the alert type */ +// if (type == SML_ALERT_SLOW_SYNC) +// datastore->slow = TRUE; +// if (datastore->slow) +// type = SML_ALERT_SLOW_SYNC; +// +// smlTrace(TRACE_EXIT, "%s - slow == %d", __func__, datastore->slow); +// return type; +//error: +// smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); +// return SML_ALERT_UNKNOWN; +//} + +void init_testbed(const char *transport_type, const char *port) +{ + /* general init */ + setup_testbed(NULL); + SmlError *error = NULL; + client_items = NULL; + +#ifdef ENABLE_OPENOBEX_TCP + transport = "OBEX"; +#endif +#ifdef ENABLE_HTTP + transport = "HTTP"; +#endif +#ifdef ENABLE_OPENOBEX_TCP + if (!strcasecmp(transport_type, "OBEX")) { + transport = "OBEX"; + } +#ifdef ENABLE_HTTP +#endif + if (!strcasecmp(transport_type, "HTTP")) { + transport = "HTTP"; + } +#endif + if (!strcmp(transport, "HTTP")) + { + client = smlDataSyncNew(SML_SESSION_TYPE_CLIENT, SML_TRANSPORT_HTTP_CLIENT, &error); + if (!client) + goto error; + server = smlDataSyncNew(SML_SESSION_TYPE_SERVER, SML_TRANSPORT_HTTP_SERVER, &error); + if (!server) + goto error; + } else { + client = smlDataSyncNew(SML_SESSION_TYPE_CLIENT, SML_TRANSPORT_OBEX_SERVER, &error); + if (!client) + goto error; + server = smlDataSyncNew(SML_SESSION_TYPE_SERVER, SML_TRANSPORT_OBEX_CLIENT, &error); + if (!server) + goto error; + } + + /* default configuration of callbacks */ + smlDataSyncRegisterEventCallback(client, recvEventCallback, NULL); + smlDataSyncRegisterEventCallback(server, recvEventCallback, NULL); + // smlDataSyncRegisterGetAlertTypeCallback(client, recvAlertTypeCallback, NULL); + // smlDataSyncRegisterGetAlertTypeCallback(server, recvAlertTypeCallback, NULL); + smlDataSyncRegisterChangeCallback(client, recvChangeCallback, NULL); + smlDataSyncRegisterChangeCallback(server, recvChangeCallback, NULL); + // smlDataSyncRegisterChangeStatusCallback(dsObject, recvChangeStatusCallback); + // smlDataSyncRegisterMappingCallback(dsObject, recvMappingCallback, NULL); + + /* configure transport */ + if (!strcmp(transport, "HTTP")) { + /* HTTP */ + char *url = g_strdup_printf("http://127.0.0.1:%s", port); + if (!smlDataSyncSetOption( + client, + SML_TRANSPORT_CONFIG_URL, + url, &error)) + goto error; + smlSafeCFree(&url); + } else { + /* OBEX */ + if (!smlDataSyncSetOption( + client, + SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, + SML_DATA_SYNC_CONFIG_CONNECTION_NET, + &error)) + goto error; + if (!smlDataSyncSetOption( + server, + SML_DATA_SYNC_CONFIG_CONNECTION_TYPE, + SML_DATA_SYNC_CONFIG_CONNECTION_NET, + &error)) + goto error; + if (!smlDataSyncSetOption( + server, + SML_TRANSPORT_CONFIG_URL, + "127.0.0.1", &error)) + goto error; + if (!smlDataSyncSetOption( + client, + SML_TRANSPORT_CONFIG_PORT, + port, &error)) + goto error; + } + if (!smlDataSyncSetOption( + server, + SML_TRANSPORT_CONFIG_PORT, + port, &error)) + goto error; + + return; +error: + fail("%s", smlErrorPrint(&error)); +} + +void run_testbed() +{ + SmlError *error = NULL; + locks = 2; + + /* init the sync */ + if (!strcmp(transport, "HTTP")) + { + if (!smlDataSyncInit(server, &error)) + goto error; + if (!smlDataSyncInit(client, &error)) + goto error; + if (!smlDataSyncRun(server, &error)) + goto error; + if (!smlDataSyncRun(client, &error)) + goto error; + } else { + if (!smlDataSyncInit(client, &error)) + goto error; + if (!smlDataSyncInit(server, &error)) + goto error; + if (!smlDataSyncRun(client, &error)) + goto error; + if (!smlDataSyncRun(server, &error)) + goto error; + } + + runMutex = g_mutex_new(); + g_mutex_lock(runMutex); + g_mutex_lock(runMutex); + g_mutex_unlock(runMutex); + g_mutex_free(runMutex); + runMutex = NULL; + + /* close the object */ + smlDataSyncObjectUnref(&client); + smlDataSyncObjectUnref(&server); + g_list_free(client_items); + + return; +error: + fail("%s", smlErrorPrint(&error)); +} + +START_TEST (check_text_vcard_21) +{ + SmlError *error = NULL; + init_testbed("HTTP", "17001"); + + /* register datastore + * the source must be identical because this is http + */ + client_source = "contacts"; + server_source = "contacts"; + if (!smlDataSyncAddDatastore( + client, + "text/x-vcard", + NULL, + client_source, + &error)) + goto error; + if (!smlDataSyncAddDatastore( + server, + "text/x-vcard", + NULL, + server_source, + &error)) + goto error; + + /* configure test data */ + client_items = g_list_append(client_items, "blabla"); + + run_testbed(); + + return; +error: + fail("%s", smlErrorPrint(&error)); +} +END_TEST + +START_TEST (check_image_jpeg) +{ + SmlError *error = NULL; + init_testbed("OBEX", "17002"); + + /* register datastore + * the source must be identical because this is http + */ + client_source = "dcim"; + server_source = "photos"; + // server_source = "addressbook"; + if (!smlDataSyncAddDatastore( + client, + "image/jpeg", + NULL, + client_source, + &error)) + goto error; + if (!smlDataSyncAddDatastore( + server, + "image/jpeg", + NULL, + server_source, + &error)) + goto error; + + /* configure test data */ + client_items = g_list_append(client_items, "this is an image"); + + run_testbed(); + + return; +error: + fail("%s", smlErrorPrint(&error)); +} +END_TEST + +Suite *ds_suite(void) +{ + Suite *s = suite_create("OMA DS API"); + //Suite *s2 = suite_create("OMA DS API"); + + create_case(s, "check_text_vcard_21", check_text_vcard_21); + create_case(s, "check_image_jpeg", check_image_jpeg); + + return s; +} + +int main(void) +{ + configure_environment(); + + int nf; + + Suite *s = ds_suite(); + + SRunner *sr; + sr = srunner_create(s); + srunner_run_all(sr, CK_VERBOSE); + nf = srunner_ntests_failed(sr); + srunner_free(sr); + return (nf == 0) ? 0 : 1; +} |
From: <dg...@su...> - 2009-01-28 13:47:07
|
Author: bellmich Date: Wed Jan 28 14:45:42 2009 New Revision: 904 URL: http://libsyncml.opensync.org/changeset/904 Log: - added support for generic content-types - added automatic base64 conversion for binary data types which are prefixed with application, audio, image, message and video - fixed wrong interpretation of return value from smlTransportFinalize in data_sync.c - fixed wrong handling of REPLACE during SLOW SYNC - added support for receiving SANs Modified: trunk/libsyncml/data_sync_api/data_sync.c trunk/libsyncml/data_sync_api/data_sync_callbacks.c trunk/libsyncml/data_sync_api/data_sync_devinf.c trunk/libsyncml/data_sync_api/defines.h Modified: trunk/libsyncml/data_sync_api/data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.c Wed Jan 28 14:41:31 2009 (r903) +++ trunk/libsyncml/data_sync_api/data_sync.c Wed Jan 28 14:45:42 2009 (r904) @@ -517,18 +517,45 @@ /* fill the new change */ change->type = type; change->name = g_strdup(name); - change->size = size; - change->data = smlTryMalloc0(size+1, error); - if (!change->data) - goto error; change->userdata = userdata; - memcpy(change->data, data, size); - /* append change to datastore */ + /* determine the datastore */ change->datastore = smlDataSyncGetDatastoreFromSource(dsObject, source, error); if (!change->datastore) goto error; - change->datastore->changes = g_list_append(change->datastore->changes, change); + SmlDataSyncDatastore *datastore = change->datastore; + + /* copy data */ + size_t appClassLength = index(datastore->contentType, '/') - datastore->contentType; + if ( ( strstr(datastore->contentType, SML_CONTENT_TYPE_APPLICATION) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_APPLICATION) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_AUDIO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_IMAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_IMAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_MESSAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_MESSAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_VIDEO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) ) + { + /* binary data must be base64 encoded */ + change->data = g_base64_encode((const unsigned char *) data, size); + if (!change->data) { + smlErrorSet(error, SML_ERROR_GENERIC, + "The base 64 encoding of glib failed."); + goto error; + } + change->size = strlen(change->data); + } else { + change->data = smlTryMalloc0(size+1, error); + if (!change->data) + goto error; + memcpy(change->data, data, size); + change->size = size; + } + + /* append change to datastore */ + datastore->changes = g_list_append(datastore->changes, change); smlTrace(TRACE_EXIT, "%s - TRUE", __func__); return TRUE; @@ -725,8 +752,8 @@ /* cleanup transport */ if ((*dsObject)->tsp) { SmlError *error = NULL; - if (smlTransportFinalize((*dsObject)->tsp, &error)) { - g_warning("%s", smlErrorPrint(&error)); + if (!smlTransportFinalize((*dsObject)->tsp, &error)) { + g_warning("%s: %s", __func__, smlErrorPrint(&error)); smlErrorDeref(&error); } smlTransportFree((*dsObject)->tsp); Modified: trunk/libsyncml/data_sync_api/data_sync_callbacks.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_callbacks.c Wed Jan 28 14:41:31 2009 (r903) +++ trunk/libsyncml/data_sync_api/data_sync_callbacks.c Wed Jan 28 14:45:42 2009 (r904) @@ -23,6 +23,7 @@ #include "libsyncml/sml_support.h" #include "libsyncml/sml_error_internals.h" #include <string.h> +#include "defines.h" #include "data_sync_devinf.h" #include "libsyncml/objects/sml_ds_server_internals.h" #include "libsyncml/sml_manager_internals.h" @@ -222,6 +223,17 @@ switch(dsObject->actualPackage) { case SML_PACKAGE_1: /* SAN received by client */ + /* This is the best position to check for + * the availability of the remote device + * information. If it is not present then + * the own device information is send and + * the remote ones is requested. + */ + if (!smlDataSyncManageDevInf(dsObject, &error)) + goto error; + if (!smlSessionFlush(dsObject->session, TRUE, &error)) + goto error; + break; case SML_PACKAGE_2: /* alerts received by server */ /* This is the best position to check for * the availability of the remote device @@ -282,6 +294,13 @@ &error); if (!link && error) goto error; + /* OBEX is a stateful protocol and the client should + * init the disconnect. The problem is what happens + * when the client hangs? + * + * if (dsObject->tspType != SML_TRANSPORT_OBEX_SERVER && + * !smlTransportDisconnect(dsObject->tsp, link, &error)) + */ if (!smlTransportDisconnect(dsObject->tsp, link, &error)) { if (link) @@ -529,12 +548,36 @@ smlAssert(datastore->dsObject->changeCallback); /* some mobiles sends replace commands during slow-sync */ - /* FIXME: heavy bug - where is the check that this - * FIXME: is a SLOW-SYNC alert? - */ - if (datastore->alertType && datastore->alertType == SML_CHANGE_REPLACE) + if (datastore->alertType == SML_ALERT_SLOW_SYNC && + type == SML_CHANGE_REPLACE) type = SML_CHANGE_ADD; + /* decode base64 data if necessary */ + size_t appClassLength = index(datastore->contentType, '/') - datastore->contentType; + if ( ( strstr(datastore->contentType, SML_CONTENT_TYPE_APPLICATION) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_APPLICATION) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_AUDIO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_IMAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_IMAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_MESSAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_MESSAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_VIDEO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) ) + { + /* binary data must be base64 encoded */ + char *b64data = data; + size_t length = 0; + data = (char *) g_base64_decode(b64data, &length); + size = length; + smlSafeCFree(&b64data); + if (!data) { + smlErrorSet(error, SML_ERROR_GENERIC, + "The base 64 decoding of glib failed."); + goto error; + } + } + /* perform callback */ if (!datastore->dsObject->changeCallback( datastore->dsObject, datastore->sourceUri, Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_devinf.c Wed Jan 28 14:41:31 2009 (r903) +++ trunk/libsyncml/data_sync_api/data_sync_devinf.c Wed Jan 28 14:45:42 2009 (r904) @@ -535,11 +535,10 @@ { smlTrace(TRACE_INTERNAL, "%s - unknown content type detected (%s)", __func__, VA_STRING(ct)); - if (ct != NULL) - smlErrorSet(error, SML_ERROR_INTERNAL_MISCONFIGURATION, - "content-type unknown (%s)", - ct); - goto error; + smlDevInfDataStoreSetRxPref(ds, ct, "1.0"); + smlDevInfDataStoreSetTxPref(ds, ct, "1.0"); + if (!add_devinf_ctcap(devinf, ct, "1.0", error)) + goto error; } // configure supported sync modes Modified: trunk/libsyncml/data_sync_api/defines.h ============================================================================== --- trunk/libsyncml/data_sync_api/defines.h Wed Jan 28 14:41:31 2009 (r903) +++ trunk/libsyncml/data_sync_api/defines.h Wed Jan 28 14:45:42 2009 (r904) @@ -83,6 +83,12 @@ #define SML_DATA_SYNC_CONFIG_FAKE_MODEL "FAKE_MODEL" #define SML_DATA_SYNC_CONFIG_FAKE_SOFTWARE_VERSION "FAKE_SOFTWARE_VERSION" +#define SML_CONTENT_TYPE_APPLICATION "application" +#define SML_CONTENT_TYPE_AUDIO "audio" +#define SML_CONTENT_TYPE_IMAGE "image" +#define SML_CONTENT_TYPE_MESSAGE "message" +#define SML_CONTENT_TYPE_VIDEO "video" + #endif /* _SML_DATA_SYNC_API_CONFIG_H_ */ /*@}*/ |
From: <dg...@su...> - 2009-01-28 13:42:57
|
Author: bellmich Date: Wed Jan 28 14:41:31 2009 New Revision: 903 URL: http://libsyncml.opensync.org/changeset/903 Log: If the server closes the connection before the client can do this then the disconnect command of the client fails but the client is disconnected. Modified: trunk/libsyncml/transports/obex_client.c Modified: trunk/libsyncml/transports/obex_client.c ============================================================================== --- trunk/libsyncml/transports/obex_client.c Wed Jan 28 14:39:46 2009 (r902) +++ trunk/libsyncml/transports/obex_client.c Wed Jan 28 14:41:31 2009 (r903) @@ -1089,7 +1089,7 @@ "The disconnect request was not accepted (%i).", result); goto error; - } else if (result == 0 && !env->busy) { + } else if (result == 0 && !env->busy && !env->isDisconnected) { smlErrorSet(&error, SML_ERROR_GENERIC, "The disconnect request was timed out."); goto error; |
From: <dg...@su...> - 2009-01-28 13:41:15
|
Author: bellmich Date: Wed Jan 28 14:39:46 2009 New Revision: 902 URL: http://libsyncml.opensync.org/changeset/902 Log: If a SAN is received then the remote location can be taken from the alert. Modified: trunk/libsyncml/objects/sml_ds_server.c Modified: trunk/libsyncml/objects/sml_ds_server.c ============================================================================== --- trunk/libsyncml/objects/sml_ds_server.c Wed Jan 28 14:37:36 2009 (r901) +++ trunk/libsyncml/objects/sml_ds_server.c Wed Jan 28 14:39:46 2009 (r902) @@ -1235,6 +1235,11 @@ /* ensure that the session is in client mode */ session->sessionType = SML_SESSION_TYPE_CLIENT; + /* fix target */ + smlLocationUnref(server->target); + server->target = cmd->source; + smlLocationRef(server->target); + /* handle the SAN */ if (server->sanCallback) { SmlErrorType type = server->sanCallback(server, cmd->private.alert.type, server->sanCallbackUserdata); |
From: <dg...@su...> - 2009-01-28 13:39:01
|
Author: bellmich Date: Wed Jan 28 14:37:36 2009 New Revision: 901 URL: http://libsyncml.opensync.org/changeset/901 Log: only set configuration options if they are present Modified: trunk/libsyncml/data_sync_api/transport_http_client.c trunk/libsyncml/data_sync_api/transport_http_server.c Modified: trunk/libsyncml/data_sync_api/transport_http_client.c ============================================================================== --- trunk/libsyncml/data_sync_api/transport_http_client.c Wed Jan 28 14:36:11 2009 (r900) +++ trunk/libsyncml/data_sync_api/transport_http_client.c Wed Jan 28 14:37:36 2009 (r901) @@ -33,17 +33,20 @@ smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, dsObject, error); CHECK_ERROR_REF - if (!smlTransportSetConfigOption( + if (dsObject->url != NULL && + !smlTransportSetConfigOption( dsObject->tsp, SML_TRANSPORT_CONFIG_URL, dsObject->url, error)) goto error; - if (!smlTransportSetConfigOption( + if (dsObject->username != NULL && + !smlTransportSetConfigOption( dsObject->tsp, SML_TRANSPORT_CONFIG_USERNAME, dsObject->username, error)) goto error; - if (!smlTransportSetConfigOption( + if (dsObject->password != NULL && + !smlTransportSetConfigOption( dsObject->tsp, SML_TRANSPORT_CONFIG_PASSWORD, dsObject->password, error)) Modified: trunk/libsyncml/data_sync_api/transport_http_server.c ============================================================================== --- trunk/libsyncml/data_sync_api/transport_http_server.c Wed Jan 28 14:36:11 2009 (r900) +++ trunk/libsyncml/data_sync_api/transport_http_server.c Wed Jan 28 14:37:36 2009 (r901) @@ -29,7 +29,8 @@ smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, dsObject, error); CHECK_ERROR_REF - if (!smlTransportSetConfigOption( + if (dsObject->url != NULL && + !smlTransportSetConfigOption( dsObject->tsp, SML_TRANSPORT_CONFIG_URL, dsObject->url, error)) |
From: <dg...@su...> - 2009-01-28 13:37:43
|
Author: bellmich Date: Wed Jan 28 14:36:11 2009 New Revision: 900 URL: http://libsyncml.opensync.org/changeset/900 Log: - never display a password in traces - a disconnect of a server can fail if the client was faster Modified: trunk/libsyncml/sml_transport.c Modified: trunk/libsyncml/sml_transport.c ============================================================================== --- trunk/libsyncml/sml_transport.c Tue Jan 27 16:39:11 2009 (r899) +++ trunk/libsyncml/sml_transport.c Wed Jan 28 14:36:11 2009 (r900) @@ -433,10 +433,21 @@ if (link && !link->link_data) { - smlErrorSet(error, SML_ERROR_GENERIC, - "A server connection should be closed " \ - "but the connection is already closed."); - goto error; + /* If there is a very fast or aggressive client + * then it can happen that the client closes + * the connection and the server registers this + * event before the disconnect function was + * called. + * + * If this happens then the link_data is perhaps + * already empty and the disconnect event was + * already triggered. + */ + smlTrace(TRACE_EXIT, + "%s: A server connection should be closed " \ + "but the connection is already closed.", + __func__); + return TRUE; } if (!link && smlTransportIsServer(tsp) && tsp->connections) @@ -854,7 +865,7 @@ const char *value, SmlError **error) { - smlTrace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, tsp, VA_STRING(name), VA_STRING(value), error); + smlTrace(TRACE_ENTRY, "%s(%p, %s, %s, %p)", __func__, tsp, VA_STRING(name), strcmp(name, "PASSWORD") ? VA_STRING(value) : "***sensitive***", error); /* Do not change the assertion to simple return FALSE stuff * because to many developers incl. me ignore returned FALSE * if it is only configuration. |
From: <dg...@su...> - 2009-01-27 17:48:36
|
Author: ianmartin Date: Tue Jan 27 18:47:04 2009 New Revision: 5236 URL: http://www.opensync.org/changeset/5236 Log: Update function parameter lists to those introduced in Ticket #1018 Modified: plugins/evolution2/src/evolution2_ebook.c plugins/evolution2/src/evolution2_ecal.c Modified: plugins/evolution2/src/evolution2_ebook.c ============================================================================== --- plugins/evolution2/src/evolution2_ebook.c Tue Jan 27 16:40:39 2009 (r5235) +++ plugins/evolution2/src/evolution2_ebook.c Tue Jan 27 18:47:04 2009 (r5236) @@ -132,12 +132,11 @@ } -static void evo2_ebook_connect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ebook_connect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { OSyncError *error = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, sink, info, ctx, data); OSyncEvoEnv *env = (OSyncEvoEnv *)data; osync_bool anchor_match; @@ -174,7 +173,7 @@ osync_error_unref(&error); } -static void evo2_ebook_disconnect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ebook_disconnect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); OSyncEvoEnv *env = (OSyncEvoEnv *)data; @@ -189,14 +188,13 @@ osync_trace(TRACE_EXIT, "%s", __func__); } -static void evo2_ebook_sync_done(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ebook_sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, sink, info, ctx, data); OSyncEvoEnv *env = (OSyncEvoEnv *)data; OSyncError *error = NULL; GError *gerror=NULL; - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); OSyncAnchor *anchor = osync_objtype_sink_get_anchor(sink); if (!anchor) { osync_error_set(&error, OSYNC_ERROR_GENERIC, "Anchor missing for objtype \"%s\"", osync_objtype_sink_get_name(sink)); @@ -255,11 +253,10 @@ osync_change_unref(change); } -static void evo2_ebook_get_changes(void *indata, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ebook_get_changes(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, indata, info, ctx); - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); - OSyncEvoEnv *env = (OSyncEvoEnv *)indata; + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %s, %p)", __func__, sink, info, ctx, slow_sync ? "TRUE" : "FALSE", userdata); + OSyncEvoEnv *env = (OSyncEvoEnv *)userdata; OSyncError *error = NULL; GList *changes = NULL; @@ -271,7 +268,7 @@ int datasize = 0; GError *gerror = NULL; - if (osync_objtype_sink_get_slowsync(sink) == FALSE) { + if (slow_sync == FALSE) { osync_trace(TRACE_INTERNAL, "No slow_sync for contact"); if (!e_book_get_changes(env->addressbook, env->change_id, &changes, &gerror)) { osync_error_set(&error, OSYNC_ERROR_GENERIC, "Failed to alloc new default addressbook: %s", gerror ? gerror->message : "None"); @@ -334,9 +331,9 @@ osync_error_unref(&error); } -static void evo2_ebook_modify(void *data, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change) +static void evo2_ebook_modify(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *data) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, data, info, ctx, change); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, sink, info, ctx, change, data); OSyncEvoEnv *env = (OSyncEvoEnv *)data; const char *uid = osync_change_get_uid(change); Modified: plugins/evolution2/src/evolution2_ecal.c ============================================================================== --- plugins/evolution2/src/evolution2_ecal.c Tue Jan 27 16:40:39 2009 (r5235) +++ plugins/evolution2/src/evolution2_ecal.c Tue Jan 27 18:47:04 2009 (r5236) @@ -82,13 +82,12 @@ return NULL; } -static void evo2_ecal_connect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ecal_connect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { OSyncError *error = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); - OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, sink, info, ctx, data); + OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); if (!(evo_cal->calendar = evo2_ecal_open_cal(osync_strdup(evo_cal->uri), evo_cal->source_type, &error))) { goto error; @@ -123,11 +122,10 @@ osync_error_unref(&error); } -static void evo2_ecal_disconnect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ecal_disconnect(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, sink, info, ctx, data); - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); if (evo_cal->calendar) { @@ -140,14 +138,13 @@ osync_trace(TRACE_EXIT, "%s", __func__); } -static void evo2_ecal_sync_done(void *data, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ecal_sync_done(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *data) { osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, data, info, ctx); OSyncEvoEnv *env = (OSyncEvoEnv *)data; OSyncError *error = NULL; GError *gerror = NULL; - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); OSyncAnchor *anchor = osync_objtype_sink_get_anchor(sink); @@ -208,10 +205,9 @@ } -static void evo2_ecal_get_changes(void *indata, OSyncPluginInfo *info, OSyncContext *ctx) +static void evo2_ecal_get_changes(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *indata) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, indata, info, ctx); - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %s, %p)", __func__, sink, info, ctx, slow_sync ? "TRUE" : "FALSE", indata); OSyncEvoEnv *env = (OSyncEvoEnv *)indata; OSyncError *error = NULL; @@ -225,7 +221,7 @@ OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); - if (osync_objtype_sink_get_slowsync(sink) == FALSE) { + if (slow_sync == FALSE) { osync_trace(TRACE_INTERNAL, "No slow_sync for %s", evo_cal->objtype); if (!e_cal_get_changes(evo_cal->calendar, env->change_id, &changes, &gerror)) { osync_error_set(&error, OSYNC_ERROR_GENERIC, "Failed to open changed %s entries: %s", evo_cal->objtype, gerror ? gerror->message : "None"); @@ -283,9 +279,9 @@ osync_error_unref(&error); } -static void evo2_ecal_modify(void *data, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change) +static void evo2_ecal_modify(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *change, void *data) { - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, data, info, ctx, change); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, sink, info, ctx, change, data); const char *uid = osync_change_get_uid(change); icalcomponent *icomp = NULL; @@ -295,7 +291,6 @@ OSyncData *odata = NULL; char *plain = NULL; - OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); OSyncEvoCalendar * evo_cal = (OSyncEvoCalendar *)osync_objtype_sink_get_userdata(sink); switch (osync_change_get_changetype(change)) { |
From: <dg...@su...> - 2009-01-27 15:41:59
|
Author: cstender Date: Tue Jan 27 16:40:39 2009 New Revision: 5235 URL: http://www.opensync.org/changeset/5235 Log: changed TRACE_ENTRY to TRACE_INTERNAL Modified: format-plugins/vformat/src/xmlformat-common.c format-plugins/vformat/src/xmlformat-recurrence.c Modified: format-plugins/vformat/src/xmlformat-common.c ============================================================================== --- format-plugins/vformat/src/xmlformat-common.c Mon Jan 26 01:28:59 2009 (r5234) +++ format-plugins/vformat/src/xmlformat-common.c Tue Jan 27 16:40:39 2009 (r5235) @@ -23,7 +23,7 @@ #include "xmlformat-common.h" -/**** ATTRIBUTE ****/ +/* Attributes */ OSyncXMLField *handle_attribute_simple_content_timestamp(OSyncXMLFormat *xmlformat, VFormatAttribute *attr, const char *name, OSyncError **error) { osync_trace(TRACE_INTERNAL, "Handling %s attribute with timestamp", name); @@ -96,7 +96,8 @@ osync_trace(TRACE_INTERNAL, "Handling %s component attribute", name); osync_xmlfield_set_key_value(xmlfield, name, vformat_attribute_get_nth_value(attr, 0)); } -/**** XML Attributes ****/ + +/* XML Attributes */ VFormatAttribute *handle_xml_attribute_simple_content(VFormat *vformat, OSyncXMLField *xmlfield, const char *name, const char *encoding) { g_assert(vformat); @@ -130,7 +131,7 @@ return handle_xml_attribute_simple_content(vformat, xmlfield, "URL", encoding); } -/*** Encoding helpers ************/ +/* Encoding helpers */ osync_bool needs_encoding(const unsigned char *tmp, const char *encoding) { int i = 0; Modified: format-plugins/vformat/src/xmlformat-recurrence.c ============================================================================== --- format-plugins/vformat/src/xmlformat-recurrence.c Mon Jan 26 01:28:59 2009 (r5234) +++ format-plugins/vformat/src/xmlformat-recurrence.c Tue Jan 27 16:40:39 2009 (r5235) @@ -157,7 +157,7 @@ const char *rule = vformat_attribute_get_nth_value(attr, 0); - osync_trace(TRACE_ENTRY, "%s(%p, %s)", __func__, xmlfield, rule); + osync_trace(TRACE_INTERNAL, "converting vcal rrule '%s' to xml", rule); int frequency_state = 0, counter = 0; char *frequency_block = NULL, *freq_mod = NULL, *duration_block = NULL; |