From: <svn...@op...> - 2009-06-21 22:18:58
|
Author: dgollub Date: Mon Jun 22 00:18:50 2009 New Revision: 5676 URL: http://www.opensync.org/changeset/5676 Log: Fixed assembling and parsing of new capabilities interface refs #1084 Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.h branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_internals.h branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype_internals.h branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c branches/opensync-ticket1084/tests/capabilities-tests/check_capabilities.c Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.c Mon Jun 22 00:18:50 2009 (r5676) @@ -32,7 +32,7 @@ #include "opensync_capabilities_private.h" -OSyncCapabilities *osync_capabilities_new(OSyncError **error) +OSyncCapabilities *osync_capabilities_new(const char *capsformat, OSyncError **error) { OSyncCapabilities *capabilities = NULL; osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error); @@ -45,8 +45,10 @@ capabilities->ref_count = 1; capabilities->doc = xmlNewDoc(BAD_CAST "1.0"); - capabilities->doc->children = xmlNewDocNode(capabilities->doc, NULL, (xmlChar *)"capabilities", NULL); + capabilities->doc->children = xmlNewDocNode(capabilities->doc, NULL, (xmlChar *)"Caps", NULL); capabilities->doc->_private = capabilities; + + osync_capabilities_set_format(capabilities, capsformat); osync_trace(TRACE_EXIT, "%s: %p", __func__, capabilities); return capabilities; @@ -105,17 +107,17 @@ cur = cur->children; for(; cur != NULL; cur = cur->next) { + + if (cur->type != XML_ELEMENT_NODE) + continue; + OSyncCapabilitiesObjType *capabilitiesobjtype = osync_capabilities_objtype_parse(capabilities, cur, error); if (!capabilitiesobjtype) { osync_capabilities_unref(capabilities); goto error; } - - capabilities->objtypes = osync_list_prepend(capabilities->objtypes, capabilitiesobjtype); } - capabilities->objtypes = osync_list_reverse(capabilities->objtypes); - osync_trace(TRACE_EXIT, "%s: %p", __func__, capabilities); return capabilities; @@ -143,13 +145,7 @@ goto error; } - doc = xmlNewDoc((xmlChar*)"1.0"); - if (!doc) - goto error_oom; - - doc->children = xmlNewDocNode(doc, NULL, (xmlChar*)"Caps", NULL); - if (!doc) - goto error_oom; + doc = capabilities->doc; /* Set version for capabilities configuration */ version_str = osync_strdup_printf("%u.%u", OSYNC_CAPS_MAJOR_VERSION, OSYNC_CAPS_MINOR_VERSION); @@ -168,7 +164,7 @@ goto error; } - xmlDocDumpFormatMemoryEnc(capabilities->doc, (xmlChar **) buffer, size, NULL, 1); + xmlDocDumpFormatMemoryEnc(doc, (xmlChar **) buffer, size, NULL, 1); return TRUE; @@ -215,6 +211,17 @@ return capabilities->format; } +void osync_capabilities_set_format(OSyncCapabilities *capabilities, const char *capsformat) +{ + osync_assert(capabilities); + osync_assert(capsformat); + + if (capabilities->format) + osync_free(capabilities->format); + + capabilities->format = osync_strdup(capsformat); +} + OSyncCapabilitiesObjType *osync_capabilities_get_objtype(OSyncCapabilities *capabilities, const char *objtype) { OSyncList *l = NULL; @@ -232,3 +239,13 @@ return capobjtype; } + +void osync_capabilities_add_objtype(OSyncCapabilities *capabilities, OSyncCapabilitiesObjType *capabilitiesobjtype) +{ + osync_assert(capabilities); + osync_assert(capabilitiesobjtype); + + + capabilities->objtypes = osync_list_append(capabilities->objtypes, capabilitiesobjtype); +} + Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.h ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.h Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities.h Mon Jun 22 00:18:50 2009 (r5676) @@ -36,10 +36,11 @@ /** * @brief Creates a new capabilities object + * @param capsformat Name of the used capabilities format * @param error The error which will hold the info in case of an error * @return The pointer to the newly allocated capabilities object or NULL in case of error */ -OSYNC_EXPORT OSyncCapabilities *osync_capabilities_new(OSyncError **error); +OSYNC_EXPORT OSyncCapabilities *osync_capabilities_new(const char *capsformat, OSyncError **error); /** * @brief Creates a new capabilities object from an xml document. Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_internals.h ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_internals.h Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_internals.h Mon Jun 22 00:18:50 2009 (r5676) @@ -58,6 +58,11 @@ /*@}*/ + +OSYNC_TEST_EXPORT void osync_capabilities_add_objtype(OSyncCapabilities *capabilities, OSyncCapabilitiesObjType *capsobjtype); + +OSYNC_TEST_EXPORT void osync_capabilities_set_format(OSyncCapabilities *capabilities, const char *capsformat); + OSYNC_TEST_EXPORT OSyncCapabilityParameter *osync_capability_parameter_new(OSyncError **error); OSYNC_TEST_EXPORT OSyncCapabilityParameter *osync_capability_parameter_ref(OSyncCapabilityParameter *capparam); OSYNC_TEST_EXPORT void osync_capability_parameter_unref(OSyncCapabilityParameter *capparam); Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype.c Mon Jun 22 00:18:50 2009 (r5676) @@ -38,9 +38,11 @@ capobjtype = osync_try_malloc0(sizeof(OSyncCapabilitiesObjType), error); if (!capobjtype) goto error; - + capobjtype->name = osync_strdup(objtype); + osync_capabilities_add_objtype(capabilities, capobjtype); + return capobjtype; error: @@ -67,11 +69,12 @@ cur = node->children; for(; cur != NULL; cur = cur->next) { + + if (cur->type != XML_ELEMENT_NODE) + continue; + if (!(capability = osync_capability_parse(capobjtype, cur, error))) goto error; - - /* TODO: prepend instaed of append */ - capobjtype->capabilities = osync_list_append(capobjtype->capabilities, capability); } return capobjtype; @@ -153,3 +156,9 @@ return capsobjtype->capabilities; } +void osync_capabilities_objtype_add_capability(OSyncCapabilitiesObjType *capsobjtype, OSyncCapability *capability) +{ + osync_assert(capsobjtype); + capsobjtype->capabilities = osync_list_append(capsobjtype->capabilities, capability); +} + Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype_internals.h ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype_internals.h Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capabilities_objtype_internals.h Mon Jun 22 00:18:50 2009 (r5676) @@ -60,6 +60,8 @@ OSYNC_TEST_EXPORT osync_bool osync_capabilities_objtype_assemble(OSyncCapabilitiesObjType *capsobjtype, xmlNode *node, OSyncError **error); +OSYNC_TEST_EXPORT void osync_capabilities_objtype_add_capability(OSyncCapabilitiesObjType *capsobjtype, OSyncCapability *capability); + /*@}*/ #endif /*OPENSYNC_CAPABILITIES_OBJTYPE_INTERNAL_H_*/ Modified: branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c ============================================================================== --- branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/opensync/capabilities/opensync_capability.c Mon Jun 22 00:18:50 2009 (r5676) @@ -94,7 +94,7 @@ osync_assert(cap); osync_assert(node); - cur = xmlNewChild(cur, NULL, (xmlChar*)"Cap", NULL); + cur = xmlNewChild(node, NULL, (xmlChar*)"Cap", NULL); if (!cur) goto error_oom; @@ -162,8 +162,7 @@ if(!capability) goto error; - l = osync_capabilities_objtype_get_caps(capobjtype); - l = osync_list_prepend(l, capability); + osync_capabilities_objtype_add_capability(capobjtype, capability); osync_trace(TRACE_EXIT, "%s: %p", __func__, capability); return capability; Modified: branches/opensync-ticket1084/tests/capabilities-tests/check_capabilities.c ============================================================================== --- branches/opensync-ticket1084/tests/capabilities-tests/check_capabilities.c Sun Jun 21 16:16:08 2009 (r5675) +++ branches/opensync-ticket1084/tests/capabilities-tests/check_capabilities.c Mon Jun 22 00:18:50 2009 (r5676) @@ -8,7 +8,7 @@ char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; - OSyncCapabilities *capabilities = osync_capabilities_new(&error); + OSyncCapabilities *capabilities = osync_capabilities_new("testformat", &error); fail_unless(capabilities != NULL, NULL); fail_unless(error == NULL, NULL); @@ -26,7 +26,7 @@ char *testbed = setup_testbed("capabilities"); OSyncError *error = NULL; - OSyncCapabilities *capabilities = osync_capabilities_new(&error); + OSyncCapabilities *capabilities = osync_capabilities_new("testformat", &error); fail_unless(capabilities != NULL, NULL); fail_unless(error == NULL, NULL); @@ -50,23 +50,73 @@ { char *testbed = setup_testbed("capabilities"); + OSyncCapability *capability; OSyncError *error = NULL; char* buffer; unsigned int size; - fail_unless(osync_file_read("capabilities.xml", &buffer, &size, &error), NULL); - OSyncCapabilities *capabilities = osync_capabilities_parse(buffer, size, &error); + OSyncCapabilities *capabilities = osync_capabilities_new("testformat", &error); fail_unless(capabilities != NULL, NULL); fail_unless(error == NULL, NULL); - OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_get_objtype(capabilities, "contact"); + + OSyncCapabilitiesObjType *capsobjtype = osync_capabilities_objtype_new(capabilities, "contact", &error); + fail_unless(capsobjtype != NULL, NULL); + fail_unless(error == NULL, NULL); + + /** capmock1 */ + capability = osync_capability_new(capsobjtype, &error); + fail_unless(capability != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_capability_set_name(capability, "capmock1"); + + /** capmock2 */ + capability = osync_capability_new(capsobjtype, &error); + fail_unless(capability != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_capability_set_name(capability, "capmock2"); + + /** capmock3 */ + capability = osync_capability_new(capsobjtype, &error); + fail_unless(capability != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_capability_set_name(capability, "capmock3"); + + fail_unless(osync_capabilities_assemble(capabilities, &buffer, &size, &error) != FALSE, NULL); + fail_unless(error == NULL, NULL); + fail_unless(size > 0, NULL); + fail_unless(buffer != NULL, NULL); + + osync_capabilities_unref(capabilities); + + /** Parse */ + capabilities = osync_capabilities_parse(buffer, size, &error); + fail_unless(capabilities != NULL, NULL); + fail_unless(error == NULL, NULL); + + capsobjtype = osync_capabilities_get_objtype(capabilities, "contact"); fail_unless(capsobjtype != NULL, NULL); OSyncList *c = osync_capabilities_objtype_get_caps(capsobjtype); - fail_unless(osync_list_length(c) == 9, NULL); + fail_unless(osync_list_length(c) == 3, NULL); - OSyncCapability *cap = osync_list_nth_data(c, 6); - fail_unless(!strcmp(osync_capability_get_name(cap), "im_jabber"), NULL); + /** capmock1 */ + OSyncCapability *cap = osync_list_nth_data(c, 0); + fail_unless(cap != NULL, NULL); + fail_unless(!strcmp(osync_capability_get_name(cap), "capmock1"), NULL); + + /** capmock2 */ + cap = osync_list_nth_data(c, 1); + fail_unless(cap != NULL, NULL); + fail_unless(!strcmp(osync_capability_get_name(cap), "capmock2"), NULL); + + /** capmock3 */ + cap = osync_list_nth_data(c, 2); + fail_unless(cap != NULL, NULL); + fail_unless(!strcmp(osync_capability_get_name(cap), "capmock3"), NULL); osync_capabilities_unref(capabilities); |