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-04 16:29:07
|
Author: dgollub Date: Sun Jan 4 17:28:48 2009 New Revision: 4992 URL: http://www.opensync.org/changeset/4992 Log: Fixed mock-format detection issues. Swapped mockforamt1 and mockformat2 encapsulation relation. To avoid porting all testcases which uses primarly mockforamt1. mockformat2 now encapsulates mockformat1. This avoids that mockformat1 get's converted in the engine's recv_change function. Run format detection for all object types. Modified: trunk/opensync/engine/opensync_engine.c trunk/opensync/format/opensync_converter.c trunk/tests/mock-plugin/mock_format.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sun Jan 4 16:04:00 2009 (r4991) +++ trunk/opensync/engine/opensync_engine.c Sun Jan 4 17:28:48 2009 (r4992) @@ -205,14 +205,12 @@ data = osync_change_get_data(change); /* try to detect encapsulated formats */ - if (!strstr(objtype, "mockobjtype")) { /* @TODO: exclude "mockobjtype"s, due to the testsuite issues! */ - detected_format = osync_format_env_detect_objformat_full(engine->formatenv, data, &error); - if (detected_format && detected_format != osync_change_get_objformat(change)) { - osync_trace(TRACE_INTERNAL, "Detected format (%s) different then the reported format (%s)!", - osync_objformat_get_name(detected_format), - osync_objformat_get_name(osync_change_get_objformat(change))); - objtype = osync_objformat_get_objtype(detected_format); - } + detected_format = osync_format_env_detect_objformat_full(engine->formatenv, data, &error); + if (detected_format && detected_format != osync_change_get_objformat(change)) { + osync_trace(TRACE_INTERNAL, "Detected format (%s) different then the reported format (%s)!", + osync_objformat_get_name(detected_format), + osync_objformat_get_name(osync_change_get_objformat(change))); + objtype = osync_objformat_get_objtype(detected_format); } member_objtype = g_strdup_printf("%lli_%s", memberid, objtype); Modified: trunk/opensync/format/opensync_converter.c ============================================================================== --- trunk/opensync/format/opensync_converter.c Sun Jan 4 16:04:00 2009 (r4991) +++ trunk/opensync/format/opensync_converter.c Sun Jan 4 17:28:48 2009 (r4992) @@ -296,13 +296,16 @@ void osync_converter_path_set_config(OSyncFormatConverterPath *path, const char *config) { - osync_assert(path); - osync_assert(config); + osync_return_if_fail(path); + osync_return_if_fail(config); - if (path->config) + if (path->config) { g_free(path->config); + path->config = NULL; + } - path->config = g_strdup(config); + if (config) + path->config = g_strdup(config); } void osync_converter_set_initialize_func(OSyncFormatConverter *converter, OSyncFormatConverterInitializeFunc initialize_func) Modified: trunk/tests/mock-plugin/mock_format.c ============================================================================== --- trunk/tests/mock-plugin/mock_format.c Sun Jan 4 16:04:00 2009 (r4991) +++ trunk/tests/mock-plugin/mock_format.c Sun Jan 4 17:28:48 2009 (r4992) @@ -77,7 +77,7 @@ return OSYNC_CONV_DATA_MISMATCH; } -static osync_bool conv_file_to_plain(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) +static osync_bool conv_mockformat1_to_mockformat2(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) { osync_trace(TRACE_INTERNAL, "Converting file to plain"); @@ -94,7 +94,7 @@ return TRUE; } -static osync_bool conv_plain_to_file(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) +static osync_bool conv_mockformat2_to_mockformat1(char *input, unsigned int inpsize, char **output, unsigned int *outpsize, osync_bool *free_input, const char *config, void *userdata, OSyncError **error) { osync_trace(TRACE_INTERNAL, "Converting plain to file"); @@ -126,6 +126,14 @@ g_free(file); } +static void destroy_mockformat2(char *input, unsigned int inpsize) +{ + if (!input || inpsize == 0) + return; + + osync_free(input); +} + static osync_bool duplicate_file(const char *uid, const char *input, unsigned int insize, char **newuid, char **output, unsigned int *outsize, osync_bool *dirty, OSyncError **error) { OSyncFileFormat *file = (OSyncFileFormat *)input; @@ -252,6 +260,7 @@ osync_assert(format); _format_set_functions(format); + osync_objformat_set_destroy_func(format, destroy_mockformat2); osync_format_env_register_objformat(env, format); osync_objformat_unref(format); @@ -279,13 +288,13 @@ OSyncObjFormat *mockformat2 = osync_format_env_find_objformat(env, "mockformat2"); osync_assert(mockformat2); - conv = osync_converter_new(OSYNC_CONVERTER_DECAP, mockformat1, mockformat2, conv_file_to_plain, error); + conv = osync_converter_new(OSYNC_CONVERTER_ENCAP, mockformat1, mockformat2, conv_mockformat1_to_mockformat2, error); osync_assert(conv); osync_format_env_register_converter(env, conv); osync_converter_unref(conv); - conv = osync_converter_new(OSYNC_CONVERTER_ENCAP, mockformat2, mockformat1, conv_plain_to_file, error); + conv = osync_converter_new(OSYNC_CONVERTER_DECAP, mockformat2, mockformat1, conv_mockformat2_to_mockformat1, error); osync_assert(conv); osync_format_env_register_converter(env, conv); |
From: <dg...@su...> - 2009-01-04 15:04:20
|
Author: dgollub Date: Sun Jan 4 16:04:00 2009 New Revision: 4991 URL: http://www.opensync.org/changeset/4991 Log: Do detection of encapsulated formats for all objtypes expect for "mockobjtype", due to issues in mock-format, which would cause a segfault. TODO: fix mock-format plugin Modified: trunk/opensync/engine/opensync_engine.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sun Jan 4 15:44:19 2009 (r4990) +++ trunk/opensync/engine/opensync_engine.c Sun Jan 4 16:04:00 2009 (r4991) @@ -205,7 +205,7 @@ data = osync_change_get_data(change); /* try to detect encapsulated formats */ - if (!strcmp(objtype, "data")) { /* @TODO: restricted to objtype data, due to the testsuite (and perforamnce)! */ + if (!strstr(objtype, "mockobjtype")) { /* @TODO: exclude "mockobjtype"s, due to the testsuite issues! */ detected_format = osync_format_env_detect_objformat_full(engine->formatenv, data, &error); if (detected_format && detected_format != osync_change_get_objformat(change)) { osync_trace(TRACE_INTERNAL, "Detected format (%s) different then the reported format (%s)!", |
From: <dg...@su...> - 2009-01-04 14:44:42
|
Author: dgollub Date: Sun Jan 4 15:44:19 2009 New Revision: 4990 URL: http://www.opensync.org/changeset/4990 Log: Decapsulate encapsualted formats, even if internalFormat is not installed. Modified: trunk/opensync/engine/opensync_engine.c trunk/opensync/engine/opensync_obj_engine.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sun Jan 4 04:01:06 2009 (r4989) +++ trunk/opensync/engine/opensync_engine.c Sun Jan 4 15:44:19 2009 (r4990) @@ -221,24 +221,30 @@ internalFormat = _osync_engine_get_internal_format(engine, objtype); osync_trace(TRACE_INTERNAL, "common format %p for objtype %s", internalFormat, objtype); - /* Only convert if the engine is allowed to convert and if a internal format is available. + /* Only convert if the engine is allowed to convert and if an "internal" or detected format is available. The reason that the engine isn't allowed to convert could be backup. dumping the changes. Do not convert anything if the chagetype is DELETED. */ - if (internalFormat && osync_group_get_converter_enabled(engine->group) && (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED)) { + + /* TODO: Move common format conversion into objengine. Use this conversion only for + * encapsulating formats, if required. + */ + if ((internalFormat || detected_format) && osync_group_get_converter_enabled(engine->group) && (osync_change_get_changetype(change) != OSYNC_CHANGE_TYPE_DELETED)) { OSyncFormatConverterPath *path = NULL; OSyncObjFormatSink *formatsink = NULL; - osync_trace(TRACE_INTERNAL, "converting to common format %s", osync_objformat_get_name(internalFormat)); + OSyncObjFormat *temp_format = internalFormat ? internalFormat : detected_format; + osync_trace(TRACE_INTERNAL, "converting to format %s", osync_objformat_get_name(temp_format)); path = _osync_engine_get_converter_path(engine, member_objtype); if(!path) { - path = osync_format_env_find_path_with_detectors(engine->formatenv, osync_change_get_data(change), internalFormat, NULL, &error); + path = osync_format_env_find_path_with_detectors(engine->formatenv, osync_change_get_data(change), temp_format, NULL, &error); _osync_engine_set_converter_path(engine, member_objtype, path); } if (!path) goto error; - formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, internalFormat); + /* Get the current configured format to honor the plugin configuration! */ + formatsink = osync_objtype_sink_find_objformat_sink(objtype_sink, osync_change_get_objformat(change)); if (formatsink) { const char *config = osync_objformat_sink_get_config(formatsink); osync_converter_path_set_config(path, config); @@ -249,6 +255,7 @@ } } + /* TODO: Move this into the objengine. */ /* Merger - Merge lost information to the change (don't merger anything when changetype is DELETED.) */ if( osync_group_get_merger_enabled(engine->group) && osync_group_get_converter_enabled(engine->group) && Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Sun Jan 4 04:01:06 2009 (r4989) +++ trunk/opensync/engine/opensync_obj_engine.c Sun Jan 4 15:44:19 2009 (r4990) @@ -893,7 +893,7 @@ const char *osync_obj_engine_get_objtype(OSyncObjEngine *engine) { - osync_assert(engine); + osync_return_val_if_fail(engine, ""); return engine->objtype; } @@ -916,7 +916,10 @@ OSyncSinkEngine *sinkengine = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %s, %p)", __func__, engine, osync_engine_get_cmdstr(cmd), error); + osync_trace(TRACE_ENTRY, "%s(%p:%s, %s, %p)", __func__, + engine, osync_obj_engine_get_objtype(engine), + osync_engine_get_cmdstr(cmd), error); + osync_assert(engine); switch (cmd) { |
From: <dg...@su...> - 2009-01-04 03:01:23
|
Author: dgollub Date: Sun Jan 4 04:01:06 2009 New Revision: 4989 URL: http://www.opensync.org/changeset/4989 Log: Replace some osync_assert() with osync_return_{val,}if_fail(). Expect for some cases where OSyncError-struct would need to get set. TODO: introduce macro which sets error-struct for missing argument value. Modified: trunk/opensync/format/opensync_objformat.c Modified: trunk/opensync/format/opensync_objformat.c ============================================================================== --- trunk/opensync/format/opensync_objformat.c Sun Jan 4 03:50:01 2009 (r4988) +++ trunk/opensync/format/opensync_objformat.c Sun Jan 4 04:01:06 2009 (r4989) @@ -45,7 +45,7 @@ OSyncObjFormat *osync_objformat_ref(OSyncObjFormat *format) { - osync_assert(format); + osync_return_val_if_fail(format, NULL); g_atomic_int_inc(&(format->ref_count)); @@ -54,7 +54,7 @@ void osync_objformat_unref(OSyncObjFormat *format) { - osync_assert(format); + osync_return_if_fail(format); if (g_atomic_int_dec_and_test(&(format->ref_count))) { if (format->name) @@ -69,13 +69,13 @@ const char *osync_objformat_get_name(OSyncObjFormat *format) { - osync_assert(format); + osync_return_val_if_fail(format, NULL); return format->name; } const char *osync_objformat_get_objtype(OSyncObjFormat *format) { - osync_assert(format); + osync_return_val_if_fail(format, NULL); return format->objtype_name; } @@ -136,13 +136,13 @@ void osync_objformat_set_destroy_func(OSyncObjFormat *format, OSyncFormatDestroyFunc destroy_func) { - osync_assert(format); + osync_return_if_fail(format); format->destroy_func = destroy_func; } void osync_objformat_destroy(OSyncObjFormat *format, char *data, unsigned int size) { - osync_assert(format); + osync_return_if_fail(format); if (!format->destroy_func) { osync_trace(TRACE_INTERNAL, "Format %s don't have a destroy function. Possible memory leak", format->name); @@ -154,7 +154,7 @@ void osync_objformat_set_copy_func(OSyncObjFormat *format, OSyncFormatCopyFunc copy_func) { - osync_assert(format); + osync_return_if_fail(format); format->copy_func = copy_func; } @@ -183,7 +183,7 @@ void osync_objformat_set_duplicate_func(OSyncObjFormat *format, OSyncFormatDuplicateFunc dupe_func) { - osync_assert(format); + osync_return_if_fail(format); format->duplicate_func = dupe_func; } @@ -201,27 +201,27 @@ void osync_objformat_set_create_func(OSyncObjFormat *format, OSyncFormatCreateFunc create_func) { - osync_assert(format); + osync_return_if_fail(format); format->create_func = create_func; } void osync_objformat_create(OSyncObjFormat *format, char **data, unsigned int *size) { - osync_assert(format); - osync_assert(format->create_func); + osync_return_if_fail(format); + osync_return_if_fail(format->create_func); format->create_func(data, size); } void osync_objformat_set_print_func(OSyncObjFormat *format, OSyncFormatPrintFunc print_func) { - osync_assert(format); + osync_return_if_fail(format); format->print_func = print_func; } char *osync_objformat_print(OSyncObjFormat *format, const char *data, unsigned int size) { - osync_assert(format); + osync_return_val_if_fail(format, NULL); if (!format->print_func) return g_strndup(data, size); @@ -231,7 +231,7 @@ void osync_objformat_set_revision_func(OSyncObjFormat *format, OSyncFormatRevisionFunc revision_func) { - osync_assert(format); + osync_return_if_fail(format); format->revision_func = revision_func; } @@ -250,7 +250,7 @@ void osync_objformat_set_marshal_func(OSyncObjFormat *format, OSyncFormatMarshalFunc marshal_func) { - osync_assert(format); + osync_return_if_fail(format); format->marshal_func = marshal_func; } @@ -263,20 +263,20 @@ osync_bool osync_objformat_marshal(OSyncObjFormat *format, const char *input, unsigned int inpsize, OSyncMessage *message, OSyncError **error) { osync_assert(format); - osync_assert(format->marshal_func); + osync_return_val_if_fail(format->marshal_func, TRUE); return format->marshal_func(input, inpsize, message, error); } void osync_objformat_set_demarshal_func(OSyncObjFormat *format, OSyncFormatDemarshalFunc demarshal_func) { - osync_assert(format); + osync_return_if_fail(format); format->demarshal_func = demarshal_func; } osync_bool osync_objformat_demarshal(OSyncObjFormat *format, OSyncMessage *message, char **output, unsigned int *outpsize, OSyncError **error) { osync_assert(format); - osync_assert(format->demarshal_func); + osync_return_val_if_fail(format->demarshal_func, TRUE); return format->demarshal_func(message, output, outpsize, error); } @@ -289,7 +289,7 @@ osync_bool osync_objformat_validate(OSyncObjFormat *format, const char *data, unsigned int size, OSyncError **error) { osync_assert(format); - osync_assert(format->validate_func); + osync_return_val_if_fail(format->validate_func, TRUE); return format->validate_func(data, size, format->user_data, error); } @@ -312,7 +312,7 @@ OSyncCapabilities *caps, OSyncError **error) { osync_assert(format); - osync_assert(format->merge_func); + osync_return_val_if_fail(format->merge_func, TRUE); return format->merge_func(input, inpsize, output, outpsize, entire, entsize, caps, error); } @@ -328,7 +328,7 @@ OSyncCapabilities *caps, OSyncError **error) { osync_assert(format); - osync_assert(format->demerge_func); + osync_return_val_if_fail(format->demerge_func, TRUE); return format->demerge_func(input, inpsize, output, outpsize, caps, error); } |
From: <dg...@su...> - 2009-01-04 02:50:20
|
Author: dgollub Date: Sun Jan 4 03:50:01 2009 New Revision: 4988 URL: http://www.opensync.org/changeset/4988 Log: Fix child_count of XMLFormat for XMLFormat's which got assemble by osync_xmlfield_new() (all xmlformat-converter plugins!). This regression was introduced by r4933 Modified: trunk/opensync/xmlformat/opensync_xmlfield.c trunk/opensync/xmlformat/opensync_xmlformat.c Modified: trunk/opensync/xmlformat/opensync_xmlfield.c ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlfield.c Sun Jan 4 02:35:29 2009 (r4987) +++ trunk/opensync/xmlformat/opensync_xmlfield.c Sun Jan 4 03:50:01 2009 (r4988) @@ -75,6 +75,32 @@ return xmlfield; } +OSyncXMLField *osync_xmlfield_new_xmlformat(OSyncXMLFormat *xmlformat, xmlNodePtr node, OSyncError **error) +{ + OSyncXMLField *xmlfield = osync_try_malloc0(sizeof(OSyncXMLField), error); + if(!xmlfield) { + osync_trace(TRACE_ERROR, "%s: %s" , __func__, osync_error_print(error)); + return NULL; + } + + xmlfield->next = NULL; + xmlfield->node = node; + xmlfield->prev = xmlformat->last_child; + node->_private = xmlfield; + + if(!xmlformat->first_child) + xmlformat->first_child = xmlfield; + if(xmlformat->last_child) + xmlformat->last_child->next = xmlfield; + xmlformat->last_child = xmlfield; + xmlformat->child_count++; + + // We don't know if the parsed xmlformat got sorted xmlfield -> unsorted + xmlfield->sorted = FALSE; + + return xmlfield; +} + osync_bool osync_xmlfield_parse(OSyncXMLField *parent, xmlNodePtr node, OSyncXMLField **first_child, OSyncXMLField **last_child, OSyncError **error) { OSyncXMLField *xmlfield = NULL; @@ -212,7 +238,7 @@ node = xmlNewTextChild(xmlDocGetRootElement(xmlformat->doc), NULL, BAD_CAST name, NULL); - xmlfield = osync_xmlfield_new_xmlfield(xmlformat->last_child, node, error); + xmlfield = osync_xmlfield_new_xmlformat(xmlformat, node, error); if(!xmlfield) { xmlUnlinkNode(node); xmlFreeNode(node); Modified: trunk/opensync/xmlformat/opensync_xmlformat.c ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat.c Sun Jan 4 02:35:29 2009 (r4987) +++ trunk/opensync/xmlformat/opensync_xmlformat.c Sun Jan 4 03:50:01 2009 (r4988) @@ -51,10 +51,8 @@ osync_assert(objtype); xmlformat = osync_try_malloc0(sizeof(OSyncXMLFormat), error); - if(!xmlformat) { - osync_trace(TRACE_EXIT_ERROR, "%s: %s" , __func__, osync_error_print(error)); - return NULL; - } + if (!xmlformat) + goto error; xmlformat->doc = xmlNewDoc(BAD_CAST "1.0"); xmlformat->doc->children = xmlNewDocNode(xmlformat->doc, NULL, BAD_CAST objtype, NULL); @@ -64,9 +62,16 @@ xmlformat->child_count = 0; xmlformat->sorted = FALSE; xmlformat->doc->_private = xmlformat; + + if (!(xmlformat->xmlfield = osync_xmlfield_new_node(xmlformat->doc->children, error))) + goto error; osync_trace(TRACE_EXIT, "%s: %p", __func__, xmlformat); return xmlformat; + +error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s" , __func__, osync_error_print(error)); + return NULL; } OSyncXMLFormat *osync_xmlformat_parse(const char *buffer, unsigned int size, OSyncError **error) @@ -100,6 +105,9 @@ goto error; xmlformat->xmlfield = xmlfield; + /* TODO: get key-count value with a sepcial parase function which + * counts the first-level, by incrementing the node->doc->_private pointer + */ xmlformat->child_count = osync_xmlfield_get_key_count(xmlfield); osync_trace(TRACE_EXIT, "%s: %p", __func__, xmlformat); |
From: <dg...@su...> - 2009-01-04 02:02:31
|
Author: dgollub Date: Sun Jan 4 02:35:29 2009 New Revision: 4987 URL: http://www.opensync.org/changeset/4987 Log: Dump the XMLFormat in the valdiation function for debugging. Modified: format-plugins/xmlformat/trunk/src/xmlformat.c Modified: format-plugins/xmlformat/trunk/src/xmlformat.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 01:46:59 2009 (r4986) +++ format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 02:35:29 2009 (r4987) @@ -318,11 +318,25 @@ osync_bool validate_xmlformat(const char *data, unsigned int size, void *user_data, OSyncError **error) { + osync_trace(TRACE_ENTRY, "%s(%p, %u, %p, %p)", __func__, data, size, user_data, error); + + osync_bool ret; + char *buffer; + unsigned int bufsize; OSyncXMLFormat *xmlformat = (OSyncXMLFormat *) data; XMLFormat *xmlformat_data = user_data; osync_assert(xmlformat); - return osync_xmlformat_schema_validate(xmlformat_data->xmlformat_schema, xmlformat, error); + if (osync_trace_is_enabled()) { + osync_xmlformat_assemble(xmlformat, &buffer, &bufsize); + osync_trace(TRACE_SENSITIVE, "XMLFormat:\n%s", buffer); + osync_free(buffer); + } + + ret = osync_xmlformat_schema_validate(xmlformat_data->xmlformat_schema, xmlformat, error); + + osync_trace(TRACE_EXIT, "%s: %s", __func__, ret ? "TRUE" : "FALSE"); + return ret; } static void finalize(void *userdata) |
From: <dg...@su...> - 2009-01-04 00:47:15
|
Author: dgollub Date: Sun Jan 4 01:46:59 2009 New Revision: 4986 URL: http://www.opensync.org/changeset/4986 Log: Make use of the user-data pointer which get passed for the validation-format-plugin function as second-last argument. Introduced by r4985 Modified: format-plugins/xmlformat/trunk/src/xmlformat.c Modified: format-plugins/xmlformat/trunk/src/xmlformat.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 01:46:04 2009 (r4985) +++ format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 01:46:59 2009 (r4986) @@ -316,15 +316,13 @@ return get_revision(data, size, "LastModified", error); } -osync_bool validate_xmlformat(const char *data, unsigned int size, OSyncError **error) +osync_bool validate_xmlformat(const char *data, unsigned int size, void *user_data, OSyncError **error) { OSyncXMLFormat *xmlformat = (OSyncXMLFormat *) data; - OSyncXMLFormatSchema *schema = NULL; + XMLFormat *xmlformat_data = user_data; osync_assert(xmlformat); - schema = osync_xmlformat_schema_get_instance(xmlformat, error); - - return osync_xmlformat_schema_validate(schema, xmlformat, error); + return osync_xmlformat_schema_validate(xmlformat_data->xmlformat_schema, xmlformat, error); } static void finalize(void *userdata) |
From: <dg...@su...> - 2009-01-04 00:46:23
|
Author: dgollub Date: Sun Jan 4 01:46:04 2009 New Revision: 4985 URL: http://www.opensync.org/changeset/4985 Log: Extended the format-plugin validation function argument list by one void *user_data. This argument contains the user-data returned by the format-plugin initalize function. If you don't have an initalize function registerd this pointer will be always NULL. Just extend the parameter of your validation format plugin function. Like this: -osync_bool validate(const char *data, unsigned int size, OSyncError **error) +osync_bool validate(const char *data, unsigned int size, void *user_data, OSyncError **error) Modified: trunk/opensync/format/opensync_objformat.c trunk/opensync/format/opensync_objformat.h Modified: trunk/opensync/format/opensync_objformat.c ============================================================================== --- trunk/opensync/format/opensync_objformat.c Sun Jan 4 01:43:07 2009 (r4984) +++ trunk/opensync/format/opensync_objformat.c Sun Jan 4 01:46:04 2009 (r4985) @@ -290,7 +290,7 @@ { osync_assert(format); osync_assert(format->validate_func); - return format->validate_func(data, size, error); + return format->validate_func(data, size, format->user_data, error); } osync_bool osync_objformat_must_validate(OSyncObjFormat *format) Modified: trunk/opensync/format/opensync_objformat.h ============================================================================== --- trunk/opensync/format/opensync_objformat.h Sun Jan 4 01:43:07 2009 (r4984) +++ trunk/opensync/format/opensync_objformat.h Sun Jan 4 01:46:04 2009 (r4985) @@ -42,7 +42,7 @@ typedef time_t (* OSyncFormatRevisionFunc) (const char *data, unsigned int size, OSyncError **error); typedef osync_bool (* OSyncFormatMarshalFunc) (const char *input, unsigned int inpsize, OSyncMessage *message, OSyncError **error); typedef osync_bool (* OSyncFormatDemarshalFunc) (OSyncMessage *message, char **output, unsigned int *outpsize, OSyncError **error); -typedef osync_bool (* OSyncFormatValidateFunc) (const char *data, unsigned int size, OSyncError **error); +typedef osync_bool (* OSyncFormatValidateFunc) (const char *data, unsigned int size, void *user_data, OSyncError **error); typedef osync_bool (* OSyncFormatMergeFunc) (const char *input, unsigned int inpsize, char **output, unsigned int *outpsize, const char *entire, unsigned int entsize, OSyncCapabilities *caps, OSyncError **error); typedef osync_bool (* OSyncFormatDemergeFunc) (const char *input, unsigned int inpsize, char **output, unsigned int *outpsize, OSyncCapabilities *caps, OSyncError **error); |
From: <dg...@su...> - 2009-01-04 00:43:25
|
Author: dgollub Date: Sun Jan 4 01:43:07 2009 New Revision: 4984 URL: http://www.opensync.org/changeset/4984 Log: Dropped osync_xmlformat_schema_get_instance() and all related code. Dropped testcase of unittest xmlformat which was supposed to test osync_xmlformat_schema_get_instance(). This code was kind of problametcaliy since it needed to hold an mutex lock. With introduction of format-plugin finalize/initalize function this got obsoalte. Modified: trunk/opensync.sym trunk/opensync/engine/opensync_engine.c trunk/opensync/xmlformat/opensync_xmlformat_schema.c trunk/opensync/xmlformat/opensync_xmlformat_schema.h trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h trunk/tests/capabilities-tests/check_xmlformat.c Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/opensync.sym Sun Jan 4 01:43:07 2009 (r4984) @@ -750,7 +750,6 @@ osync_xmlformat_new osync_xmlformat_parse osync_xmlformat_ref -osync_xmlformat_schema_get_instance osync_xmlformat_schema_new osync_xmlformat_schema_ref osync_xmlformat_schema_unref Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/opensync/engine/opensync_engine.c Sun Jan 4 01:43:07 2009 (r4984) @@ -144,42 +144,6 @@ return ret; } -gboolean foreach_schema(void *key, void *value, void *userdata) { - osync_xmlformat_schema_unref((OSyncXMLFormatSchema *)value); - return TRUE; -} - -static void _osync_engine_finalize_internal_schemas(OSyncEngine *engine) -{ - - if ( engine->internalSchemas != NULL ) { - g_hash_table_foreach_remove(engine->internalSchemas, foreach_schema, NULL); - } - -} - -static void _osync_engine_set_internal_schema(OSyncEngine *engine, const char *objtype, OSyncError **error) -{ - OSyncXMLFormat *xmlformat = NULL; - OSyncXMLFormatSchema *schema = NULL; - - // init OSyncXMLFormatSchemas - xmlformat = osync_xmlformat_new(objtype, NULL); -#ifdef OPENSYNC_UNITTESTS - schema = osync_xmlformat_schema_get_instance_with_path(xmlformat, engine->schema_dir, error); -#else - schema = osync_xmlformat_schema_get_instance(xmlformat, error); -#endif - osync_xmlformat_unref(xmlformat); - - if (!schema) - return; - - osync_trace(TRACE_INTERNAL, "Setting internal schema for objtype %s", objtype); - - g_hash_table_insert(engine->internalSchemas, g_strdup(objtype), schema); -} - static void _osync_engine_set_internal_format(OSyncEngine *engine, const char *objtype, OSyncObjFormat *format) { if (!format) @@ -1369,15 +1333,6 @@ _osync_engine_set_internal_format(engine, "event", osync_format_env_find_objformat(engine->formatenv, "xmlformat-event")); _osync_engine_set_internal_format(engine, "todo", osync_format_env_find_objformat(engine->formatenv, "xmlformat-todo")); _osync_engine_set_internal_format(engine, "note", osync_format_env_find_objformat(engine->formatenv, "xmlformat-note")); - /* init schemas */ - - /* TODO: DROP engine-central valdation. - * This should be done after MULTPLIY and WRITE engine command. - _osync_engine_set_internal_schema(engine, "contact", error); - _osync_engine_set_internal_schema(engine, "event", error); - _osync_engine_set_internal_schema(engine, "todo", error); - _osync_engine_set_internal_schema(engine, "note", error); - */ return TRUE; @@ -1527,9 +1482,6 @@ engine->pluginenv = NULL; } - /* free internal schemas */ - _osync_engine_finalize_internal_schemas(engine); - /* Store group modificiations (i.e. last_sync timestamp) */ if (!osync_group_save(engine->group, error)) goto error; Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema.c ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema.c Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema.c Sun Jan 4 01:43:07 2009 (r4984) @@ -30,18 +30,6 @@ #include "opensync_xmlformat_schema_private.h" -static GList *schemas = NULL; -static GStaticMutex schema_mutex = G_STATIC_MUTEX_INIT; - -static void _osync_xmlformat_schema_lock_mutex() { - g_static_mutex_lock(&schema_mutex); -} - -static void _osync_xmlformat_schema_unlock_mutex() { - g_static_mutex_unlock(&schema_mutex); -} - - OSyncXMLFormatSchema *osync_xmlformat_schema_new_path(const char *objtype, const char *path, OSyncError **error) { OSyncXMLFormatSchema * osyncschema = NULL; char *schemafilepath = NULL; @@ -57,7 +45,6 @@ osyncschema = osync_try_malloc0(sizeof(OSyncXMLFormatSchema), error); if(!osyncschema) { osync_trace(TRACE_EXIT_ERROR, "%s: %s" , __func__, osync_error_print(error)); - // release mutex return NULL; } osyncschema->objtype = g_strdup(objtype); @@ -108,60 +95,6 @@ return osync_xmlformat_schema_new_path(objtype, NULL, error); } -/** - * @brief Get a schema for the xmlformat. - * - * This function creates only one instance of a schema for each objtype. If a xmlformat is passed as a parameter with the same - * objtype as a xmlformat prior the returned pointer to a OSyncXMLFormatSchema instance is the same as before. - * - * @param xmlformat The pointer to a xmlformat object - * @param schemadir Path of the dir where the schema files are found. - * @param error The error which will hold the info in case of an error - * @return Pointer to a instance of OSyncXMLFormatSchema - */ - -OSyncXMLFormatSchema *osync_xmlformat_schema_get_instance_with_path(OSyncXMLFormat *xmlformat, const char *schemadir, OSyncError **error) { - OSyncXMLFormatSchema *osyncschema = NULL; - GList * entry; - const char *objtype; - - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, xmlformat, error); - - osync_assert(xmlformat); - - objtype = osync_xmlformat_get_objtype(xmlformat); - - // get mutex - _osync_xmlformat_schema_lock_mutex(); - // find schema for objtype - for ( entry = g_list_first(schemas); entry != NULL; entry = g_list_next(entry)) { // should be fast enough for only a few objtypes - osyncschema = (OSyncXMLFormatSchema *) entry->data; - osync_assert(osyncschema->objtype); - if (!strcmp(osyncschema->objtype, objtype) ) { - osync_xmlformat_schema_ref(osyncschema); - goto exit; - } - osyncschema = NULL; - } - if ( osyncschema == NULL ) { - osyncschema = osync_xmlformat_schema_new_xmlformat(xmlformat, schemadir, error); - if ( osyncschema != NULL ) { - schemas = g_list_append(schemas, osyncschema); - } - } - exit: - // release mutex - _osync_xmlformat_schema_unlock_mutex(); - osync_trace(TRACE_EXIT, "%s, (%p)", __func__, osyncschema ); - return osyncschema; -} - -/*@}*/ - -OSyncXMLFormatSchema * osync_xmlformat_schema_get_instance(OSyncXMLFormat *xmlformat, OSyncError **error) { - return osync_xmlformat_schema_get_instance_with_path(xmlformat, NULL, error); -} - osync_bool osync_xmlformat_schema_validate(OSyncXMLFormatSchema *schema, OSyncXMLFormat *xmlformat, OSyncError **error) { int rc = 0; @@ -183,9 +116,6 @@ osync_assert(osyncschema); if (g_atomic_int_dec_and_test(&(osyncschema->ref_count))) { - _osync_xmlformat_schema_lock_mutex(); - schemas = g_list_remove(schemas, osyncschema); - _osync_xmlformat_schema_unlock_mutex(); xmlSchemaFreeValidCtxt(osyncschema->context); xmlSchemaFree(osyncschema->schema); g_free(osyncschema->objtype); Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema.h Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema.h Sun Jan 4 01:43:07 2009 (r4984) @@ -41,18 +41,6 @@ OSYNC_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new(const char *objtype, OSyncError **error); /** - * @brief Get a schema for an xmlformat. - * - * This function creates only one instance of a schema for each objtype. If an xmlformat is passed as a parameter with the same - * objtype as passed in previously, the returned pointer to an OSyncXMLFormatSchema instance is the same as before. - * - * @param xmlformat The pointer to a xmlformat object - * @param error The error which will hold the info in case of an error - * @return Pointer to a instance of OSyncXMLFormatSchema - */ -OSYNC_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_get_instance(OSyncXMLFormat *xmlformat, OSyncError **error); - -/** * @brief Decrement the reference counter. The OSyncXMLFormatSchema object will * be freed if the reference count reaches zero. * @param schema Pointer to the OSyncXMLFormatSchema to be freed Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h Sun Jan 4 01:43:07 2009 (r4984) @@ -49,17 +49,4 @@ */ OSYNC_TEST_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new_path(const char *objtype, const char *path, OSyncError **error); -/** - * @brief Get a schema for the xmlformat. - * - * This function creates only one instance of a schema for each objtype. If a xmlformat is passed as a parameter with the same - * objtype as a xmlformat prior the returned pointer to a OSyncXMLFormatSchema instance is the same as before. - * - * @param xmlformat The pointer to a xmlformat object - * @param schemadir Path of the dir where the schema files are found. - * @param error The error which will hold the info in case of an error - * @return Pointer to a instance of OSyncXMLFormatSchema - */ -OSYNC_TEST_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_get_instance_with_path(OSyncXMLFormat *xmlformat, const char *schemadir, OSyncError **error); - #endif /* OPENSYNC_XMLFORMAT_SCHEMA_INTERNALS_H_ */ Modified: trunk/tests/capabilities-tests/check_xmlformat.c ============================================================================== --- trunk/tests/capabilities-tests/check_xmlformat.c Sun Jan 4 01:23:49 2009 (r4983) +++ trunk/tests/capabilities-tests/check_xmlformat.c Sun Jan 4 01:43:07 2009 (r4984) @@ -195,38 +195,6 @@ } END_TEST -START_TEST (xmlformat_schema_get_instance) -{ - char *testbed = setup_testbed("xmlformats"); - - OSyncError *error = NULL; - - //TODO disable libxml2 output to stderr - - OSyncXMLFormat *xmlformat = osync_xmlformat_new("abc", &error); - OSyncXMLFormatSchema *failschema = osync_xmlformat_schema_get_instance_with_path(xmlformat, testbed, &error); - fail_unless(failschema == NULL); - osync_xmlformat_unref(xmlformat); - - xmlformat = osync_xmlformat_new("mockobjtype", &error); - fail_if(xmlformat == NULL, NULL); - fail_if(error == NULL, NULL); - - OSyncXMLFormatSchema *schema1 = osync_xmlformat_schema_get_instance_with_path(xmlformat, testbed, &error); - OSyncXMLFormatSchema *schema2 = osync_xmlformat_schema_get_instance_with_path(xmlformat, testbed, &error); - fail_if(schema1 == NULL); - fail_if(schema2 == NULL); - fail_unless( schema1 == schema2 ); - fail_unless( schema1->ref_count == 2 ); - - osync_xmlformat_schema_unref(schema1); - osync_xmlformat_schema_unref(schema2); - - destroy_testbed(testbed); - -} -END_TEST - START_TEST (xmlformat_schema_validate) { char *testbed = setup_testbed("xmlformats"); @@ -267,7 +235,6 @@ create_case(s, "xmlformat_search_field", xmlformat_search_field); // xmlformat schema - create_case(s, "xmlformat_schema_get_instance", xmlformat_schema_get_instance); create_case(s, "xmlformat_schema_validate", xmlformat_schema_validate); // xmlfield |
From: <dg...@su...> - 2009-01-04 00:24:06
|
Author: dgollub Date: Sun Jan 4 01:23:49 2009 New Revision: 4983 URL: http://www.opensync.org/changeset/4983 Log: Added initalize / finalize functions for XMLFormat-plugin. Currently this just allocates the OSyncXMLFormatSchema. The advantage of this, that the OSyncXMLFormatSchema gets only initailize once for each objtype. Each call parses the XSD schema which is very expensive and should only be done once and not for each entry which needs to get validated. Modified: format-plugins/xmlformat/trunk/src/xmlformat.c format-plugins/xmlformat/trunk/src/xmlformat.h Modified: format-plugins/xmlformat/trunk/src/xmlformat.c ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 01:18:32 2009 (r4982) +++ format-plugins/xmlformat/trunk/src/xmlformat.c Sun Jan 4 01:23:49 2009 (r4983) @@ -327,6 +327,62 @@ return osync_xmlformat_schema_validate(schema, xmlformat, error); } +static void finalize(void *userdata) +{ + XMLFormat *xmlformat_data = (XMLFormat *) userdata; + + if (!userdata) + return; + + if (xmlformat_data->xmlformat_schema) + osync_xmlformat_schema_unref(xmlformat_data->xmlformat_schema); + + osync_free(xmlformat_data); +} + +static void *initialize(const char *objtype, OSyncError **error) +{ + XMLFormat *userdata = NULL; + osync_trace(TRACE_ENTRY, "%s(%s, %p)", __func__, objtype, error); + + userdata = osync_try_malloc0(sizeof(XMLFormat), error); + if (!userdata) + goto error; + + userdata->xmlformat_schema = osync_xmlformat_schema_new(objtype, error); + if (!userdata->xmlformat_schema) + goto error_and_free; + + osync_trace(TRACE_EXIT, "%s: %p", __func__, userdata); + return (void *) userdata; + +error_and_free: + finalize(userdata); +error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return NULL; +} + +static void *initialize_contact(OSyncError **error) +{ + return initialize("contact", error); +} + +static void *initialize_event(OSyncError **error) +{ + return initialize("event", error); +} + +static void *initialize_todo(OSyncError **error) +{ + return initialize("todo", error); +} + +static void *initialize_note(OSyncError **error) +{ + return initialize("note", error); +} + osync_bool get_format_info(OSyncFormatEnv *env) { OSyncError *error = NULL; @@ -340,6 +396,9 @@ return FALSE; } + osync_objformat_set_initialize_func(format, initialize_contact); + osync_objformat_set_finalize_func(format, finalize); + osync_objformat_set_compare_func(format, compare_contact); osync_objformat_set_destroy_func(format, destroy_xmlformat); osync_objformat_set_duplicate_func(format, duplicate_xmlformat); @@ -368,6 +427,9 @@ return FALSE; } + osync_objformat_set_initialize_func(format, initialize_event); + osync_objformat_set_finalize_func(format, finalize); + osync_objformat_set_compare_func(format, compare_event); osync_objformat_set_destroy_func(format, destroy_xmlformat); osync_objformat_set_duplicate_func(format, duplicate_xmlformat); @@ -396,6 +458,9 @@ return FALSE; } + osync_objformat_set_initialize_func(format, initialize_todo); + osync_objformat_set_finalize_func(format, finalize); + osync_objformat_set_compare_func(format, compare_todo); osync_objformat_set_destroy_func(format, destroy_xmlformat); osync_objformat_set_duplicate_func(format, duplicate_xmlformat); @@ -424,6 +489,9 @@ return FALSE; } + osync_objformat_set_initialize_func(format, initialize_note); + osync_objformat_set_finalize_func(format, finalize); + osync_objformat_set_compare_func(format, compare_note); osync_objformat_set_destroy_func(format, destroy_xmlformat); osync_objformat_set_duplicate_func(format, duplicate_xmlformat); Modified: format-plugins/xmlformat/trunk/src/xmlformat.h ============================================================================== --- format-plugins/xmlformat/trunk/src/xmlformat.h Sun Jan 4 01:18:32 2009 (r4982) +++ format-plugins/xmlformat/trunk/src/xmlformat.h Sun Jan 4 01:23:49 2009 (r4983) @@ -52,6 +52,16 @@ char** keys; } OSyncXMLPoints; +/** + * @brief Interanl xmlformat struct, which get passed to all xmlformat + * functions as userdata pointer. + */ +typedef struct XMLFormat { + /** OSyncXMLFormatSchema for validation */ + OSyncXMLFormatSchema *xmlformat_schema; + +} XMLFormat; + void destroy_xmlformat(char *input, unsigned int inpsize); osync_bool copy_xmlformat(const char *input, unsigned int inpsize, char **output, unsigned int *outpsize, OSyncError **error); char *print_xmlformat(const char *data, unsigned int size); |
From: <dg...@su...> - 2009-01-04 00:18:48
|
Author: dgollub Date: Sun Jan 4 01:18:32 2009 New Revision: 4982 URL: http://www.opensync.org/changeset/4982 Log: Introduce osync_xmlformat_schema_new() for the public API to create an OSyncXMLSchema object out of the OpenSync-core tree. Modified: trunk/opensync.sym trunk/opensync/xmlformat/opensync_xmlformat_schema.c trunk/opensync/xmlformat/opensync_xmlformat_schema.h trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h trunk/tests/capabilities-tests/check_xmlformat.c Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sun Jan 4 01:17:03 2009 (r4981) +++ trunk/opensync.sym Sun Jan 4 01:18:32 2009 (r4982) @@ -751,6 +751,7 @@ osync_xmlformat_parse osync_xmlformat_ref osync_xmlformat_schema_get_instance +osync_xmlformat_schema_new osync_xmlformat_schema_ref osync_xmlformat_schema_unref osync_xmlformat_schema_validate Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema.c ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema.c Sun Jan 4 01:17:03 2009 (r4981) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema.c Sun Jan 4 01:18:32 2009 (r4982) @@ -42,14 +42,17 @@ } -OSyncXMLFormatSchema * osync_xmlformat_schema_new(OSyncXMLFormat *xmlformat, const char *path, OSyncError **error) { +OSyncXMLFormatSchema *osync_xmlformat_schema_new_path(const char *objtype, const char *path, OSyncError **error) { OSyncXMLFormatSchema * osyncschema = NULL; char *schemafilepath = NULL; xmlSchemaParserCtxtPtr xmlSchemaParserCtxt; - - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, xmlformat, path, error); - - osync_assert(xmlformat); + + osync_trace(TRACE_ENTRY, "%s(%s, %p, %p)", __func__, __NULLSTR(objtype), path, error); + + if (!objtype) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Can't load XML Schema without defined object type."); + goto error; + } osyncschema = osync_try_malloc0(sizeof(OSyncXMLFormatSchema), error); if(!osyncschema) { @@ -57,7 +60,7 @@ // release mutex return NULL; } - osyncschema->objtype = g_strdup(osync_xmlformat_get_objtype(xmlformat)); + osyncschema->objtype = g_strdup(objtype); schemafilepath = g_strdup_printf("%s%c%s%s%s", path ? path : OPENSYNC_SCHEMASDIR, @@ -96,6 +99,15 @@ return NULL; } +OSyncXMLFormatSchema *osync_xmlformat_schema_new_xmlformat(OSyncXMLFormat *xmlformat, const char *path, OSyncError **error) { + return osync_xmlformat_schema_new_path(osync_xmlformat_get_objtype(xmlformat), path, error); +} + + +OSyncXMLFormatSchema *osync_xmlformat_schema_new(const char *objtype, OSyncError **error) { + return osync_xmlformat_schema_new_path(objtype, NULL, error); +} + /** * @brief Get a schema for the xmlformat. * @@ -132,7 +144,7 @@ osyncschema = NULL; } if ( osyncschema == NULL ) { - osyncschema = osync_xmlformat_schema_new(xmlformat, schemadir, error); + osyncschema = osync_xmlformat_schema_new_xmlformat(xmlformat, schemadir, error); if ( osyncschema != NULL ) { schemas = g_list_append(schemas, osyncschema); } Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema.h Sun Jan 4 01:17:03 2009 (r4981) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema.h Sun Jan 4 01:18:32 2009 (r4982) @@ -32,6 +32,15 @@ /*@{*/ /** + * @brief Create new OSyncXMLFormatSchema for a certain object type + * + * @param objtype The object type name to create a OSyncXMLFormatSchema object for + * @param error The error which will hold the info in case of an error + * @return new OSyncXMLFormatSchema or NULL in case of an error + */ +OSYNC_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new(const char *objtype, OSyncError **error); + +/** * @brief Get a schema for an xmlformat. * * This function creates only one instance of a schema for each objtype. If an xmlformat is passed as a parameter with the same Modified: trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h Sun Jan 4 01:17:03 2009 (r4981) +++ trunk/opensync/xmlformat/opensync_xmlformat_schema_internals.h Sun Jan 4 01:18:32 2009 (r4982) @@ -38,8 +38,16 @@ * @param error The error which will hold the info in case of an error * @return new OSyncXMLFormatSchema or NULL in case of an error */ -OSYNC_TEST_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new(OSyncXMLFormat *xmlformat, const char *path, OSyncError **error); +OSYNC_TEST_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new_xmlformat(OSyncXMLFormat *xmlformat, const char *path, OSyncError **error); +/** + * @brief Create new OSyncXMLFormatSchema for a certain object type + * @param objtype The object type name to create a OSyncXMLFormatSchema object for + * @param path The individual schema path. If NULL the default OPENSYNC_SCHEMASDIR is used. + * @param error The error which will hold the info in case of an error + * @return new OSyncXMLFormatSchema or NULL in case of an error + */ +OSYNC_TEST_EXPORT OSyncXMLFormatSchema *osync_xmlformat_schema_new_path(const char *objtype, const char *path, OSyncError **error); /** * @brief Get a schema for the xmlformat. Modified: trunk/tests/capabilities-tests/check_xmlformat.c ============================================================================== --- trunk/tests/capabilities-tests/check_xmlformat.c Sun Jan 4 01:17:03 2009 (r4981) +++ trunk/tests/capabilities-tests/check_xmlformat.c Sun Jan 4 01:18:32 2009 (r4982) @@ -242,7 +242,7 @@ fail_unless(error == NULL, NULL); g_free(buffer); - schema = osync_xmlformat_schema_new(xmlformat, testbed, &error); + schema = osync_xmlformat_schema_new_xmlformat(xmlformat, testbed, &error); fail_if( schema == NULL ); fail_unless( osync_xmlformat_schema_validate(schema, xmlformat, &error) ); |
From: <dg...@su...> - 2009-01-04 00:17:21
|
Author: dgollub Date: Sun Jan 4 01:17:03 2009 New Revision: 4981 URL: http://www.opensync.org/changeset/4981 Log: Install XMLFormat-schemas into the OPENSYNC_SCHEMASDIR Added: format-plugins/xmlformat/trunk/schemas/CMakeLists.txt Modified: format-plugins/xmlformat/trunk/CMakeLists.txt Modified: format-plugins/xmlformat/trunk/CMakeLists.txt ============================================================================== --- format-plugins/xmlformat/trunk/CMakeLists.txt Sun Jan 4 01:02:48 2009 (r4980) +++ format-plugins/xmlformat/trunk/CMakeLists.txt Sun Jan 4 01:17:03 2009 (r4981) @@ -15,6 +15,7 @@ INCLUDE( OpenSyncPlatforms ) INCLUDE( Testing ) ADD_SUBDIRECTORY( src ) +ADD_SUBDIRECTORY( schemas ) CONFIGURE_FILE( "config.h.cmake" "${CMAKE_BINARY_DIR}/config.h" ) Added: format-plugins/xmlformat/trunk/schemas/CMakeLists.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ format-plugins/xmlformat/trunk/schemas/CMakeLists.txt Sun Jan 4 01:17:03 2009 (r4981) @@ -0,0 +1,4 @@ +FILE( GLOB SCHEMA_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.xsd" ) + +INSTALL( FILES ${SCHEMA_FILES} DESTINATION ${OPENSYNC_SCHEMASDIR} ) + |
From: <dg...@su...> - 2009-01-04 00:03:07
|
Author: dgollub Date: Sun Jan 4 01:02:48 2009 New Revision: 4980 URL: http://www.opensync.org/changeset/4980 Log: Introduce osync_objformat_set_finalize_func and osync_objformat_set_initialize_func for the public API. Those function allow to register format-plugin specific initalize/finalize functions. Which get called when the format-plugin get loaded by the format-environment. This function allow to allocated user-data which will be passed with all format-plugin calls. And must get released within the finalize call. TODO: introduce user-data paramter for all format-plugin calls. Modified: trunk/opensync.sym trunk/opensync/format/opensync_format_env.c trunk/opensync/format/opensync_format_env_internals.h trunk/opensync/format/opensync_objformat.c trunk/opensync/format/opensync_objformat.h trunk/opensync/format/opensync_objformat_internals.h trunk/opensync/format/opensync_objformat_private.h Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync.sym Sun Jan 4 01:02:48 2009 (r4980) @@ -388,6 +388,8 @@ osync_objformat_set_demerge_func osync_objformat_set_destroy_func osync_objformat_set_duplicate_func +osync_objformat_set_finalize_func +osync_objformat_set_initialize_func osync_objformat_set_marshal_func osync_objformat_set_merge_func osync_objformat_set_print_func Modified: trunk/opensync/format/opensync_format_env.c ============================================================================== --- trunk/opensync/format/opensync_format_env.c Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_format_env.c Sun Jan 4 01:02:48 2009 (r4980) @@ -167,6 +167,42 @@ osync_trace(TRACE_EXIT, "%s", __func__); } +void osync_format_env_objformat_initialize(OSyncFormatEnv *env, OSyncError **error) +{ + OSyncObjFormat *objformat = NULL; + unsigned int i, num_objformats; + + osync_return_if_fail(env); + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, env); + + num_objformats = osync_format_env_num_objformats(env); + + for (i = 0; i < num_objformats; i++) { + objformat = osync_format_env_nth_objformat(env, i); + osync_assert(objformat); + osync_objformat_initialize(objformat, error); + } + osync_trace(TRACE_EXIT, "%s", __func__); +} + +void osync_format_env_objformat_finalize(OSyncFormatEnv *env) +{ + OSyncObjFormat *objformat = NULL; + unsigned int i, num_objformats; + + osync_return_if_fail(env); + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, env); + + num_objformats = osync_format_env_num_objformats(env); + + for (i = 0; i < num_objformats; i++ ) { + objformat = osync_format_env_nth_objformat(env, i); + osync_assert(objformat); + osync_objformat_finalize(objformat); + } + osync_trace(TRACE_EXIT, "%s", __func__); +} + static int osync_format_converter_path_vertice_compare_distance(const void *a, const void *b) { const OSyncFormatConverterPathVertice *va = a; @@ -710,6 +746,10 @@ osync_assert(env); if (g_atomic_int_dec_and_test(&(env->ref_count))) { + + /* Finailze the object formats */ + osync_format_env_objformat_finalize(env); + /* Free the formats */ while (env->objformats) { osync_trace(TRACE_INTERNAL, "FORMAT: %s", osync_objformat_get_name(env->objformats->data)); @@ -753,15 +793,20 @@ must_exist = FALSE; } - if (!osync_format_env_load_modules(env, path, must_exist, error)) { - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return FALSE; - } + if (!osync_format_env_load_modules(env, path, must_exist, error)) + goto error; osync_format_env_converter_initialize(env, error); + + /* Initialize the object formats */ + osync_format_env_objformat_initialize(env, error); osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; + +error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; } void osync_format_env_register_objformat(OSyncFormatEnv *env, OSyncObjFormat *format) Modified: trunk/opensync/format/opensync_format_env_internals.h ============================================================================== --- trunk/opensync/format/opensync_format_env_internals.h Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_format_env_internals.h Sun Jan 4 01:02:48 2009 (r4980) @@ -109,6 +109,22 @@ */ OSYNC_TEST_EXPORT OSyncCustomFilter *osync_format_env_nth_filter(OSyncFormatEnv *env, int nth); + +/** @brief Initialize all object formats of the format environment + * + * @param env The format environment + * @param error Pointer to an error struct, which get set on any error intialize error + * + */ +OSYNC_TEST_EXPORT void osync_format_env_objformat_initialize(OSyncFormatEnv *env, OSyncError **error); + +/** @brief Finalize all object fromats of the format environment + * + * @param env The format environment + * + */ +OSYNC_TEST_EXPORT void osync_format_env_objformat_finalize(OSyncFormatEnv *env); + /*@}*/ #endif /* _OPENSYNC_FORMAT_ENV_INTERNALS_H_ */ Modified: trunk/opensync/format/opensync_objformat.c ============================================================================== --- trunk/opensync/format/opensync_objformat.c Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_objformat.c Sun Jan 4 01:02:48 2009 (r4980) @@ -81,22 +81,56 @@ osync_bool osync_objformat_is_equal(OSyncObjFormat *leftformat, OSyncObjFormat *rightformat) { - osync_assert(leftformat); - osync_assert(rightformat); + osync_return_val_if_fail(leftformat, FALSE); + osync_return_val_if_fail(rightformat, FALSE); return (!strcmp(leftformat->name, rightformat->name)) ? TRUE : FALSE; } -void osync_objformat_set_compare_func(OSyncObjFormat *format, OSyncFormatCompareFunc cmp_func) +void osync_objformat_set_initialize_func(OSyncObjFormat *format, OSyncFormatInitializeFunc initialize_func) +{ + osync_return_if_fail(format); + format->initialize_func = initialize_func; +} + +osync_bool osync_objformat_initialize(OSyncObjFormat *format, OSyncError **error) { osync_assert(format); + + /* Just return, if no initialize_func is registered */ + osync_return_val_if_fail(format->initialize_func, TRUE); + + format->user_data = format->initialize_func(error); + + if (osync_error_is_set(error)) + return FALSE; + + return TRUE; +} + +void osync_objformat_set_finalize_func(OSyncObjFormat *format, OSyncFormatFinalizeFunc finalize_func) +{ + osync_return_if_fail(format); + format->finalize_func = finalize_func; +} + +void osync_objformat_finalize(OSyncObjFormat *format) +{ + osync_return_if_fail(format); + osync_return_if_fail(format->finalize_func); + format->finalize_func(format->user_data); +} + +void osync_objformat_set_compare_func(OSyncObjFormat *format, OSyncFormatCompareFunc cmp_func) +{ + osync_return_if_fail(format); format->cmp_func = cmp_func; } OSyncConvCmpResult osync_objformat_compare(OSyncObjFormat *format, const char *leftdata, unsigned int leftsize, const char *rightdata, unsigned int rightsize) { - osync_assert(format); - osync_assert(format->cmp_func); + osync_return_val_if_fail(format, OSYNC_CONV_DATA_UNKNOWN); + osync_return_val_if_fail(format->cmp_func, OSYNC_CONV_DATA_UNKNOWN); return format->cmp_func(leftdata, leftsize, rightdata, rightsize); } Modified: trunk/opensync/format/opensync_objformat.h ============================================================================== --- trunk/opensync/format/opensync_objformat.h Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_objformat.h Sun Jan 4 01:02:48 2009 (r4980) @@ -30,6 +30,9 @@ */ /*@{*/ +typedef void * (* OSyncFormatInitializeFunc) (OSyncError **error); +typedef void (* OSyncFormatFinalizeFunc) (void *userdata); + typedef OSyncConvCmpResult (* OSyncFormatCompareFunc) (const char *leftdata, unsigned int leftsize, const char *rightdata, unsigned int rightsize); typedef osync_bool (* OSyncFormatCopyFunc) (const char *input, unsigned int inpsize, char **output, unsigned int *outpsize, OSyncError **error); typedef osync_bool (* OSyncFormatDuplicateFunc) (const char *uid, const char *input, unsigned int insize, char **newuid, char **output, unsigned int *outsize, osync_bool *dirty, OSyncError **error); @@ -93,6 +96,31 @@ OSYNC_EXPORT time_t osync_objformat_get_revision(OSyncObjFormat *format, const char *data, unsigned int size, OSyncError **error); /** + * @brief Sets the optional initialize function for an object format + * + * The initialize function can be used to allocate internal structures or other + * required data, which get passed as void pointer to each object format plugin + * call. + * + * This option set require that also a finalize function get set. + * + * @param format Pointer to the object format + * @param initialize_func The initialize function to use + */ +OSYNC_EXPORT void osync_objformat_set_initialize_func(OSyncObjFormat *format, OSyncFormatInitializeFunc initialize_func); + +/** + * @brief Sets the optional finalize function for an object format + * + * The finalize function has to be use to release memory which got allocated + * with the object format initialize function. + * + * @param format Pointer to the object format + * @param finalize_func The finalize function to use + */ +OSYNC_EXPORT void osync_objformat_set_finalize_func(OSyncObjFormat *format, OSyncFormatFinalizeFunc finalize_func); + +/** * @brief Sets the optional compare function for an object format * * The compare function can be used to compare two objects in your object Modified: trunk/opensync/format/opensync_objformat_internals.h ============================================================================== --- trunk/opensync/format/opensync_objformat_internals.h Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_objformat_internals.h Sun Jan 4 01:02:48 2009 (r4980) @@ -29,6 +29,30 @@ /*@{*/ /** + * @brief Initialize an object format + * + * Call the object format specific initialize function. If no finalize function for + * this object format got registered this function is NOOP. + * + * Functions returns FALSE when error by the initialize_func call get set. + * + * @param format Pointer to the object format + * @param error Pointer to error struct, which get failed when initialization fails + * @returns TRUE on success, FALSE otherwise + */ +OSYNC_TEST_EXPORT osync_bool osync_objformat_initialize(OSyncObjFormat *format, OSyncError **error); + +/** + * @brief Finalize an object format + * + * Call the finalize function of an object format. If no finalize function for + * this object format got registered this function is NOOP. + * + * @param format Pointer to the object format + */ +OSYNC_TEST_EXPORT void osync_objformat_finalize(OSyncObjFormat *format); + +/** * @brief Compares two objects of the same object format * * Compares two objects of the same object format using the format's compare function Modified: trunk/opensync/format/opensync_objformat_private.h ============================================================================== --- trunk/opensync/format/opensync_objformat_private.h Sun Jan 4 00:06:58 2009 (r4979) +++ trunk/opensync/format/opensync_objformat_private.h Sun Jan 4 01:02:48 2009 (r4980) @@ -43,6 +43,14 @@ * would be "contact" */ char *objtype_name; + /** userdata pointer returned by initialize_func */ + void *user_data; + + /** Initialize format plugin function */ + OSyncFormatInitializeFunc initialize_func; + /** Finalize format plugin function */ + OSyncFormatFinalizeFunc finalize_func; + OSyncFormatCompareFunc cmp_func; OSyncFormatDuplicateFunc duplicate_func; OSyncFormatCopyFunc copy_func; @@ -60,3 +68,4 @@ /*@}*/ #endif /* _OPENSYNC_OBJFORMAT_PRIVATE_H_ */ + |
From: <dg...@su...> - 2009-01-03 23:07:16
|
Author: henrik Date: Sun Jan 4 00:06:58 2009 New Revision: 4979 URL: http://www.opensync.org/changeset/4979 Log: Use --always-accept-forecast on sync following OpenSync -r4905 for osynctool 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 3 20:01:06 2009 (r4978) +++ plugins/mozilla-sync/trunk/tests/blackbox_test_common.shinc.in Sun Jan 4 00:06:58 2009 (r4979) @@ -258,7 +258,7 @@ # ---------------------------------------------------------------------- msync_sync () { GROUP_NAME="$1" - msync --sync "${GROUP_NAME}" --conflict i || + msync --sync "${GROUP_NAME}" --always-accept-forecast --conflict i || error_exit "Synchronization failed for [${STEP}]" $? } |
From: <dg...@su...> - 2009-01-03 19:01:22
|
Author: bricks Date: Sat Jan 3 20:01:06 2009 New Revision: 4978 URL: http://www.opensync.org/changeset/4978 Log: Link opensync and glib to xmlformat Modified: format-plugins/xmlformat/trunk/src/CMakeLists.txt Modified: format-plugins/xmlformat/trunk/src/CMakeLists.txt ============================================================================== --- format-plugins/xmlformat/trunk/src/CMakeLists.txt Sat Jan 3 19:56:24 2009 (r4977) +++ format-plugins/xmlformat/trunk/src/CMakeLists.txt Sat Jan 3 20:01:06 2009 (r4978) @@ -3,6 +3,8 @@ OPENSYNC_FORMAT_ADD( xmlformat xmlformat.c xmlformat_compare.c xmlformat_merge.c ) +TARGET_LINK_LIBRARIES( xmlformat ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ) + # Required for UNITTESTING only ADD_LIBRARY( xmlformat-compare STATIC xmlformat_compare.c ) |
From: <dg...@su...> - 2009-01-03 18:56:42
|
Author: Graham Cobb Date: Sat Jan 3 19:56:24 2009 New Revision: 4977 URL: http://www.opensync.org/changeset/4977 Log: gpe-sync: changes for 0.39 API Modified: plugins/gpe/CMakeLists.txt plugins/gpe/ChangeLog plugins/gpe/src/CMakeLists.txt plugins/gpe/src/calendar.c plugins/gpe/src/contacts.c plugins/gpe/src/gpe-sync plugins/gpe/src/gpe_sync.c plugins/gpe/src/gpe_sync.h plugins/gpe/src/todo.c plugins/gpe/src/utils.c Modified: plugins/gpe/CMakeLists.txt ============================================================================== --- plugins/gpe/CMakeLists.txt Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/CMakeLists.txt Sat Jan 3 19:56:24 2009 (r4977) @@ -5,6 +5,7 @@ SET( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules" ) SET( OPENSYNC_MIN_VERSION "0.37" ) +CMAKE_MINIMUM_REQUIRED( VERSION 2.4.4 ) FIND_PACKAGE( OpenSync REQUIRED ) FIND_PACKAGE( GLIB2 REQUIRED ) Modified: plugins/gpe/ChangeLog ============================================================================== --- plugins/gpe/ChangeLog Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/ChangeLog Sat Jan 3 19:56:24 2009 (r4977) @@ -1,3 +1,56 @@ +2009-01-03 Graham Cobb <g+...@co...> + + * src/gpe_sync.c (discover): Only parse config during discover phase. + (save_environment): Save/restore environment using anchor DB. + (initialize): Restore environment + (discover): Save environment + +2009-01-02 Graham Cobb <g+...@co...> + + * CMakeLists.txt: Add CMAKE_MINIMUM_REQUIRED. + + * src/gpe-sync: Add <ActiveConnection> to config. + + * src/gpe_sync.c (gpe_connect, and others): Get userdata using osync_plugin_info_get_sink. + +2008-08-02 Graham Cobb <g+...@co...> + + * src/gpe-sync: Change for new config format. + + * src/gpe_xml.h, src/gpe_xml.c: Remove modules - config parsing now handled by OpenSync + and validation moved to gpe_sync.c. + + * src/gpe_sync.h: Remove format from sink_environment. Remove references to gpe_xml.h. + Add temporary macros for mis-spelt OSyncResource items + + * src/contacts.c (gpe_contacts_setup): Implement new config and objtype API. Find contacts sink. + + * src/calendar.c (gpe_calendar_setup): Implement new config and objtype API. Find events sink. + + * src/todo.c (gpe_todo_setup): Implement new config and objtype API. Find todo sink. + + * src/gpe_sync.c (initialize): Implement new config and objtype API. + (gpe_parse_settings): Create local function to fetch and validate config settings + + * src/utils.c (report_change): Implement hashtable API changes: remove osync_hashtable_report, + osync_hashtable_update_change + (report_deleted): Implement hashtable API changes: osync_hashtable_update_change + + * src/todo.c (gpe_todo_setup): Implement hashtable API changes: osync_hashtable_load + (gpe_todo_get_changes): Implement hashtable API changes: remove osync_hashtable_reset_reports + (gpe_todo_commit_change): Implement hashtable API changes: osync_hashtable_update_change + + * src/contacts.c (gpe_contacts_setup): Implement hashtable API changes: osync_hashtable_load + (gpe_contacts_get_changes): Implement hashtable API changes: remove osync_hashtable_reset_reports + (gpe_contacts_commit_change): Implement hashtable API changes: osync_hashtable_update_change + + * src/calendar.c (gpe_calendar_setup): Implement hashtable API changes: osync_hashtable_load + (gpe_calendar_get_changes): Implement hashtable API changes: remove osync_hashtable_reset_reports + (gpe_calendar_commit_change): Implement hashtable API changes: osync_hashtable_update_change + + * src/gpe_sync.c (free_sink): Implement hashtable API changes: osync_hashtable_unref + (sync_done): Implement hashtable API changes: osync_hashtable_save + 2008-06-04 Graham Cobb <g+...@co...> * src/utils.c (report_deleted): new result from osync_hashtable_get_deleted Modified: plugins/gpe/src/CMakeLists.txt ============================================================================== --- plugins/gpe/src/CMakeLists.txt Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/CMakeLists.txt Sat Jan 3 19:56:24 2009 (r4977) @@ -7,7 +7,6 @@ calendar.c contacts.c todo.c -gpe_xml.c gpesync_client.c utils.c ) Modified: plugins/gpe/src/calendar.c ============================================================================== --- plugins/gpe/src/calendar.c Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/calendar.c Sat Jan 3 19:56:24 2009 (r4977) @@ -81,8 +81,7 @@ osync_change_set_uid (change, g_strdup (buf)); } osync_change_set_hash (change, modified); - osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change), - osync_change_get_uid(change), modified); + osync_hashtable_update_change (sinkenv->hashtable, change); osync_context_report_success(ctx); } else { @@ -116,10 +115,6 @@ gpe_environment *env = (gpe_environment *)userdata; sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info)); - /* Reset internal list of hashtable report, so we can detect - deleted entries */ - osync_hashtable_reset_reports(sinkenv->hashtable); - if (osync_objtype_sink_get_slowsync(sinkenv->sink)) { osync_trace(TRACE_INTERNAL, "Slow sync requested"); if (!osync_hashtable_slowsync(sinkenv->hashtable, &error)) { @@ -221,12 +216,14 @@ g_free(tablepath); if (!sinkenv->hashtable) goto error; - // Note: caller responsible for freeing sink on any error - sinkenv->sink = osync_objtype_sink_new("event", error); - if (!sinkenv->sink) goto error; + if (!osync_hashtable_load(sinkenv->hashtable, error)) goto error; - sinkenv->format = "vevent20"; - osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format); + // Find sink + sinkenv->sink = osync_plugin_info_find_objtype(info, "event"); + if (!sinkenv->sink) { + osync_trace(TRACE_INTERNAL, "Note: no event sink configured"); + goto exit; // No event sink configured. Not an error. + } OSyncObjTypeSinkFunctions functions; memset(&functions, 0, sizeof(functions)); @@ -234,18 +231,9 @@ functions.commit = gpe_calendar_commit_change; osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv); - osync_plugin_info_add_objtype(info, sinkenv->sink); - - OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); - sinkenv->objformat = osync_format_env_find_objformat(formatenv, sinkenv->format); - if (!sinkenv->objformat) { - osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format %s", sinkenv->format); - osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format %s", __func__, sinkenv->format); - goto error; - } - sinkenv->gpe_env = env; + exit: osync_trace(TRACE_EXIT, "GPE-SYNC %s: TRUE", __func__); return TRUE; error: Modified: plugins/gpe/src/contacts.c ============================================================================== --- plugins/gpe/src/contacts.c Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/contacts.c Sat Jan 3 19:56:24 2009 (r4977) @@ -81,8 +81,7 @@ osync_change_set_uid (change, g_strdup (buf)); } osync_change_set_hash (change, modified); - osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change), - osync_change_get_uid(change), modified); + osync_hashtable_update_change (sinkenv->hashtable, change); osync_context_report_success(ctx); } else { @@ -116,10 +115,6 @@ gpe_environment *env = (gpe_environment *)userdata; sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info)); - /* Reset internal list of hashtable report, so we can detect - deleted entries */ - osync_hashtable_reset_reports(sinkenv->hashtable); - if (osync_objtype_sink_get_slowsync(sinkenv->sink)) { osync_trace(TRACE_INTERNAL, "Slow sync requested"); if (!osync_hashtable_slowsync(sinkenv->hashtable, &error)) { @@ -220,12 +215,14 @@ g_free(tablepath); if (!sinkenv->hashtable) goto error; - // Note: caller responsible for freeing sink on any error - sinkenv->sink = osync_objtype_sink_new("contact", error); - if (!sinkenv->sink) goto error; + if (!osync_hashtable_load(sinkenv->hashtable, error)) goto error; - sinkenv->format = "vcard30"; - osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format); + // Find sink + sinkenv->sink = osync_plugin_info_find_objtype(info, "contact"); + if (!sinkenv->sink) { + osync_trace(TRACE_INTERNAL, "Note: no contact sink configured"); + goto exit; // No contact sink configured. Not an error. + } OSyncObjTypeSinkFunctions functions; memset(&functions, 0, sizeof(functions)); @@ -233,18 +230,9 @@ functions.commit = gpe_contacts_commit_change; osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv); - osync_plugin_info_add_objtype(info, sinkenv->sink); - - OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); - sinkenv->objformat = osync_format_env_find_objformat(formatenv, sinkenv->format); - if (!sinkenv->objformat) { - osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format %s", sinkenv->format); - osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format %s", __func__, sinkenv->format); - goto error; - } - sinkenv->gpe_env = env; + exit: osync_trace(TRACE_EXIT, "GPE-SYNC %s: TRUE", __func__); return TRUE; error: Modified: plugins/gpe/src/gpe-sync ============================================================================== --- plugins/gpe/src/gpe-sync Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/gpe-sync Sat Jan 3 19:56:24 2009 (r4977) @@ -1,70 +1,108 @@ <?xml version="1.0"?> <config> + <AdvancedOptions> + <AdvancedOption> + <DisplayName>Command</DisplayName> + <MaxOccurs>1</MaxOccurs> + <Name>command</Name> + <Type>char</Type> + <Value>gpesyncd --remote</Value> + </AdvancedOption> + <AdvancedOption> + <DisplayName>Debug</DisplayName> + <MaxOccurs>1</MaxOccurs> + <Name>debug</Name> + <Type>ulong</Type> + <Value>0</Value> + </AdvancedOption> + </AdvancedOptions> <!-- There are three ways to connect to the GPE device: 1) You can use gpesyncd locally (if opensync is running - on the same system) by specifying the <local>...</local> option. + on the same system) by not specifying a <Connection> tag + at all. - In this case you can also specify <command>shell command</command> + In this case you can also specify the "command" advanced option to change the shell command which is invoked. However, specifying - the <command> tag is not recommended: the default command is: + the command is not recommended: the default command is: gpesyncd - -remote (note the two hyphens should be adjacent but cannot be placed together in an XML comment). - 2) You can use SSH to connect to the device by specifying the - <ssh>...</ssh> option. + 2) You can use SSH to connect to the device by specifying + <Protocol>ssh</Protocol> within the <Connection><Network> tag. - In this case, the <handheld_ip> and <handheld_user> tags can be used. + In this case, the <Address> tag can also be used. Note that the + <Address> can be a name or an address and may be associated with + a particular identify file in the ~/.ssh/config file to allow + automatic login. + + You can specify the user to use for the ssh login by specifying the + <Authentication><Username> tag. Note that for the Nokia Internet + Tablet, the username should be specified as "user". - Note that the handheld_ip can be a name or an address and may be - associated with a particular identify file in the ~/.ssh/config - file to allow automatic login. - - Also note that for the Nokia Internet Tablet, the handheld_user - should be specified as "user". - - In this case you can also specify <command>shell command</command> + In this case you can also specify the "command" advanced option to change the shell command which is invoked. However, specifying - the <command> tag is not recommended: the default command is: + the command is not recommended: the default command is: gpesyncd - -remote (note the two hyphens should be adjacent but cannot be placed together in an XML comment). 3) You can connect to a running gpesyncd daemon by specifying the - <remote>...</remote> option. + <Protocol>gpesyncd</Protocol> within the <Connection><Network> tag. - In this case, the <handheld_ip> and <handheld_port> tags can be used. + In this case, the <Address> and <Port> tags can also be used. - Either customise the <ssh> configuration shown below or remove it and uncomment + Either customise the ssh configuration shown below or remove it and uncomment one of the other sections. Each section is configured to show the default values used if the tags are not specified. --> - <ssh> - <handheld_ip>127.0.0.1</handheld_ip> - <handheld_user>gpeuser</handheld_user> - </ssh> - <!-- - <local> - </local> + <Authentication><Username>gpeuser</Username></Authentication> + <Connection><ActiveConnection>Network</ActiveConnection> + <Network> + <Address>127.0.0.1</Address> + <Protocol>ssh</Protocol> + </Network> + </Connection> + <!-- for local access, specify nothing --> - <!-- - <remote> - <handheld_ip>127.0.0.1</handheld_ip> - <handheld_port>6446</handheld_port> - </remote> + <!-- for remote gpesyncd access: + <Connection><ActiveConnection>Network</ActiveConnection> + <Network> + <Address>127.0.0.1</Address> + <Port>6446</Port> + <Protocol>gpesyncd</Protocol> + </Network> + </Connection> --> <!-- - The <calendar> tag can be used to specify which GPE calendar - should be used for this synchronisation. If the <calendar> - tag is specified then only the named calendar is considered - (only events in that calendar wil be sent from GPE and all - events sent to GPE will be stored in that calendar). If the - <calendar> tag is not specified, then all events, from all - calendars, will be sent from GPE and new events will be created - in the default calendar. + The <Path> tag within the <Resource> tag with name "vevent20" + can be used to specify which GPE calendar should be used for + this synchronisation. If the tag is specified then only the + named calendar is considered (only events in that calendar will + be sent from GPE and all events sent to GPE will be stored in + that calendar). If the tag is not specified, then all events, + from all calendars, will be sent from GPE and new events will + be created in the default calendar. Note that an error occurs if the named calendar does not exist. Also note that calendar names are case-sensitive. --> - <!-- <calendar>Some Calendar</calendar> --> + <Resources> + <Resource> + <Enabled>1</Enabled> + <Name>vevent20</Name> + <ObjType>event</ObjType> + <!-- <Path>Some Calendar</Path> --> + </Resource> + <Resource> + <Enabled>1</Enabled> + <Name>vcard30</Name> + <ObjType>contact</ObjType> + </Resource> + <Resource> + <Enabled>1</Enabled> + <Name>vtodo20</Name> + <ObjType>todo</ObjType> + </Resource> + </Resources> </config> Modified: plugins/gpe/src/gpe_sync.c ============================================================================== --- plugins/gpe/src/gpe_sync.c Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/gpe_sync.c Sat Jan 3 19:56:24 2009 (r4977) @@ -21,6 +21,77 @@ #include "gpe_sync.h" +/* Save and restore environment data */ +static void save_environment(gpe_environment *env, OSyncPluginInfo *info) +{ + char buf[20]; + + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p)", __func__, env, info); + + /* We save the fields in the Anchor DB */ + char *anchorpath = g_strdup_printf("%s/anchor.db", osync_plugin_info_get_configdir(info)); + + /* For sinks we just need to save the objformat name */ + if (env->contact_sink.objformat) osync_anchor_update(anchorpath, "EnvContactSinkObjFormat", osync_objformat_get_name(env->contact_sink.objformat)); + if (env->todo_sink.objformat) osync_anchor_update(anchorpath, "EnvTodoSinkObjFormat", osync_objformat_get_name(env->todo_sink.objformat)); + if (env->calendar_sink.objformat) osync_anchor_update(anchorpath, "EnvCalendarSinkObjFormat", osync_objformat_get_name(env->calendar_sink.objformat)); + + /* Config info */ + if (env->device_addr) osync_anchor_update(anchorpath, "EnvDeviceAddr", env->device_addr); + if (env->username) osync_anchor_update(anchorpath, "EnvUsername", env->username); + if (env->command) osync_anchor_update(anchorpath, "EnvCommand", env->command); + snprintf(buf, sizeof(buf), "%d", env->device_port); + osync_anchor_update(anchorpath, "EnvDevicePort", buf); + snprintf(buf, sizeof(buf), "%d", env->use_ssh); + osync_anchor_update(anchorpath, "EnvUseSsh", buf); + snprintf(buf, sizeof(buf), "%d", env->use_local); + osync_anchor_update(anchorpath, "EnvUseLocal", buf); + snprintf(buf, sizeof(buf), "%d", env->use_remote); + osync_anchor_update(anchorpath, "EnvUseRemote", buf); + if (env->calendar) osync_anchor_update(anchorpath, "EnvCalendar", env->calendar); + snprintf(buf, sizeof(buf), "%d", env->debuglevel); + osync_anchor_update(anchorpath, "EnvDebuglevel", buf); + + g_free(anchorpath); + osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); +} +static void restore_environment(gpe_environment *env, OSyncPluginInfo *info) +{ + char *value; + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p)", __func__, env, info); + + /* We save the fields in the Anchor DB */ + char *anchorpath = g_strdup_printf("%s/anchor.db", osync_plugin_info_get_configdir(info)); + + /* For sinks we just need to restore the objformat */ + OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); + value = osync_anchor_retrieve(anchorpath, "EnvContactSinkObjFormat"); + if (value) env->contact_sink.objformat = osync_format_env_find_objformat(formatenv, value); + value = osync_anchor_retrieve(anchorpath, "EnvTodoSinkObjFormat"); + if (value) env->todo_sink.objformat = osync_format_env_find_objformat(formatenv, value); + value = osync_anchor_retrieve(anchorpath, "EnvCalendarSinkObjFormat"); + if (value) env->calendar_sink.objformat = osync_format_env_find_objformat(formatenv, value); + + /* Config info */ + env->device_addr = osync_anchor_retrieve(anchorpath, "EnvDeviceAddr"); + env->username = osync_anchor_retrieve(anchorpath, "EnvUsername"); + env->command = osync_anchor_retrieve(anchorpath, "EnvCommand"); + value = osync_anchor_retrieve(anchorpath, "EnvDevicePort"); + if (value) env->device_port = atoi(value); + value = osync_anchor_retrieve(anchorpath, "EnvUseSsh"); + if (value) env->use_ssh = atoi(value); + value = osync_anchor_retrieve(anchorpath, "EnvUseLocal"); + if (value) env->use_local = atoi(value); + value = osync_anchor_retrieve(anchorpath, "EnvUseRemote"); + if (value) env->use_remote = atoi(value); + env->calendar = osync_anchor_retrieve(anchorpath, "EnvCalendar"); + value = osync_anchor_retrieve(anchorpath, "EnvDebuglevel"); + if (value) env->debuglevel = atoi(value); + + g_free(anchorpath); + osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); +} + /*! \brief Closes the connection to the databases * * \brief ctx The context of the plugin @@ -36,9 +107,11 @@ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); } -static void gpe_disconnect(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx) +static void gpe_disconnect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) { - osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx); + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, data, info, ctx); + OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); + void *userdata = (sink_environment *)osync_objtype_sink_get_userdata(sink); gpe_environment *env = ((sink_environment *)userdata)->gpe_env; gpe_disconnect_internal(env); @@ -74,13 +147,15 @@ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); } -static void gpe_connect(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx) +static void gpe_connect(void *data, OSyncPluginInfo *info, OSyncContext *ctx) { char *client_err = NULL; - osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx); + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, data, info, ctx); // We need to get the context to load all our stuff. + OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); + void *userdata = (sink_environment *)osync_objtype_sink_get_userdata(sink); gpe_environment *env = ((sink_environment *)userdata)->gpe_env; gpe_connect_internal(env, &client_err); @@ -118,23 +193,40 @@ * * \param ctx The context of the plugin */ -static void sync_done(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx) +static void sync_done(void *data, OSyncPluginInfo *info, OSyncContext *ctx) { - osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, ctx); - //gpe_environment *env = ((sink_environment *)userdata)->gpe_env; + OSyncError *error = NULL; + + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, data, info, ctx); + OSyncObjTypeSink *sink = osync_plugin_info_get_sink(info); + void *userdata = (sink_environment *)osync_objtype_sink_get_userdata(sink); + gpe_environment *env = ((sink_environment *)userdata)->gpe_env; //If we use anchors we have to update it now. + + // Save hashtables + if (!osync_hashtable_save(env->contact_sink.hashtable, &error)) + goto error; + if (!osync_hashtable_save(env->todo_sink.hashtable, &error)) + goto error; + if (!osync_hashtable_save(env->calendar_sink.hashtable, &error)) + goto error; //Answer the call osync_context_report_success(ctx); osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); + return; + +error: + osync_context_report_osyncerror(ctx, error); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: %s", __func__, osync_error_print(&error)); + osync_error_unref(&error); } static void free_sink(sink_environment *sinkenv) { - if (sinkenv->sink) osync_objtype_sink_unref(sinkenv->sink); sinkenv->sink = NULL; - if (sinkenv->hashtable) osync_hashtable_free(sinkenv->hashtable); + if (sinkenv->hashtable) osync_hashtable_unref(sinkenv->hashtable); sinkenv->hashtable = NULL; } @@ -164,6 +256,144 @@ osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); } +/*! \brief Fetches the configuration data and validates it + * + * \param env The GPE plugin environment + * \param info The Opensync plugin info + * \param error If an error occurs it will be stored here + */ +static osync_bool gpe_parse_settings(gpe_environment *env, OSyncPluginInfo *info, OSyncError **error) +{ + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, env, info, error); + + // Set the defaults + env->device_port = 6446; + env->username = g_strdup("user"); + env->command = g_strdup("gpesyncd --remote"); + env->use_ssh = 0; + env->use_local = 0; + env->use_remote = 0; + env->debuglevel = 0; + env->calendar = NULL; + + OSyncPluginConfig *config = osync_plugin_info_get_config(info); + if (!config) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get config data."); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: Unable to get config data.", __func__); + goto error; + } + + // Find the connection info + OSyncPluginConnection *conn = osync_plugin_config_get_connection(config); + if (!conn) { + env->use_local = 1; + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: protocol = local", __func__); + } else { + // Check this is a network connection + if (osync_plugin_connection_get_type(conn) != OSYNC_PLUGIN_CONNECTION_NETWORK) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "connection must be of type NETWORK"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: connection must be of type NETWORK", __func__); + goto error; + } + + // Find the protocol + const char *prot = osync_plugin_connection_net_get_protocol(conn); + if (!prot) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "network connection protocol must be specified as SSH or GPESYNCD"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: network connection protocol must be specified as SSH or GPESYNCD", __func__); + goto error; + } + if (g_ascii_strcasecmp(prot, "ssh") == 0) { + env->use_ssh = 1; + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: protocol = ssh", __func__); + } else if (g_ascii_strcasecmp(prot, "gpesyncd") == 0) { + env->use_remote = 1; + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: protocol = gpesyncd", __func__); + } else { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "network connection protocol (%s) must be SSH or GPESYNCD", prot); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: network connection protocol (%s) must be SSH or GPESYNCD", __func__, prot); + goto error; + } + + // Hostname + const char *addr = osync_plugin_connection_net_get_address(conn); + if (!addr) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "hostname must be specified"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: hostname must be specified", __func__); + goto error; + } + env->device_addr = g_strdup(addr); + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: device_addr = %s", __func__, env->device_addr); + + int port = osync_plugin_connection_net_get_port(conn); + if (port) { + if (! env->use_remote) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "port number can only be specified if protocol is GPESYNCD"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: port number can only be specified if protocol is GPESYNCD", __func__); + goto error; + } + env->device_port = port; + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: device_port = %d", __func__, env->device_port); + } + + if (osync_plugin_connection_net_get_dnssd(conn)) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "service name cannot be specified"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: service name cannot be specified", __func__); + goto error; + } + } + + // Username + OSyncPluginAuthentication *auth = osync_plugin_config_get_authentication(config); + if (auth) { + const char *user = osync_plugin_authentication_get_username(auth); + if (user) { + if (!env->use_ssh) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "username can only be specified if protocol is SSH"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: username can only be specified if protocol is SSH", __func__); + goto error; + } + g_free(env->username); + env->username = g_strdup(user); + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: username = %s", __func__, env->username); + } + } + + // Command + const char *command = osync_plugin_config_get_advancedoption_value_by_name(config, "command"); + if (command) { + if (!env->use_local && !env->use_ssh) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "command can only be specified if protocol is SSH or lOCAL"); + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: command can only be specified if protocol is SSH or LOCAL", __func__); + goto error; + } + g_free(env->command); + env->command = g_strdup(command); + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: command = %s", __func__, env->command); + } + + // Debug + const char *debug = osync_plugin_config_get_advancedoption_value_by_name(config, "debug"); + if (debug) { + env->debuglevel = atoi(debug); + osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: debug = %d", __func__, env->debuglevel); + } + + // Calendar name + OSyncPluginResource *resource = osync_plugin_config_find_active_resource(config, "vevent20"); + if (resource) { + // Is calendar name specified? + env->calendar = osync_plugin_resource_get_path(resource); + if (env->calendar) osync_trace(TRACE_INTERNAL, "GPE-SYNC %s: calendar = %d", __func__, env->calendar); + } + + osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); + return TRUE; + + error: + return FALSE; +} + /*! \brief Initializes the plugin (needed for opensync) * * \param member The member of the sync pair @@ -179,21 +409,7 @@ if (!env) goto error; - //now you can get the config file for this plugin - configdata = osync_plugin_info_get_config(info); - if (!configdata) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get config data."); - goto error_free_env; - } - - osync_trace(TRACE_INTERNAL, "GPE-SYNC configdata: %s", configdata); - - if (!gpe_parse_settings(env, configdata)) { - osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Unable to parse plugin configuration for gpe plugin"); - goto error_free_env; - } - - env->client = NULL; + restore_environment(env, info); // Create the main sink (which handles connect & disconnect) env->main_sink.sink = osync_objtype_main_sink_new(error); @@ -233,15 +449,18 @@ } /* Here we actually tell opensync which sinks are available. */ -static osync_bool discover(void *userdata, OSyncPluginInfo *info, OSyncError **error) +static osync_bool discover(void *data, OSyncPluginInfo *info, OSyncError **error) { gchar *err_string = NULL; gchar *response = NULL; unsigned int v_major = 1, v_minor = 0, v_edit = 0; // Default version 1.0.0 - osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, userdata, info, error); + osync_trace(TRACE_ENTRY, "GPE-SYNC %s(%p, %p, %p)", __func__, data, info, error); + + gpe_environment *env = (gpe_environment *)data; - gpe_environment *env = (gpe_environment *)userdata; + // Get config + if (!gpe_parse_settings(env, info, error)) goto error; // Try to connect gpe_connect_internal(env, &err_string); @@ -249,17 +468,14 @@ if (env->client == NULL) { osync_error_set(error, OSYNC_ERROR_NO_CONNECTION, err_string); osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: connect failed: %s", __func__, err_string); - if (err_string) g_free(err_string); - return FALSE; + goto error; } // Get version info from the device if (gpesync_client_exec(env->client, "version", client_callback_string, &response, &err_string) != 0) { osync_error_set(error, OSYNC_ERROR_NO_CONNECTION, err_string); osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: sending version command failed: %s", __func__, err_string); - if (err_string) g_free(err_string); - gpe_disconnect_internal(env); - return FALSE; + goto error; } if (sscanf(response, "OK:%u:%u:%u", &v_major, &v_minor, &v_edit) != 3) { @@ -272,9 +488,7 @@ v_major, v_minor, MIN_PROTOCOL_MAJOR, MIN_PROTOCOL_MINOR); osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: gpesyncd version %d.%d not supported -- require %d.%d", __func__, v_major, v_minor, MIN_PROTOCOL_MAJOR, MIN_PROTOCOL_MINOR); - gpe_disconnect_internal(env); - g_free(response); - return FALSE; + goto error; } gchar *version_string = g_strdup_printf("%d.%d.%d", v_major, v_minor, v_edit); @@ -291,13 +505,11 @@ if (env->calendar) { // Calendar support requires at least version 1.2 if (v_minor < 2) { - osync_error_set(error, OSYNC_ERROR_NOT_SUPPORTED, "gpesyncd version %d.%d does not support <calendar> -- require %d.%d", + osync_error_set(error, OSYNC_ERROR_NOT_SUPPORTED, "gpesyncd version %d.%d does not support specifying the path in the event resource -- require %d.%d", v_major, v_minor, MIN_PROTOCOL_MAJOR, 2); - osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: gpesyncd version %d.%d does not support <calendar> -- require %d.%d", + osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: gpesyncd version %d.%d does not support specifying the path in the event resource -- require %d.%d", __func__, v_major, v_minor, MIN_PROTOCOL_MAJOR, 2); - gpe_disconnect_internal(env); - g_free(response); - return FALSE; + goto error; } // Verify calendar name @@ -307,11 +519,34 @@ env->calendar); osync_trace(TRACE_EXIT_ERROR, "GPE-SYNC %s: calendar %s not found", __func__, env->calendar); - gpe_disconnect_internal(env); - g_free(response); + goto error; } } + // Set objformats (could be dependent on version info in future) + OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); + + env->contact_sink.objformat = osync_format_env_find_objformat(formatenv, "vcard30"); + if (!env->contact_sink.objformat) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format vcard30"); + osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format vcard30", __func__); + goto error; + } + + env->todo_sink.objformat = osync_format_env_find_objformat(formatenv, "vtodo20"); + if (!env->todo_sink.objformat) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format vtodo20"); + osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format vtodo20", __func__); + goto error; + } + + env->calendar_sink.objformat = osync_format_env_find_objformat(formatenv, "vevent20"); + if (!env->calendar_sink.objformat) { + osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format vevent20"); + osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format vevent20", __func__); + goto error; + } + // Report available sinks... // GPE always supports contacts, todos and events if (env->contact_sink.sink) osync_objtype_sink_set_available(env->contact_sink.sink, TRUE); @@ -321,9 +556,18 @@ gpe_disconnect_internal(env); + save_environment(env, info); + g_free(response); osync_trace(TRACE_EXIT, "GPE-SYNC %s", __func__); return TRUE; + + error: + if (env->client) gpe_disconnect_internal(env); + if (err_string) g_free(err_string); + if (response) g_free(response); + return FALSE; + } /*! \brief This function has to be in every opensync plugin Modified: plugins/gpe/src/gpe_sync.h ============================================================================== --- plugins/gpe/src/gpe_sync.h Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/gpe_sync.h Sat Jan 3 19:56:24 2009 (r4977) @@ -36,17 +36,12 @@ #include <opensync/opensync-helper.h> #include <opensync/opensync-version.h> -// this is needed for gpe_xml.c: -#include <libxml/parser.h> -#include <libxml/xpath.h> - #include "gpesync_client.h" typedef struct sink_environment { OSyncObjTypeSink *sink; - OSyncObjFormat *objformat; + OSyncObjFormat *objformat; OSyncHashTable *hashtable; - char *format; struct gpe_environment *gpe_env; } sink_environment; @@ -77,7 +72,6 @@ #include "contacts.h" #include "calendar.h" #include "todo.h" -#include "gpe_xml.h" #define GPE_CONNECT_ERROR 1 #define GPE_SQL_EXEC_ERROR 2 Modified: plugins/gpe/src/todo.c ============================================================================== --- plugins/gpe/src/todo.c Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/todo.c Sat Jan 3 19:56:24 2009 (r4977) @@ -81,8 +81,7 @@ osync_change_set_uid (change, g_strdup(buf)); } osync_change_set_hash (change, modified); - osync_hashtable_update_hash (sinkenv->hashtable, osync_change_get_changetype(change), - osync_change_get_uid(change), modified); + osync_hashtable_update_change (sinkenv->hashtable, change); osync_context_report_success(ctx); } else { @@ -117,10 +116,6 @@ gpe_environment *env = (gpe_environment *)userdata; sink_environment *sinkenv = (sink_environment *)osync_objtype_sink_get_userdata(osync_plugin_info_get_sink(info)); - /* Reset internal list of hashtable report, so we can detect - deleted entries */ - osync_hashtable_reset_reports(sinkenv->hashtable); - if (osync_objtype_sink_get_slowsync(sinkenv->sink)) { osync_trace(TRACE_INTERNAL, "Slow sync requested"); if (!osync_hashtable_slowsync(sinkenv->hashtable, &error)) { @@ -220,12 +215,14 @@ g_free(tablepath); if (!sinkenv->hashtable) goto error; - // Note: caller responsible for freeing sink on any error - sinkenv->sink = osync_objtype_sink_new("todo", error); - if (!sinkenv->sink) goto error; + if (!osync_hashtable_load(sinkenv->hashtable, error)) goto error; - sinkenv->format = "vtodo20"; - osync_objtype_sink_add_objformat(sinkenv->sink, sinkenv->format); + // Find sink + sinkenv->sink = osync_plugin_info_find_objtype(info, "todo"); + if (!sinkenv->sink) { + osync_trace(TRACE_INTERNAL, "Note: no todo sink configured"); + goto exit; // No todo sink configured. Not an error. + } OSyncObjTypeSinkFunctions functions; memset(&functions, 0, sizeof(functions)); @@ -233,18 +230,9 @@ functions.commit = gpe_todo_commit_change; osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv); - osync_plugin_info_add_objtype(info, sinkenv->sink); - - OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); - sinkenv->objformat = osync_format_env_find_objformat(formatenv, sinkenv->format); - if (!sinkenv->objformat) { - osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Engine does not support format %s", sinkenv->format); - osync_trace(TRACE_ERROR, "GPE-SYNC %s: engine does not support format %s", __func__, sinkenv->format); - goto error; - } - sinkenv->gpe_env = env; + exit: osync_trace(TRACE_EXIT, "GPE-SYNC %s: TRUE", __func__); return TRUE; error: Modified: plugins/gpe/src/utils.c ============================================================================== --- plugins/gpe/src/utils.c Sat Jan 3 19:47:22 2009 (r4976) +++ plugins/gpe/src/utils.c Sat Jan 3 19:56:24 2009 (r4977) @@ -113,9 +113,8 @@ if (changetype != OSYNC_CHANGE_TYPE_UNMODIFIED) { osync_change_set_changetype(change, changetype); osync_context_report_change (ctx, change); - osync_hashtable_update_hash (sinkenv->hashtable, changetype, osync_change_get_uid(change), hash); } - osync_hashtable_report(sinkenv->hashtable, osync_change_get_uid(change)); + osync_hashtable_update_change (sinkenv->hashtable, change); osync_change_unref(change); |
Author: dgollub Date: Sat Jan 3 19:47:22 2009 New Revision: 4976 URL: http://www.opensync.org/changeset/4976 Log: Remove traces of "merger" implementation to avoid confusion. Renamed former "merger" directory to "capabilities". Adapted includes. Renamed test-fixtures directory of "merger" to "capabilities" as well. Adapated various testcases. Added: trunk/opensync/capabilities/ (props changed) - copied from r4973, trunk/opensync/merger/ trunk/opensync/capabilities/opensync-capabilities_internals.h (contents, props changed) - copied, changed from r4973, trunk/opensync/merger/opensync-merger_internals.h trunk/opensync/opensync-capabilities.h (contents, props changed) - copied, changed from r4973, trunk/opensync/opensync-merger.h trunk/tests/capabilities-tests/ (props changed) - copied from r4973, trunk/tests/merger-tests/ trunk/tests/data/capabilities/ (props changed) - copied from r4973, trunk/tests/data/merger/ Replaced: trunk/opensync/opensync-merger.h Deleted: trunk/opensync/capabilities/opensync-merger_internals.h trunk/opensync/merger/ trunk/tests/data/merger/ trunk/tests/merger-tests/ Modified: trunk/opensync/CMakeLists.txt trunk/opensync/capabilities/opensync_capabilities.c trunk/opensync/capabilities/opensync_capability.c trunk/opensync/group/opensync_member.c trunk/opensync/version/opensync_version.c trunk/tests/CMakeLists.txt trunk/tests/capabilities-tests/check_capabilities.c trunk/tests/capabilities-tests/check_xmlformat.c Modified: trunk/opensync/CMakeLists.txt ============================================================================== --- trunk/opensync/CMakeLists.txt Sat Jan 3 19:41:53 2009 (r4975) +++ trunk/opensync/CMakeLists.txt Sat Jan 3 19:47:22 2009 (r4976) @@ -5,6 +5,8 @@ SET( libopensync_LIB_SRCS archive/opensync_archive.c + capabilities/opensync_capabilities.c + capabilities/opensync_capability.c client/opensync_client.c client/opensync_client_proxy.c common/opensync.c @@ -43,8 +45,6 @@ mapping/opensync_mapping.c mapping/opensync_mapping_entry.c mapping/opensync_mapping_table.c - merger/opensync_capabilities.c - merger/opensync_capability.c module/opensync_module.c plugin/opensync_context.c plugin/opensync_plugin_advancedoptions.c @@ -98,7 +98,7 @@ helper ipc mapping - merger + capabilities module plugin version @@ -113,6 +113,7 @@ INSTALL( FILES opensync.h opensync-archive.h + opensync-capabilities.h opensync-client.h opensync-context.h opensync-common.h Copied and modified: trunk/opensync/capabilities/opensync-capabilities_internals.h (from r4973, trunk/opensync/merger/opensync-merger_internals.h) ============================================================================== --- trunk/opensync/merger/opensync-merger_internals.h Sat Jan 3 18:55:29 2009 (r4973, copy source) +++ trunk/opensync/capabilities/opensync-capabilities_internals.h Sat Jan 3 19:47:22 2009 (r4976) @@ -20,10 +20,11 @@ * */ -#ifndef OPENSYNCMERGER_INTERNALS_H_ -#define OPENSYNCMERGER_INTERNALS_H_ +#ifndef OPENSYNC_CAPABILITIES_INTERNALS_H_COLLECT +#define OPENSYNC_CAPABILITIES_INTERNALS_H_COLLECT #include "opensync_capabilities_internals.h" #include "opensync_capability_internals.h" -#endif /*OPENSYNCMERGER_INTERNALS_H_*/ +#endif /* OPENSYNC_CAPABILITIES_INTERNALS_H_COLLECT */ + Modified: trunk/opensync/capabilities/opensync_capabilities.c ============================================================================== --- trunk/opensync/merger/opensync_capabilities.c Sat Jan 3 18:55:29 2009 (r4973) +++ trunk/opensync/capabilities/opensync_capabilities.c Sat Jan 3 19:47:22 2009 (r4976) @@ -23,8 +23,8 @@ #include "opensync.h" #include "opensync_internals.h" -#include "opensync-merger.h" -#include "opensync-merger_internals.h" +#include "opensync-capabilities.h" +#include "opensync-capabilities_internals.h" #include "opensync-group.h" Modified: trunk/opensync/capabilities/opensync_capability.c ============================================================================== --- trunk/opensync/merger/opensync_capability.c Sat Jan 3 18:55:29 2009 (r4973) +++ trunk/opensync/capabilities/opensync_capability.c Sat Jan 3 19:47:22 2009 (r4976) @@ -23,8 +23,8 @@ #include "opensync.h" #include "opensync_internals.h" -#include "opensync-merger.h" -#include "opensync-merger_internals.h" +#include "opensync-capabilities.h" +#include "opensync-capabilities_internals.h" #include "opensync_capabilities_private.h" /* FIXME: include forgein private-header */ Modified: trunk/opensync/group/opensync_member.c ============================================================================== --- trunk/opensync/group/opensync_member.c Sat Jan 3 19:41:53 2009 (r4975) +++ trunk/opensync/group/opensync_member.c Sat Jan 3 19:47:22 2009 (r4976) @@ -30,7 +30,7 @@ #include "opensync_member_private.h" #include "opensync-merger.h" -#include "merger/opensync_capabilities_internals.h" +#include "capabilities/opensync-capabilities_internals.h" #include "common/opensync_xml_internals.h" Copied and modified: trunk/opensync/opensync-capabilities.h (from r4973, trunk/opensync/opensync-merger.h) ============================================================================== --- trunk/opensync/opensync-merger.h Sat Jan 3 18:55:29 2009 (r4973, copy source) +++ trunk/opensync/opensync-capabilities.h Sat Jan 3 19:47:22 2009 (r4976) @@ -18,14 +18,15 @@ * */ -#ifndef OPENSYNCMERGER_H_ -#define OPENSYNCMERGER_H_ +#ifndef OPENSYNC_CAPABILITIES_H_COLLECT +#define OPENSYNC_CAPABILITIES_H_COLLECT OPENSYNC_BEGIN_DECLS -#include "merger/opensync_capabilities.h" -#include "merger/opensync_capability.h" +#include "capabilities/opensync_capabilities.h" +#include "capabilities/opensync_capability.h" OPENSYNC_END_DECLS -#endif /*OPENSYNCMERGER_H_*/ +#endif /* OPENSYNC_CAPABILITIES_H_COLLECT */ + Added: trunk/opensync/opensync-merger.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/opensync/opensync-merger.h Sat Jan 3 19:47:22 2009 (r4976) @@ -0,0 +1,3 @@ +/* FIXME: Legacy include - will be dropped with 0.39 adapt your incldue to <opensync/opensync-capabilities.h> */ +#include <opensync/opensync-capabilities.h> + Modified: trunk/opensync/version/opensync_version.c ============================================================================== --- trunk/opensync/version/opensync_version.c Sat Jan 3 19:41:53 2009 (r4975) +++ trunk/opensync/version/opensync_version.c Sat Jan 3 19:47:22 2009 (r4976) @@ -23,8 +23,8 @@ #include "opensync.h" #include "opensync_internals.h" -#include "opensync-merger.h" -#include "merger/opensync_capabilities_internals.h" +#include "opensync-capabilities.h" +#include "capabilities/opensync-capabilities_internals.h" #include "opensync-version.h" #include "opensync-version_internals.h" Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Sat Jan 3 19:41:53 2009 (r4975) +++ trunk/tests/CMakeLists.txt Sat Jan 3 19:47:22 2009 (r4976) @@ -14,7 +14,7 @@ ADD_TEST( symbols ${CMAKE_CURRENT_SOURCE_DIR}/abiapi-tests/check-symbols ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) ADD_CHECK_TEST( error check_error.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( archive archive-tests/check_archive.c ${TEST_TARGET_LIBRARIES} ) -ADD_CHECK_TEST( capabilities merger-tests/check_capabilities.c ${TEST_TARGET_LIBRARIES} ) +ADD_CHECK_TEST( capabilities capabilities-tests/check_capabilities.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( client client-tests/check_client.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( filter sync-tests/check_filter.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( conv format-tests/check_conv.c ${TEST_TARGET_LIBRARIES} ) @@ -42,5 +42,5 @@ ADD_CHECK_TEST( time format-tests/check_time.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( version version-tests/check_version.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( updater group-tests/check_updater.c ${TEST_TARGET_LIBRARIES} ) -ADD_CHECK_TEST( xmlformat merger-tests/check_xmlformat.c ${TEST_TARGET_LIBRARIES} ) +ADD_CHECK_TEST( xmlformat capabilities-tests/check_xmlformat.c ${TEST_TARGET_LIBRARIES} ) Modified: trunk/tests/capabilities-tests/check_capabilities.c ============================================================================== --- trunk/tests/merger-tests/check_capabilities.c Sat Jan 3 18:55:29 2009 (r4973) +++ trunk/tests/capabilities-tests/check_capabilities.c Sat Jan 3 19:47:22 2009 (r4976) @@ -1,11 +1,11 @@ #include "support.h" -#include <opensync/opensync-merger.h> -#include "opensync/merger/opensync-merger_internals.h" +#include <opensync/opensync-capabilities.h> +#include "opensync/capabilities/opensync-capabilities_internals.h" START_TEST (capabilities_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; OSyncCapabilities *capabilities = osync_capabilities_new(&error); @@ -23,7 +23,7 @@ START_TEST (capability_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; OSyncCapabilities *capabilities = osync_capabilities_new(&error); @@ -42,7 +42,7 @@ START_TEST (capabilities_parse) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; char* buffer; @@ -63,7 +63,7 @@ START_TEST (capabilities_sort) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; char* buffer; Modified: trunk/tests/capabilities-tests/check_xmlformat.c ============================================================================== --- trunk/tests/merger-tests/check_xmlformat.c Sat Jan 3 18:55:29 2009 (r4973) +++ trunk/tests/capabilities-tests/check_xmlformat.c Sat Jan 3 19:47:22 2009 (r4976) @@ -7,7 +7,7 @@ START_TEST (xmlformat_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; OSyncXMLFormat *xmlformat = osync_xmlformat_new("contact", &error); @@ -25,7 +25,7 @@ START_TEST (xmlformat_parse) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; char* buffer; @@ -46,7 +46,7 @@ START_TEST (xmlformat_sort) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; char* buffer; @@ -97,7 +97,7 @@ START_TEST (xmlformat_search_field) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); char *buffer; unsigned int size; @@ -125,7 +125,7 @@ START_TEST (xmlfield_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; OSyncXMLFormat *xmlformat = osync_xmlformat_new("contact", &error); |
From: <dg...@su...> - 2009-01-03 18:42:09
|
Author: dgollub Date: Sat Jan 3 19:41:53 2009 New Revision: 4975 URL: http://www.opensync.org/changeset/4975 Log: Archive unittest doesn't require any prefilled testbed. Modified: trunk/tests/archive-tests/check_archive.c Modified: trunk/tests/archive-tests/check_archive.c ============================================================================== --- trunk/tests/archive-tests/check_archive.c Sat Jan 3 19:41:12 2009 (r4974) +++ trunk/tests/archive-tests/check_archive.c Sat Jan 3 19:41:53 2009 (r4975) @@ -7,7 +7,7 @@ START_TEST (archive_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new((const char *)"archive.db", &error); @@ -25,7 +25,7 @@ START_TEST (archive_load_changes) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new("archive.db", &error); @@ -46,7 +46,7 @@ START_TEST (archive_save_change) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new("archive.db", &error); @@ -71,7 +71,7 @@ START_TEST (archive_save_data) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new("archive.db", &error); @@ -101,7 +101,7 @@ START_TEST (archive_load_data) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new("archive.db", &error); @@ -140,7 +140,7 @@ START_TEST (archive_load_data_with_closing_db) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncArchive *archive = osync_archive_new("archive.db", &error); |
From: <dg...@su...> - 2009-01-03 18:41:30
|
Author: dgollub Date: Sat Jan 3 19:41:12 2009 New Revision: 4974 URL: http://www.opensync.org/changeset/4974 Log: Unittest version doesn't contain any testcase which requires are prefilled testbed. Modified: trunk/tests/version-tests/check_version.c Modified: trunk/tests/version-tests/check_version.c ============================================================================== --- trunk/tests/version-tests/check_version.c Sat Jan 3 18:55:29 2009 (r4973) +++ trunk/tests/version-tests/check_version.c Sat Jan 3 19:41:12 2009 (r4974) @@ -5,7 +5,7 @@ START_TEST (version_new) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncVersion *version = osync_version_new(&error); @@ -23,7 +23,7 @@ START_TEST (version_matches) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncVersion *version = osync_version_new(&error); @@ -61,7 +61,7 @@ START_TEST (version_load_from_descriptions) { - char *testbed = setup_testbed("merger"); + char *testbed = setup_testbed(NULL); OSyncError *error = NULL; OSyncList *versions = osync_version_load_from_descriptions(&error, testbed, testbed); |
From: <dg...@su...> - 2009-01-03 17:55:53
|
Author: dgollub Date: Sat Jan 3 18:55:29 2009 New Revision: 4973 URL: http://www.opensync.org/changeset/4973 Log: Drop OSyncMerger, this is now completely handled vai the format plugins. The Mergering/Demering capabilities of OpenSync are now independent of the xmlformat. As base for merging we still rely on a OpenSync generic interface: OSyncCapabilities. This get's passed as argument for the format-plugin merge/demerge functions. As reference merge/demerge implementation check the xmlformat-plugin, which is no longer part of teh OpenSync-core tree. Deleted: trunk/opensync/merger/opensync_merger.c trunk/opensync/merger/opensync_merger_internals.h trunk/opensync/merger/opensync_merger_private.h trunk/tests/merger-tests/check_merger.c Modified: trunk/opensync/CMakeLists.txt trunk/opensync/engine/opensync_engine.c trunk/opensync/engine/opensync_obj_engine.c trunk/opensync/group/opensync_member.c trunk/opensync/group/opensync_member_internals.h trunk/opensync/group/opensync_member_private.h trunk/opensync/merger/opensync-merger_internals.h trunk/tests/CMakeLists.txt Modified: trunk/opensync/CMakeLists.txt ============================================================================== --- trunk/opensync/CMakeLists.txt Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/CMakeLists.txt Sat Jan 3 18:55:29 2009 (r4973) @@ -45,7 +45,6 @@ mapping/opensync_mapping_table.c merger/opensync_capabilities.c merger/opensync_capability.c - merger/opensync_merger.c module/opensync_module.c plugin/opensync_context.c plugin/opensync_plugin_advancedoptions.c Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/engine/opensync_engine.c Sat Jan 3 18:55:29 2009 (r4973) @@ -34,7 +34,6 @@ #include "archive/opensync_archive_internals.h" #include "client/opensync_client_proxy_internals.h" -#include "merger/opensync_merger_internals.h" #include "group/opensync_group_internals.h" #include "group/opensync_member_internals.h" #include "format/opensync_objformat_internals.h" @@ -298,16 +297,12 @@ OSyncObjFormat *objformat = osync_change_get_objformat(change); char *entirebuf, *buffer, *outbuf; unsigned int entsize, size = 0, outsize; - OSyncMerger *merger = NULL; osync_trace(TRACE_INTERNAL, "Merge."); member = osync_client_proxy_get_member(proxy); - merger = osync_member_get_merger(member); + caps = osync_member_get_capabilities(member); - if(merger) { - - caps = osync_member_get_capabilities(member); - osync_assert_msg(caps, "Merger active, but not capabilities!"); + if(caps) { /* TODO: Merger save the archive data with the member so we have to load it only for one time*/ // osync_archive_load_data() is fetching the mappingid by uid in the db Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/engine/opensync_obj_engine.c Sat Jan 3 18:55:29 2009 (r4973) @@ -46,7 +46,6 @@ #include "archive/opensync_archive_internals.h" #include "data/opensync_change_internals.h" #include "client/opensync_client_proxy_internals.h" -#include "merger/opensync_merger_internals.h" #include "group/opensync_member_internals.h" #include "format/opensync_objformat_internals.h" @@ -1119,7 +1118,6 @@ unsigned int outsize = 0, size = 0; const char *objtype = NULL; OSyncMapping *mapping = NULL; - OSyncMerger *merger = NULL; OSyncCapabilities *caps; OSyncMember *member = osync_client_proxy_get_member(sinkengine->proxy); OSyncObjFormat *objformat = osync_change_get_objformat(entry_engine->change); @@ -1138,7 +1136,6 @@ } - merger = osync_member_get_merger(member); caps = osync_member_get_capabilities(member); if (!caps) { osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "No capabilities defined for Member %lli.", memberid); Modified: trunk/opensync/group/opensync_member.c ============================================================================== --- trunk/opensync/group/opensync_member.c Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/group/opensync_member.c Sat Jan 3 18:55:29 2009 (r4973) @@ -31,21 +31,9 @@ #include "opensync-merger.h" #include "merger/opensync_capabilities_internals.h" -#include "merger/opensync_merger_internals.h" #include "common/opensync_xml_internals.h" -static void osync_member_set_merger(OSyncMember *member, OSyncMerger *merger) -{ - osync_assert(member); - - if (member->merger) - osync_merger_unref(member->merger); - member->merger = merger; - if(merger) - osync_merger_ref(member->merger); -} - void osync_member_parse_timeout(xmlNode *cur, OSyncObjTypeSink *sink) { osync_assert(sink); @@ -193,9 +181,6 @@ if (osync_member_get_capabilities(member)) osync_capabilities_unref(osync_member_get_capabilities(member)); - if (osync_member_get_merger(member)) - osync_merger_unref(osync_member_get_merger(member)); - osync_member_flush_objtypes(member); #ifdef OPENSYNC_UNITTESTS @@ -764,25 +749,15 @@ if (member->capabilities) osync_capabilities_unref(member->capabilities); + member->capabilities = capabilities; + if(capabilities) { - OSyncMerger* merger = NULL; osync_capabilities_ref(member->capabilities); - merger = osync_merger_new(member->capabilities, error); - if(!merger) - return FALSE; - osync_member_set_merger(member, merger); - osync_merger_unref(merger); } return TRUE; } -OSyncMerger *osync_member_get_merger(OSyncMember *member) -{ - osync_assert(member); - return member->merger; -} - void osync_member_flush_objtypes(OSyncMember *member) { osync_assert(member); Modified: trunk/opensync/group/opensync_member_internals.h ============================================================================== --- trunk/opensync/group/opensync_member_internals.h Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/group/opensync_member_internals.h Sat Jan 3 18:55:29 2009 (r4973) @@ -21,8 +21,6 @@ #ifndef _OPENSYNC_MEMBER_INTERNALS_H_ #define _OPENSYNC_MEMBER_INTERNALS_H_ -#include "merger/opensync_merger_internals.h" - /** * @defgroup OSyncMemberInternalsAPI OpenSync Member Internals * @ingroup OSyncGroupPrivate @@ -51,20 +49,12 @@ int ref_count; OSyncCapabilities *capabilities; - OSyncMerger *merger; #ifdef OPENSYNC_UNITTESTS char *schemadir; #endif /* OPENSYNC_UNITTESTS */ }; -/** @brief Get pointer of the Merger - * - * @param member The member - * @returns The pointer of the Merger, NULL if merger is disabled - */ -OSYNC_TEST_EXPORT OSyncMerger *osync_member_get_merger(OSyncMember *member); - #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_private.h ============================================================================== --- trunk/opensync/group/opensync_member_private.h Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/group/opensync_member_private.h Sat Jan 3 18:55:29 2009 (r4973) @@ -31,14 +31,6 @@ */ /*@{*/ -/** @brief Set Merger of Member - * - * @param member The Member pointer - * @param merger Pointer to the merger object to set - * - */ -static void osync_member_set_merger(OSyncMember *member, OSyncMerger *merger); - /** @brief Parser for the "timeout" node in the member configuration * * @param cur Pointer to the xmlNode Modified: trunk/opensync/merger/opensync-merger_internals.h ============================================================================== --- trunk/opensync/merger/opensync-merger_internals.h Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/opensync/merger/opensync-merger_internals.h Sat Jan 3 18:55:29 2009 (r4973) @@ -25,6 +25,5 @@ #include "opensync_capabilities_internals.h" #include "opensync_capability_internals.h" -#include "opensync_merger_internals.h" #endif /*OPENSYNCMERGER_INTERNALS_H_*/ Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Sat Jan 3 18:46:42 2009 (r4972) +++ trunk/tests/CMakeLists.txt Sat Jan 3 18:55:29 2009 (r4973) @@ -31,7 +31,6 @@ ADD_CHECK_TEST( mapping mapping-tests/check_mapping.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( mapping_engine engine-tests/check_mapping_engine.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( member group-tests/check_member.c ${TEST_TARGET_LIBRARIES} ) -ADD_CHECK_TEST( merger merger-tests/check_merger.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( module module-tests/check_module.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( multisync sync-tests/check_multisync.c ${TEST_TARGET_LIBRARIES} ) ADD_CHECK_TEST( sync sync-tests/check_sync.c ${TEST_TARGET_LIBRARIES} ) |
From: <dg...@su...> - 2009-01-03 17:46:57
|
Author: bricks Date: Sat Jan 3 18:46:42 2009 New Revision: 4972 URL: http://www.opensync.org/changeset/4972 Log: Find correct include path of opensync if pkg-config isn't available opensync is installed in libopensync1 dir Modified: branches/3rd-party-cmake-modules/modules/FindOpenSync.cmake Modified: branches/3rd-party-cmake-modules/modules/FindOpenSync.cmake ============================================================================== --- branches/3rd-party-cmake-modules/modules/FindOpenSync.cmake Sat Jan 3 18:38:58 2009 (r4971) +++ branches/3rd-party-cmake-modules/modules/FindOpenSync.cmake Sat Jan 3 18:46:42 2009 (r4972) @@ -51,7 +51,7 @@ # Look for OpenSync include dir and libraries without pkg-config IF( NOT OPENSYNC_FOUND AND NOT PKG_CONFIG_FOUND ) # Fallback if pkg-config doesn't exist - FIND_PATH( OPENSYNC_INCLUDE_DIRS opensync/opensync.h PATH_SUFFIXES libopensync + FIND_PATH( OPENSYNC_INCLUDE_DIRS opensync/opensync.h PATH_SUFFIXES libopensync libopensync1 PATHS /opt/local/include/ /sw/include/ |
From: <dg...@su...> - 2009-01-03 17:39:17
|
Author: dgollub Date: Sat Jan 3 18:38:58 2009 New Revision: 4971 URL: http://www.opensync.org/changeset/4971 Log: Drop XMLFormat-specific merger/demerger code. This is now done inside the xmlformat-plugin. Modified: trunk/opensync/merger/opensync_merger.c trunk/opensync/merger/opensync_merger_internals.h trunk/tests/merger-tests/check_merger.c Modified: trunk/opensync/merger/opensync_merger.c ============================================================================== --- trunk/opensync/merger/opensync_merger.c Sat Jan 3 18:26:32 2009 (r4970) +++ trunk/opensync/merger/opensync_merger.c Sat Jan 3 18:38:58 2009 (r4971) @@ -71,243 +71,3 @@ } } -void osync_merger_merge(OSyncMerger *merger, OSyncXMLFormat *xmlformat, OSyncXMLFormat *entire) -{ - OSyncXMLField *old_cur, *new_cur, *tmp; - OSyncCapability *cap_cur; - int ret; - - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, merger, xmlformat, entire); - osync_assert(merger); - osync_assert(xmlformat); - osync_assert(entire); - - cap_cur = osync_capabilities_get_first(merger->capabilities, osync_xmlformat_get_objtype(xmlformat)); - if(!cap_cur) - return; - - new_cur = osync_xmlformat_get_first_field(xmlformat); - old_cur = osync_xmlformat_get_first_field(entire); - while(old_cur != NULL) - { - ret = strcmp(osync_xmlfield_get_name(new_cur), osync_xmlfield_get_name(old_cur)); - if(ret < 0) { - if(osync_xmlfield_get_next(new_cur) != NULL) { - new_cur = osync_xmlfield_get_next(new_cur); - continue; - } - } - - /* This should be always NULL reg. #820 */ - osync_assert(cap_cur); - - ret = strcmp(osync_capability_get_name(cap_cur), osync_xmlfield_get_name(old_cur)); - if(ret == 0) - { - /* - * now we have to merge the key/value pairs (second level) - * we see the second level as sorted and with the same fields (exception the last key) - * KEY(new) Capabilities KEY(old) - * KEY1 KEY1 KEY1 - * KEY2(empty) KEY3 KEY2 - * KEY2(empty) KEY2 - * KEY3 KEY3 - * KEY4 - * KEY4 - */ - if( osync_capability_has_key(cap_cur) && - !strcmp(osync_capability_get_name(cap_cur), osync_xmlfield_get_name(new_cur))) - { - OSyncCapability *cap_tmp; - OSyncXMLField *new_tmp; - OSyncCapability *cap_node = osync_capability_get_child(cap_cur); - OSyncXMLField *new_node = osync_xmlfield_get_child(new_cur); - OSyncXMLField *old_node = osync_xmlfield_get_child(old_cur); - - while(old_node) { - GSList *list, *tmp; - int i, size; - const char *curkeyname; - - size=0; - curkeyname = osync_xmlfield_get_name(old_node); - list = NULL; - do { - list = g_slist_prepend(list, old_node); - size++; - old_node = osync_xmlfield_get_next(old_node); - if(old_node == NULL) - break; - i = strcmp(osync_xmlfield_get_name(old_node), curkeyname); - } while(i == 0); - - /* search for the curkeyname in the capabilities */ - for(cap_tmp = cap_node; cap_tmp != NULL; cap_tmp = osync_capability_get_next(cap_tmp)) { - if(!strcmp(osync_capability_get_name(cap_tmp), curkeyname)) { - cap_node = cap_tmp; - break; - } - } - - if(cap_tmp) { - /* curkeyname was found in the capibilities */ - /* we have to set the new_node ptr to the right position */ - for(; new_node && size > 0; size--) { - new_node = osync_xmlfield_get_next(new_node); - } - }else{ - /* curkeyname was _not_ found in the capabilities */ - /* link all key/value pairs with the key curkeyname to the the new_node */ - - list = g_slist_reverse(list); - - if(new_node == NULL) { - for(tmp=list; tmp != NULL; tmp = g_slist_next(tmp)) { - osync_xmlfield_unlink(tmp->data); - } - }else{ - for(tmp=list; tmp != NULL; tmp = g_slist_next(tmp)) { - osync_xmlfield_unlink(tmp->data); - - osync_xmlfield_adopt_xmlfield_before_field(new_node, tmp->data); - } - - do{ - new_tmp = new_node; - new_node = osync_xmlfield_get_next(new_node); - osync_xmlfield_delete(new_tmp); - size--; - }while(size > 0 && new_node); - - } - } - g_slist_free(list); - } - } - old_cur = osync_xmlfield_get_next(old_cur); - continue; - } - else if(ret < 0) - { - cap_cur = osync_capability_get_next(cap_cur); - continue; - } - else if(ret > 0) - { - tmp = old_cur; - old_cur = osync_xmlfield_get_next(old_cur); - osync_xmlfield_adopt_xmlfield_before_field(new_cur, tmp); - continue; - } - g_assert_not_reached(); - } - - /* FIXME: Merger is broken! - After merging xmlformat is not sorted. Sorting is very expensive! - Avoid it! Ticket: #754 */ - osync_assert(osync_xmlformat_is_sorted(xmlformat)); - { -#ifndef NDEBUG - /* XXX Debugging only. Fix Merger and remove osync_xmlformat_assemble() */ - unsigned int size; - char *buffer = NULL; - osync_xmlformat_assemble(xmlformat, &buffer, &size); - - osync_trace(TRACE_EXIT, "%s:\nXML:\n%s ", __func__, buffer); - - g_free(buffer); -#else - osync_trace(TRACE_EXIT, "%s", __func__); -#endif /* NDEBUG */ - } - -} - -void osync_merger_demerge(OSyncMerger *merger, OSyncXMLFormat *xmlformat) -{ - OSyncXMLField *cur_xmlfield, *tmp; - OSyncCapability *cur_capability; - int rc; - - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, merger, xmlformat); - osync_assert(merger); - osync_assert(xmlformat); - - cur_capability = osync_capabilities_get_first(merger->capabilities, osync_xmlformat_get_objtype(xmlformat)); - cur_xmlfield = osync_xmlformat_get_first_field(xmlformat); - - if(!cur_capability) /* if there is no capability - it means that the device can handle all xmlfields */ - goto end; - - while(cur_xmlfield != NULL) - { - if(cur_capability == NULL) { - /* delete all xmlfields */ - while(cur_xmlfield) { - osync_trace(TRACE_INTERNAL, "Demerge XMLField: %s", osync_xmlfield_get_name(cur_xmlfield)); - tmp = osync_xmlfield_get_next(cur_xmlfield); - osync_xmlfield_delete(cur_xmlfield); - cur_xmlfield = tmp; - } - break; - } - - rc = strcmp(osync_xmlfield_get_name(cur_xmlfield), osync_capability_get_name(cur_capability)); - if(rc == 0) { - /* check the secound level here */ - if(osync_capability_has_key(cur_capability)) /* if there is no key - it means that the xmlfield can handle all keys */ - { - int i, j=0; - int capability_keys = osync_capability_get_key_count(cur_capability); - int xmlfield_keys = osync_xmlfield_get_key_count(cur_xmlfield); - - for(i=0; i < xmlfield_keys; i++) - { - int krc = 0; - if(j == capability_keys) { - for(; i < xmlfield_keys; i++) { - osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); - osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); - } - break; - } - - krc = strcmp(osync_xmlfield_get_nth_key_name(cur_xmlfield, i), osync_capability_get_nth_key(cur_capability, j)); - if(krc == 0) { - continue; - } - if(krc > 0) { - j++; - continue; - } - if(krc < 0) { - osync_trace(TRACE_INTERNAL, "Demerge XMLField Key: %s->%s", osync_xmlfield_get_name(cur_xmlfield), osync_xmlfield_get_nth_key_name(cur_xmlfield, i)); - osync_xmlfield_set_nth_key_value(cur_xmlfield, i, ""); - continue; - } - g_assert_not_reached(); - } - } - cur_xmlfield = osync_xmlfield_get_next(cur_xmlfield); - continue; - } - if(rc > 0) { - cur_capability = osync_capability_get_next(cur_capability); - continue; - } - if(rc < 0) { - /* delete xmlfield */ - osync_trace(TRACE_INTERNAL, "Demerge XMLField: %s", osync_xmlfield_get_name(cur_xmlfield)); - tmp = osync_xmlfield_get_next(cur_xmlfield); - osync_xmlfield_delete(cur_xmlfield); - cur_xmlfield = tmp; - continue; - } - g_assert_not_reached(); - } - - end: - osync_trace(TRACE_EXIT, "%s: ", __func__); - return; -} - Modified: trunk/opensync/merger/opensync_merger_internals.h ============================================================================== --- trunk/opensync/merger/opensync_merger_internals.h Sat Jan 3 18:26:32 2009 (r4970) +++ trunk/opensync/merger/opensync_merger_internals.h Sat Jan 3 18:38:58 2009 (r4971) @@ -57,23 +57,6 @@ */ OSYNC_TEST_EXPORT void osync_merger_unref(OSyncMerger *merger); -/** - * @brief Merge all xmlfields from the entire xmlformat into the - * xmlformat if they are not listed in the capabilities. - * @param merger The pointer to a merger object - * @param xmlformat The pointer to a xmlformat object - * @param entire The pointer to a entire xmlformat object - */ -OSYNC_TEST_EXPORT void osync_merger_merge(OSyncMerger *merger, OSyncXMLFormat *xmlformat, OSyncXMLFormat *entire); - -/** - * @brief Remove all xmlfields from the xmlformat if they are - * not listed in the capabilities. - * @param merger The pointer to a merger object - * @param xmlformat The pointer to a xmlformat object - */ -OSYNC_TEST_EXPORT void osync_merger_demerge(OSyncMerger *merger, OSyncXMLFormat *xmlformat); - /*@}*/ #endif /*OPENSYNC_MERGER_INTERNALS_H_*/ Modified: trunk/tests/merger-tests/check_merger.c ============================================================================== --- trunk/tests/merger-tests/check_merger.c Sat Jan 3 18:26:32 2009 (r4970) +++ trunk/tests/merger-tests/check_merger.c Sat Jan 3 18:38:58 2009 (r4971) @@ -29,110 +29,10 @@ } END_TEST -START_TEST (merger_merge) -{ - char *testbed = setup_testbed("merger"); - - char *buffer; - unsigned int size; - OSyncError *error = NULL; - OSyncXMLFormat *xmlformat, *xmlformat_entire; - OSyncCapabilities *capabilities; - - fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); - xmlformat = osync_xmlformat_parse(buffer, size, &error); - fail_unless(xmlformat != NULL, NULL); - fail_unless(error == NULL, NULL); - g_free(buffer); - osync_xmlformat_sort(xmlformat); - - fail_unless(osync_file_read("contact-full.xml", &buffer, &size, &error), NULL); - xmlformat_entire = osync_xmlformat_parse(buffer, size, &error); - fail_unless(xmlformat_entire != NULL, NULL); - fail_unless(error == NULL, NULL); - g_free(buffer); - osync_xmlformat_sort(xmlformat_entire); - - fail_unless(osync_file_read("capabilities.xml", &buffer, &size, &error), NULL); - capabilities = osync_capabilities_parse(buffer, size, &error); - fail_unless(capabilities != NULL, NULL); - fail_unless(error == NULL, NULL); - g_free(buffer); - osync_capabilities_sort(capabilities); - - OSyncMerger *merger = osync_merger_new(capabilities, &error); - fail_unless(merger != NULL, NULL); - fail_unless(error == NULL, NULL); - osync_merger_merge(merger, xmlformat, xmlformat_entire); - osync_merger_unref(merger); - - osync_capabilities_unref(capabilities); - osync_xmlformat_unref(xmlformat); - osync_xmlformat_unref(xmlformat_entire); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (merger_demerge) -{ - char *testbed = setup_testbed("merger"); - - char *buffer; - unsigned int size; - OSyncError *error = NULL; - OSyncXMLFormat *xmlformat, *xmlformat_entire; - OSyncCapabilities *capabilities; - - fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); - xmlformat = osync_xmlformat_parse(buffer, size, &error); - fail_unless(xmlformat != NULL, NULL); - fail_unless(error == NULL, NULL); - g_free(buffer); - osync_xmlformat_sort(xmlformat); - - fail_unless(osync_file_read("contact-full.xml", &buffer, &size, &error), NULL); - xmlformat_entire = osync_xmlformat_parse(buffer, size, &error); - fail_unless(xmlformat_entire != NULL, NULL); - fail_unless(error == NULL, NULL); - g_free(buffer); - osync_xmlformat_sort(xmlformat_entire); - - fail_unless(osync_file_read("capabilities.xml", &buffer, &size, &error), NULL); - capabilities = osync_capabilities_parse(buffer, size, &error); - fail_unless(capabilities != NULL, NULL); - fail_unless(error == NULL, NULL); -//printf("\n%s", buffer); - g_free(buffer); - osync_capabilities_sort(capabilities); - -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\n%s", buffer); g_free(buffer); -//osync_xmlformat_assemble(xmlformat_entire, &buffer, &size); printf("\n%s", buffer); g_free(buffer); - - OSyncMerger *merger = osync_merger_new(capabilities, &error); - fail_unless(merger != NULL, NULL); - fail_unless(error == NULL, NULL); - osync_merger_merge(merger, xmlformat, xmlformat_entire); -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nMERGED:\n%s", buffer); g_free(buffer); - osync_merger_demerge(merger, xmlformat); -//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nDEMERGED:\n%s", buffer); g_free(buffer); - - osync_merger_unref(merger); - - osync_capabilities_unref(capabilities); - osync_xmlformat_unref(xmlformat); - osync_xmlformat_unref(xmlformat_entire); - - destroy_testbed(testbed); -} -END_TEST - Suite *filter_suite(void) { Suite *s = suite_create("Merger"); create_case(s, "merger_new", merger_new); - create_case(s, "merger_merge", merger_merge); - create_case(s, "merger_demerge", merger_demerge); return s; } |
From: <dg...@su...> - 2009-01-03 17:26:48
|
Author: dgollub Date: Sat Jan 3 18:26:32 2009 New Revision: 4970 URL: http://www.opensync.org/changeset/4970 Log: Create a copy of check_merge.c for the xmlformat-plugin. Preparing drop of OSyncMerger. Added: format-plugins/xmlformat/trunk/tests/check_merger.c - copied unchanged from r4969, trunk/tests/merger-tests/check_merger.c Copied: format-plugins/xmlformat/trunk/tests/check_merger.c (from r4969, trunk/tests/merger-tests/check_merger.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ format-plugins/xmlformat/trunk/tests/check_merger.c Sat Jan 3 18:26:32 2009 (r4970, copy of r4969, trunk/tests/merger-tests/check_merger.c) @@ -0,0 +1,151 @@ +#include "support.h" + +#include <opensync/opensync-merger.h> +#include <opensync/opensync-xmlformat.h> +#include "opensync/merger/opensync-merger_internals.h" +#include "opensync/xmlformat/opensync_xmlformat_internals.h" + + +START_TEST (merger_new) +{ + char *testbed = setup_testbed("merger"); + + OSyncError *error = NULL; + OSyncCapabilities *capabilities = osync_capabilities_new(&error); + fail_unless(capabilities != NULL, NULL); + fail_unless(error == NULL, NULL); + + OSyncMerger *merger = osync_merger_new(capabilities, &error); + fail_unless(merger != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_merger_ref(merger); + osync_merger_unref(merger); + + osync_merger_unref(merger); + osync_capabilities_unref(capabilities); + + destroy_testbed(testbed); +} +END_TEST + +START_TEST (merger_merge) +{ + char *testbed = setup_testbed("merger"); + + char *buffer; + unsigned int size; + OSyncError *error = NULL; + OSyncXMLFormat *xmlformat, *xmlformat_entire; + OSyncCapabilities *capabilities; + + fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); + xmlformat = osync_xmlformat_parse(buffer, size, &error); + fail_unless(xmlformat != NULL, NULL); + fail_unless(error == NULL, NULL); + g_free(buffer); + osync_xmlformat_sort(xmlformat); + + fail_unless(osync_file_read("contact-full.xml", &buffer, &size, &error), NULL); + xmlformat_entire = osync_xmlformat_parse(buffer, size, &error); + fail_unless(xmlformat_entire != NULL, NULL); + fail_unless(error == NULL, NULL); + g_free(buffer); + osync_xmlformat_sort(xmlformat_entire); + + fail_unless(osync_file_read("capabilities.xml", &buffer, &size, &error), NULL); + capabilities = osync_capabilities_parse(buffer, size, &error); + fail_unless(capabilities != NULL, NULL); + fail_unless(error == NULL, NULL); + g_free(buffer); + osync_capabilities_sort(capabilities); + + OSyncMerger *merger = osync_merger_new(capabilities, &error); + fail_unless(merger != NULL, NULL); + fail_unless(error == NULL, NULL); + osync_merger_merge(merger, xmlformat, xmlformat_entire); + osync_merger_unref(merger); + + osync_capabilities_unref(capabilities); + osync_xmlformat_unref(xmlformat); + osync_xmlformat_unref(xmlformat_entire); + + destroy_testbed(testbed); +} +END_TEST + +START_TEST (merger_demerge) +{ + char *testbed = setup_testbed("merger"); + + char *buffer; + unsigned int size; + OSyncError *error = NULL; + OSyncXMLFormat *xmlformat, *xmlformat_entire; + OSyncCapabilities *capabilities; + + fail_unless(osync_file_read("contact.xml", &buffer, &size, &error), NULL); + xmlformat = osync_xmlformat_parse(buffer, size, &error); + fail_unless(xmlformat != NULL, NULL); + fail_unless(error == NULL, NULL); + g_free(buffer); + osync_xmlformat_sort(xmlformat); + + fail_unless(osync_file_read("contact-full.xml", &buffer, &size, &error), NULL); + xmlformat_entire = osync_xmlformat_parse(buffer, size, &error); + fail_unless(xmlformat_entire != NULL, NULL); + fail_unless(error == NULL, NULL); + g_free(buffer); + osync_xmlformat_sort(xmlformat_entire); + + fail_unless(osync_file_read("capabilities.xml", &buffer, &size, &error), NULL); + capabilities = osync_capabilities_parse(buffer, size, &error); + fail_unless(capabilities != NULL, NULL); + fail_unless(error == NULL, NULL); +//printf("\n%s", buffer); + g_free(buffer); + osync_capabilities_sort(capabilities); + +//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\n%s", buffer); g_free(buffer); +//osync_xmlformat_assemble(xmlformat_entire, &buffer, &size); printf("\n%s", buffer); g_free(buffer); + + OSyncMerger *merger = osync_merger_new(capabilities, &error); + fail_unless(merger != NULL, NULL); + fail_unless(error == NULL, NULL); + osync_merger_merge(merger, xmlformat, xmlformat_entire); +//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nMERGED:\n%s", buffer); g_free(buffer); + osync_merger_demerge(merger, xmlformat); +//osync_xmlformat_assemble(xmlformat, &buffer, &size); printf("\nDEMERGED:\n%s", buffer); g_free(buffer); + + osync_merger_unref(merger); + + osync_capabilities_unref(capabilities); + osync_xmlformat_unref(xmlformat); + osync_xmlformat_unref(xmlformat_entire); + + destroy_testbed(testbed); +} +END_TEST + +Suite *filter_suite(void) +{ + Suite *s = suite_create("Merger"); + create_case(s, "merger_new", merger_new); + create_case(s, "merger_merge", merger_merge); + create_case(s, "merger_demerge", merger_demerge); + return s; +} + +int main(void) +{ + int nf; + + Suite *s = filter_suite(); + + SRunner *sr; + sr = srunner_create(s); + srunner_run_all(sr, CK_VERBOSE); + nf = srunner_ntests_failed(sr); + srunner_free(sr); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} |
From: <dg...@su...> - 2009-01-03 17:16:55
|
Author: dgollub Date: Sat Jan 3 18:16:36 2009 New Revision: 4969 URL: http://www.opensync.org/changeset/4969 Log: Export osync_xmlfield_adopt_xmlfield_before_field, osync_xmlfield_delete and osync_xmlfield_unlink. Currently required by the out of tree xmlformat-plugin for merger/demerge code. Modified: trunk/opensync.sym trunk/opensync/merger/opensync_merger.c trunk/opensync/xmlformat/opensync_xmlfield.h trunk/opensync/xmlformat/opensync_xmlfield_internals.h Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sat Jan 3 18:00:30 2009 (r4968) +++ trunk/opensync.sym Sat Jan 3 18:16:36 2009 (r4969) @@ -714,6 +714,8 @@ osync_version_set_vendor osync_version_unref osync_xmlfield_add_key_value +osync_xmlfield_adopt_xmlfield_before_field +osync_xmlfield_delete osync_xmlfield_get_attr osync_xmlfield_get_attr_count osync_xmlfield_get_child @@ -734,6 +736,7 @@ osync_xmlfield_set_name osync_xmlfield_set_nth_key_value osync_xmlfield_sort +osync_xmlfield_unlink osync_xmlfieldlist_free osync_xmlfieldlist_get_length osync_xmlfieldlist_item Modified: trunk/opensync/merger/opensync_merger.c ============================================================================== --- trunk/opensync/merger/opensync_merger.c Sat Jan 3 18:00:30 2009 (r4968) +++ trunk/opensync/merger/opensync_merger.c Sat Jan 3 18:16:36 2009 (r4969) @@ -29,8 +29,6 @@ #include "opensync_capabilities_internals.h" #include "opensync_merger_internals.h" -#include "xmlformat/opensync_xmlfield_internals.h" - #include "opensync_merger_private.h" Modified: trunk/opensync/xmlformat/opensync_xmlfield.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlfield.h Sat Jan 3 18:00:30 2009 (r4968) +++ trunk/opensync/xmlformat/opensync_xmlfield.h Sat Jan 3 18:16:36 2009 (r4969) @@ -43,6 +43,18 @@ /** + * @brief Unlink a xmlfield from its context and frees it + * @param xmlfield The pointer to a xmlfield object + */ +OSYNC_EXPORT void osync_xmlfield_delete(OSyncXMLField *xmlfield); + +/** + * @brief Unlink a xmlfield object + * @param xmlfield The pointer to a xmlfield object + */ +OSYNC_EXPORT void osync_xmlfield_unlink(OSyncXMLField *xmlfield); + +/** * @brief Get the name of an xmlfield * @param xmlfield Pointer to the xmlfield object * @return The name of the xmlfield @@ -85,6 +97,13 @@ OSYNC_EXPORT OSyncXMLField *osync_xmlfield_get_child(OSyncXMLField *xmlfield); /** + * @brief Links a xmlfield object from a xmlformat object before a other xmlfield object of a other xmlformat object + * @param xmlfield The pointer to a xmlfield object + * @param to_link The pointer to a xmlfield object + */ +OSYNC_EXPORT void osync_xmlfield_adopt_xmlfield_before_field(OSyncXMLField *xmlfield, OSyncXMLField *to_link); + +/** * @brief Get the value of the xmlfield * @param xmlfield Pointer to the xmlfield object * @return String pointer to the value. If the content is empty, "" gets returned. Modified: trunk/opensync/xmlformat/opensync_xmlfield_internals.h ============================================================================== --- trunk/opensync/xmlformat/opensync_xmlfield_internals.h Sat Jan 3 18:00:30 2009 (r4968) +++ trunk/opensync/xmlformat/opensync_xmlfield_internals.h Sat Jan 3 18:16:36 2009 (r4969) @@ -50,33 +50,12 @@ /** - * @brief Unlink a xmlfield from its context and frees it - * @param xmlfield The pointer to a xmlfield object - */ -void osync_xmlfield_delete(OSyncXMLField *xmlfield); - -/** - * @brief Links a xmlfield object from a xmlformat object before a other xmlfield object of a other xmlformat object - * @param xmlfield The pointer to a xmlfield object - * @param to_link The pointer to a xmlfield object - */ -void osync_xmlfield_adopt_xmlfield_before_field(OSyncXMLField *xmlfield, OSyncXMLField *to_link); - -/** * @brief Links a xmlfield object from a xmlformat object after a other xmlfield object of a other xmlformat object * @param xmlfield The pointer to a xmlfield object * @param to_link The pointer to a xmlfield object */ void osync_xmlfield_adopt_xmlfield_after_field(OSyncXMLField *xmlfield, OSyncXMLField *to_link); - -/** - * @brief Unlink a xmlfield object - * @param xmlfield The pointer to a xmlfield object - */ -void osync_xmlfield_unlink(OSyncXMLField *xmlfield); - - /** * @brief Compare the names of two xmlfields * @param xmlfield1 The pointer to a xmlfield object |
From: <dg...@su...> - 2009-01-03 17:00:47
|
Author: dgollub Date: Sat Jan 3 18:00:30 2009 New Revision: 4968 URL: http://www.opensync.org/changeset/4968 Log: Apply missing capabilities on demerger. Modified: trunk/opensync/engine/opensync_obj_engine.c Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Sat Jan 3 17:55:41 2009 (r4967) +++ trunk/opensync/engine/opensync_obj_engine.c Sat Jan 3 18:00:30 2009 (r4968) @@ -1144,8 +1144,7 @@ osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "No capabilities defined for Member %lli.", memberid); goto error; } - /* FIXME: pass capabilities */ - if (!osync_objformat_demerge(objformat, buffer, size, &outbuf, &outsize, NULL, error)) + if (!osync_objformat_demerge(objformat, buffer, size, &outbuf, &outsize, caps, error)) goto error; osync_free(buffer); |