You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
(56) |
Apr
(109) |
May
(15) |
Jun
(3) |
Jul
(37) |
Aug
(96) |
Sep
(40) |
Oct
(4) |
Nov
(54) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(47) |
Feb
(30) |
Mar
(102) |
Apr
(120) |
May
(68) |
Jun
(54) |
Jul
(53) |
Aug
(122) |
Sep
(190) |
Oct
(71) |
Nov
(85) |
Dec
(108) |
2007 |
Jan
(72) |
Feb
(190) |
Mar
(53) |
Apr
(101) |
May
(145) |
Jun
(148) |
Jul
(167) |
Aug
(143) |
Sep
(23) |
Oct
(198) |
Nov
(223) |
Dec
(195) |
2008 |
Jan
(100) |
Feb
(129) |
Mar
(79) |
Apr
(77) |
May
(34) |
Jun
(95) |
Jul
(112) |
Aug
(160) |
Sep
(82) |
Oct
(124) |
Nov
(199) |
Dec
(355) |
2009 |
Jan
(436) |
Feb
(89) |
Mar
(298) |
Apr
(189) |
May
(33) |
Jun
(88) |
Jul
(105) |
Aug
(44) |
Sep
(181) |
Oct
(87) |
Nov
(75) |
Dec
(1) |
2010 |
Jan
(63) |
Feb
(21) |
Mar
(3) |
Apr
(1) |
May
(1) |
Jun
(3) |
Jul
(26) |
Aug
(37) |
Sep
(26) |
Oct
(15) |
Nov
(13) |
Dec
|
From: <svn...@op...> - 2009-04-30 09:55:54
|
Author: bellmich Date: Thu Apr 30 11:55:50 2009 New Revision: 1078 URL: http://libsyncml.opensync.org/changeset/1078 Log: - patch for ticket #237 (supplied by Kwan hong Lee) - added two explicit test cases for the two different situations Modified: trunk/libsyncml/parser/sml_xml_parse.c trunk/tests/CMakeLists.txt trunk/tests/check_xml_parser.c Modified: trunk/libsyncml/parser/sml_xml_parse.c ============================================================================== --- trunk/libsyncml/parser/sml_xml_parse.c Thu Apr 30 11:53:22 2009 (r1077) +++ trunk/libsyncml/parser/sml_xml_parse.c Thu Apr 30 11:55:50 2009 (r1078) @@ -747,54 +747,64 @@ goto error_free_item; } } else if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_DATA)) { - switch (type) { - case SML_COMMAND_TYPE_ALERT: - if (!_smlXmlParserStep(parser)) { - smlErrorSet(error, SML_ERROR_GENERIC, "The next element after the starting Data element in an Item is missing."); - goto error_free_item; - } + /* Do nothing if the Data element is empty. + * The first emptyness test only covers <Data/>. + * + * Example: Funambol with WBXML on scheduleworld.com + */ + if (!xmlTextReaderIsEmptyElement(parser->reader)) { + switch (type) { + case SML_COMMAND_TYPE_ALERT: + if (!_smlXmlParserStep(parser)) { + smlErrorSet(error, SML_ERROR_GENERIC, "The next element after the starting Data element in an Item is missing."); + goto error_free_item; + } - if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_DATA) && - xmlTextReaderNodeType(parser->reader) == XML_NODE_CLOSE) { - /* empty Data element - * e.g. from Funambol at scheduleworld.com */ - smlTrace(TRACE_INTERNAL, "%s: detected empty data element", __func__); - break; - } + if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_DATA) && + xmlTextReaderNodeType(parser->reader) == XML_NODE_CLOSE) { + /* Do nothing if the Data element is empty. + * This only covers <Data></Data>. + * + * Example: Funambol with XML on scheduleworld.com + */ + smlTrace(TRACE_INTERNAL, "%s: detected empty data element", __func__); + break; + } + + SmlAnchor *anchor = NULL; + if (xmlTextReaderNodeType(parser->reader) == XML_NODE_TEXT) { + /* Google just copies the element Next from the Anchor + * Please see ticket #230 for more details. + */ + anchor = smlTryMalloc0(sizeof(SmlAnchor), error); + if (!anchor) + goto error_free_item; + anchor->next = g_strdup((char *)xmlTextReaderConstValue(parser->reader)); + } else { + /* normal behaviour with anchor copy */ + if (!_smlAnchorParse(&anchor, parser, error)) + goto error_free_item; + } + item->anchor = anchor; - SmlAnchor *anchor = NULL; - if (xmlTextReaderNodeType(parser->reader) == XML_NODE_TEXT) { - /* Google just copies the element Next from the Anchor - * Please see ticket #230 for more details. - */ - anchor = smlTryMalloc0(sizeof(SmlAnchor), error); - if (!anchor) + if (!_smlXmlParserStep(parser)) { + smlErrorSet(error, SML_ERROR_GENERIC, "The closing Data element in an Item is missing."); goto error_free_item; - anchor->next = g_strdup((char *)xmlTextReaderConstValue(parser->reader)); - } else { - /* normal behaviour with anchor copy */ - if (!_smlAnchorParse(&anchor, parser, error)) + } + break; + default:; + char *data = NULL; + unsigned int size = 0; + if (!_smlXmlParserGetData(parser, &data, &size, SML_ELEMENT_DATA, error)) goto error_free_item; - } - item->anchor = anchor; - - if (!_smlXmlParserStep(parser)) { - smlErrorSet(error, SML_ERROR_GENERIC, "The closing Data element in an Item is missing."); - goto error_free_item; - } - break; - default:; - char *data = NULL; - unsigned int size = 0; - if (!_smlXmlParserGetData(parser, &data, &size, SML_ELEMENT_DATA, error)) - goto error_free_item; - - if (!smlItemAddData(item, data, size, error)) { + + if (!smlItemAddData(item, data, size, error)) { + smlSafeCFree(&data); + goto error_free_item; + } + smlSafeCFree(&data); - goto error_free_item; - } - - smlSafeCFree(&data); + } } } else if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_MOREDATA)) { if (parser->version == SML_VERSION_10) { Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Thu Apr 30 11:53:22 2009 (r1077) +++ trunk/tests/CMakeLists.txt Thu Apr 30 11:55:50 2009 (r1078) @@ -147,6 +147,8 @@ SML_ADD_TESTCASE( xml_parser_ctcap_property_size ) SML_ADD_TESTCASE( xml_parser_ctcap11_size ) SML_ADD_TESTCASE( xml_parser_item_with_meta_in_status ) + SML_ADD_TESTCASE( xml_parser_item_with_meta_and_long_empty_data_in_status ) + SML_ADD_TESTCASE( xml_parser_item_with_meta_and_short_empty_data_in_status ) SML_END_TEST() SML_START_TEST( "XML Assembler" xmlassembler check_xml_assembler.c ${TEST_TARGET_LIBRARIES} ) Modified: trunk/tests/check_xml_parser.c ============================================================================== --- trunk/tests/check_xml_parser.c Thu Apr 30 11:53:22 2009 (r1077) +++ trunk/tests/check_xml_parser.c Thu Apr 30 11:55:50 2009 (r1078) @@ -1701,10 +1701,8 @@ } END_TEST -/* - */ -/* some scheduleworld.com - * item in status including meta data like maxobjsize +/* Funambol (e.g. scheduleworld.com) embeds Item in to Status + * including the Meta element with MaxObjSize for example. */ START_TEST (xml_parser_item_with_meta_in_status) { @@ -1724,6 +1722,74 @@ "<Data>200</Data>" \ "<Item>" \ "<Meta><MaxObjSize>1024000</MaxObjSize></Meta>" \ + "</Item>" \ + "</Status>" \ + "<Final/>" \ + "</SyncBody>" \ + "</SyncML>"; + + /* check for valid document */ + + SmlError *error = NULL; + SmlParser *parser = start_parser(data, &error); + sml_fail_unless(parser != NULL, "%s", smlErrorPrint(&error)); + + /* parse header and first status */ + + SmlHeader *header = NULL; + SmlCred *cred = NULL; + + sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); + sml_fail_unless(header != NULL, NULL); + sml_fail_unless(cred == NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + sml_fail_unless(header->messageID == 4, "The message ID must be 4."); + smlHeaderFree(header); + + SmlStatus *status = NULL; + sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); + sml_fail_unless(status != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + smlStatusUnref(status); + + /* parse second status with item and meta info */ + + sml_fail_unless(smlParserGetStatus(parser, &status, &error), "%s", smlErrorPrint(&error)); + sml_fail_unless(status != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + smlStatusUnref(status); + + /* cleanup */ + + smlParserFree(parser); +} +END_TEST + +/* Funambol (e.g. scheduleworld.com) embeds Item in to Status + * including the Meta element with MaxObjSize for example. + * The Item element can include an empty Data element too. + * If XML native communication is used then an empty Data + * element usually looks like "<Data></Data>". + */ +START_TEST (xml_parser_item_with_meta_and_long_empty_data_in_status) +{ + const char *data = "<SyncML>" \ + "<SyncHdr><VerDTD>1.1</VerDTD><VerProto>SyncML/1.1</VerProto><SessionID>40142</SessionID><MsgID>4</MsgID><Target><LocURI>joh...@ex...</LocURI><LocName>1234567</LocName></Target><Source><LocURI>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</LocURI></Source><RespURI>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</RespURI></SyncHdr>" \ + "<SyncBody>" \ + "<Status>" \ + "<CmdID>1</CmdID><MsgRef>4</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>" \ + "<TargetRef>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</TargetRef>" \ + "<SourceRef>jku@vili</SourceRef><Data>200</Data>" \ + "</Status>" \ + "<Status>" \ + "<CmdID>2</CmdID>" \ + "<MsgRef>4</MsgRef>" \ + "<CmdRef>10</CmdRef>" \ + "<Cmd>Alert</Cmd>" \ + "<Data>200</Data>" \ + "<Item>" \ + "<Meta><MaxObjSize>1024000</MaxObjSize></Meta>" \ "<Data></Data>" \ "</Item>" \ "</Status>" \ @@ -1769,5 +1835,76 @@ } END_TEST + +/* Funambol (e.g. scheduleworld.com) embeds Item in to Status + * including the Meta element with MaxObjSize for example. + * The Item element can include an empty Data element too. + * If WBXML encoded communication is used then an empty Data + * element usually looks like "<Data/>". + */ +START_TEST (xml_parser_item_with_meta_and_short_empty_data_in_status) +{ + const char *data = "<SyncML>" \ + "<SyncHdr><VerDTD>1.1</VerDTD><VerProto>SyncML/1.1</VerProto><SessionID>40142</SessionID><MsgID>4</MsgID><Target><LocURI>joh...@ex...</LocURI><LocName>1234567</LocName></Target><Source><LocURI>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</LocURI></Source><RespURI>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</RespURI></SyncHdr>" \ + "<SyncBody>" \ + "<Status>" \ + "<CmdID>1</CmdID><MsgRef>4</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>" \ + "<TargetRef>http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==</TargetRef>" \ + "<SourceRef>jku@vili</SourceRef><Data>200</Data>" \ + "</Status>" \ + "<Status>" \ + "<CmdID>2</CmdID>" \ + "<MsgRef>4</MsgRef>" \ + "<CmdRef>10</CmdRef>" \ + "<Cmd>Alert</Cmd>" \ + "<Data>200</Data>" \ + "<Item>" \ + "<Meta><MaxObjSize>1024000</MaxObjSize></Meta>" \ + "<Data/>" \ + "</Item>" \ + "</Status>" \ + "<Final/>" \ + "</SyncBody>" \ + "</SyncML>"; + + /* check for valid document */ + + SmlError *error = NULL; + SmlParser *parser = start_parser(data, &error); + sml_fail_unless(parser != NULL, "%s", smlErrorPrint(&error)); + + /* parse header and first status */ + + SmlHeader *header = NULL; + SmlCred *cred = NULL; + + sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); + sml_fail_unless(header != NULL, NULL); + sml_fail_unless(cred == NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + sml_fail_unless(header->messageID == 4, "The message ID must be 4."); + smlHeaderFree(header); + + SmlStatus *status = NULL; + sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); + sml_fail_unless(status != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + smlStatusUnref(status); + + /* parse second status with item and meta info */ + + sml_fail_unless(smlParserGetStatus(parser, &status, &error), "%s", smlErrorPrint(&error)); + sml_fail_unless(status != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + smlStatusUnref(status); + + /* cleanup */ + + smlParserFree(parser); +} +END_TEST + + @SML_TESTCASE_CODE@ |
From: <svn...@op...> - 2009-04-30 09:53:27
|
Author: bellmich Date: Thu Apr 30 11:53:22 2009 New Revision: 1077 URL: http://libsyncml.opensync.org/changeset/1077 Log: The Funambol server on scheduleworld.com returned error code 511. So we have to implement this code. Modified: trunk/libsyncml/sml_error.c trunk/libsyncml/sml_error.h Modified: trunk/libsyncml/sml_error.c ============================================================================== --- trunk/libsyncml/sml_error.c Wed Apr 29 16:47:30 2009 (r1076) +++ trunk/libsyncml/sml_error.c Thu Apr 30 11:53:22 2009 (r1077) @@ -161,6 +161,10 @@ "server's ALERT (which is included in the same package as the " \ "Status 508). The only valid values for this ALERT are either a slow " \ "sync (201) or a refresh with the server."; + case SML_ERROR_SERVER_FAILURE: + return "Server failure. A severe error occurred in the server while " \ + "processing the request. The originator SHOULD NOT retry the " \ + "request."; /* Internal errors */ case SML_ERROR_INTERNAL_IO_ERROR: Modified: trunk/libsyncml/sml_error.h ============================================================================== --- trunk/libsyncml/sml_error.h Wed Apr 29 16:47:30 2009 (r1076) +++ trunk/libsyncml/sml_error.h Thu Apr 30 11:53:22 2009 (r1077) @@ -100,6 +100,7 @@ SML_ERROR_NOT_IMPLEMENTED = 501, SML_ERROR_SERVICE_UNAVAILABLE = 503, SML_ERROR_REQUIRE_REFRESH = 508, + SML_ERROR_SERVER_FAILURE = 511, /* Internal errors - never ever send this via SyncML */ SML_ERROR_INTERNAL_IO_ERROR = 1501, |
From: <svn...@op...> - 2009-04-29 14:47:36
|
Author: bellmich Date: Wed Apr 29 16:47:30 2009 New Revision: 1076 URL: http://libsyncml.opensync.org/changeset/1076 Log: committed modified patch from ticket #235 - The original patch was modified because the end of the new function could be reached without a return statement. - A new test was introduced to verify the change. Modified: trunk/libsyncml/parser/sml_xml_parse.c trunk/tests/CMakeLists.txt trunk/tests/check_xml_parser.c Modified: trunk/libsyncml/parser/sml_xml_parse.c ============================================================================== --- trunk/libsyncml/parser/sml_xml_parse.c Wed Apr 29 10:05:49 2009 (r1075) +++ trunk/libsyncml/parser/sml_xml_parse.c Wed Apr 29 16:47:30 2009 (r1076) @@ -56,6 +56,25 @@ return ret; } +static SmlBool _smlXmlSkipNode(SmlXmlParser *parser) +{ + int node_type; + + if (xmlTextReaderNext(parser->reader) != 1) + return FALSE; + + node_type = xmlTextReaderNodeType(parser->reader); + while (xmlTextReaderNodeType(parser->reader) == XML_READER_TYPE_DOCUMENT_TYPE || + xmlTextReaderNodeType(parser->reader) == XML_READER_TYPE_WHITESPACE || + xmlTextReaderNodeType(parser->reader) == XML_READER_TYPE_SIGNIFICANT_WHITESPACE) + { + if (!_smlXmlParserStep (parser)) + return FALSE; + } + + return TRUE; +} + static SmlBool _smlXmlParserExpectNode(SmlXmlParser *parser, int type, SmlBool empty, const char *name, SmlError **error) { CHECK_ERROR_REF @@ -556,7 +575,8 @@ if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_MEM)) { /* Ignored for now */ - if (xmlTextReaderNext(parser->reader) != 1) { + smlTrace(TRACE_INTERNAL, "%s: Skipping mem node"); + if (!_smlXmlSkipNode(parser)) { smlErrorSet(error, SML_ERROR_GENERIC, "Unable to skip mem node"); goto error; } @@ -3440,7 +3460,7 @@ } else if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_EXT)) { /* Ignored for now */ smlTrace(TRACE_INTERNAL, "%s: Skipping ext node"); - if (xmlTextReaderNext(parser->reader) != 1) { + if (!_smlXmlSkipNode(parser)) { smlErrorSet(error, SML_ERROR_GENERIC, "Unable to skip ext node"); goto error; } Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Wed Apr 29 10:05:49 2009 (r1075) +++ trunk/tests/CMakeLists.txt Wed Apr 29 16:47:30 2009 (r1076) @@ -141,6 +141,7 @@ SML_ADD_TESTCASE( xml_parser_devinf ) SML_ADD_TESTCASE( xml_parser_devinf_ctcap ) SML_ADD_TESTCASE( xml_parser_devinf12 ) + SML_ADD_TESTCASE( xml_parser_devinf_ext ) SML_ADD_TESTCASE( xml_parser_empty_data_element ) SML_ADD_TESTCASE( xml_parser_msgref_zero ) SML_ADD_TESTCASE( xml_parser_ctcap_property_size ) Modified: trunk/tests/check_xml_parser.c ============================================================================== --- trunk/tests/check_xml_parser.c Wed Apr 29 10:05:49 2009 (r1075) +++ trunk/tests/check_xml_parser.c Wed Apr 29 16:47:30 2009 (r1076) @@ -1406,6 +1406,71 @@ } END_TEST +START_TEST (xml_parser_devinf_ext) +{ + /* The following test ensures that the parser tolerates Ext in DevInf + * like this one from a ticket: + * <Ext> + * <XNam>X-funambol-smartslow</XNam> + * </Ext> + */ + + const char *data = "<?xml version=\"1.0\"?><!DOCTYPE SyncML PUBLIC \"-//SYNCML//DTD SyncML 1.1//EN\" \"http://www.syncml.org/docs/syncml_represent_v11_20020213.dtd\"><SyncML xmlns=\"syncml:SYNCML1.1\"><SyncHdr><VerDTD>1.1</VerDTD><VerProto>SyncML/1.1</VerProto><SessionID>21</SessionID><MsgID>1</MsgID><Target><LocURI>PC Suite</LocURI></Target><Source><LocURI>IMEI:XXXX</LocURI></Source><Meta><MaxMsgSize xmlns=\"syncml:metinf\">10000</MaxMsgSize></Meta></SyncHdr><SyncBody><Put><CmdID>8</CmdID><Meta><Type xmlns=\"syncml:metinf\">application/vnd.syncml-devinf+xml</Type></Meta><Item><Source><LocURI>./devinf11</LocURI></Source><Data><DevInf xmlns=\"syncml:devinf\"><VerDTD>1.1</VerDTD><Man>NOKIA</Man><Mod>6680</Mod><SwV>3.04.37</SwV><DevID>IMEI:XXXX</DevID><DevTyp>phone</DevTyp><SupportLargeObjs/><SupportNumberOfChanges/><DataStore><SourceRef>./C\\Systemata\\Calendar</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Rx-Pref><Rx><CTType>text/calendar</CTType><VerCT>2.0</VerCT></Rx><Tx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Tx-Pref><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><DataStore><SourceRef>./C\\System\\\\\\Data\\Contacts.cdb</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Rx-Pref><Rx><CTType>text/vcard</CTType><VerCT>3.0</VerCT></Rx><Tx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Tx-Pref><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><DataStore><SourceRef>./C\\System\\Data\\Notepad.dat</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/plain</CTType><VerCT>1.0</VerCT></Rx-Pref><Rx><CTType>text/plain</CTType><VerCT>1.0</VerCT></Rx><Tx-Pref><CTType>text/plain</CTType><VerCT>1.0</VerCT></Tx-Pref><Tx><CTType>text/plain</CTType><VerCT>1.0</VerCT></Tx><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><CTCap><CTType>text/x-vcalendar</CTType><PropName>BEGIN</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>END</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>VERSION</PropName><ValEnum>1.0</ValEnum><PropName>UID</PropName><PropName>SUMMARY</PropName><PropName>DESCRIPTION</PropName><PropName>DTEND</PropName><PropName>DTSTART</PropName><PropName>AALARM</PropName><ParamName>TYPE</ParamName><PropName>CLASS</PropName><ValEnum>PUBLIC</ValEnum><ValEnum>PRIVATE</ValEnum><ValEnum>CONFIDENTIAL</ValEnum><PropName>COMPLETED</PropName><PropName>LOCATION</PropName><PropName>DCREATED</PropName><PropName>LAST-MODIFIED</PropName><PropName>PRIORITY</PropName><PropName>STATUS</PropName><PropName>RRULE</PropName><PropName>DUE</PropName><PropName>EXDATE</PropName><PropName>X-EPOCAGENDAENTRYTYPE</PropName><CTType>text/calendar</CTType><PropName>BEGIN</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>END</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>VERSION</PropName><ValEnum>2.0</ValEnum><PropName>UID</PropName><PropName>SUMMARY</PropName><PropName>DESCRIPTION</PropName><PropName>DTEND</PropName><PropName>DTSTART</PropName><PropName>AALARM</PropName><ParamName>TYPE</ParamName><PropName>CLASS</PropName><ValEnum>PUBLIC</ValEnum><ValEnum>PRIVATE</ValEnum><ValEnum>CONFIDENTIAL</ValEnum><PropName>COMPLETED</PropName><PropName>LOCATION</PropName><PropName>DCREATED</PropName><PropName>LAST-MODIFIED</PropName><PropName>PRIORITY</PropName><PropName>STATUS</PropName><PropName>RRULE</PropName><PropName>DUE</PropName><PropName>EXDATE</PropName><PropName>X-EPOCAGENDAENTRYTYPE</PropName><CTType>text/x-vcard</CTType><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum><PropName>END</PropName><ValEnum>VCARD</ValEnum><PropName>VERSION</PropName><ValEnum>2.1</ValEnum><PropName>REV</PropName><PropName>N</PropName><PropName>ADR</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>TEL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><ParamName>CELL</ParamName><ParamName>PAGER</ParamName><ParamName>FAX</ParamName><ParamName>VIDEO</ParamName><PropName>FN</PropName><PropName>EMAIL</PropName><ParamName>INTERNET</ParamName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>URL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>NOTE</PropName><PropName>TITLE</PropName><PropName>ORG</PropName><PropName>PHOTO</PropName><PropName>BDAY</PropName><PropName>SOUND</PropName><ParamName>X-IRMC-N</ParamName><CTType>text/vcard</CTType><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum><PropName>END</PropName><ValEnum>VCARD</ValEnum><PropName>VERSION</PropName><ValEnum>3.0</ValEnum><PropName>REV</PropName><PropName>N</PropName><PropName>ADR</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>TEL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><ParamName>CELL</ParamName><ParamName>PAGER</ParamName><ParamName>FAX</ParamName><ParamName>VIDEO</ParamName><PropName>FN</PropName><PropName>EMAIL</PropName><ParamName>INTERNET</ParamName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>URL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>NOTE</PropName><PropName>TITLE</PropName><PropName>ORG</PropName><PropName>PHOTO</PropName><PropName>BDAY</PropName><PropName>SOUND</PropName><ParamName>X-IRMC-N</ParamName><CTType>text/plain</CTType></CTCap>\n<Ext>\n <XNam>X-funambol-smartslow</XNam>\n</Ext></DevInf></Data></Item></Put><Final/></SyncBody></SyncML>"; + + SmlError *error = NULL; + SmlParser *parser = start_parser(data, &error); + sml_fail_unless(parser != NULL, "%s", smlErrorPrint(&error)); + + SmlHeader *header = NULL; + SmlCred *cred = NULL; + + sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); + sml_fail_unless(header != NULL, NULL); + sml_fail_unless(cred == NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + sml_fail_unless(header->messageID == 1, NULL); + smlHeaderFree(header); + + SmlStatus *status = NULL; + sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); + sml_fail_unless(status == NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); + sml_fail_unless(cmd != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + sml_fail_unless(cmd->cmdID == 8, NULL); + sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); + sml_fail_unless(cmd->private.access.item != NULL, NULL); + + char *buffer = NULL; + unsigned int size = 0; + sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); + sml_fail_unless(error == NULL, NULL); + + SmlDevInf *devinf = smlDevInfParse(buffer, size, &error); + sml_fail_unless(devinf != NULL, "%s", smlErrorPrint(&error)); + sml_fail_unless(error == NULL, NULL); + smlDevInfUnref(devinf); + + smlCommandUnref(cmd); + + sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); + sml_fail_unless(cmd == NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + SmlBool final = FALSE; + SmlBool end = TRUE; + sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); + sml_fail_unless(error == NULL, NULL); + sml_fail_unless(final == TRUE, NULL); + sml_fail_unless(end == FALSE, NULL); + + smlParserFree(parser); +} +END_TEST + START_TEST (xml_parser_empty_data_element) { const char *data = "<SyncML><SyncHdr><VerProto>SyncML/1.2</VerProto><VerDTD>1.2</VerDTD><MsgID>1</MsgID><SessionID>1</SessionID><Target><LocURI>test</LocURI></Target><Source><LocURI>test</LocURI></Source></SyncHdr><SyncBody><Get><CmdID>2</CmdID><Item><Target><LocURI>./devinf12</LocURI></Target><Data/></Item></Get></SyncBody></SyncML>"; |
From: <svn...@op...> - 2009-04-29 12:16:56
|
Author: ianmartin Date: Wed Apr 29 14:15:50 2009 New Revision: 5634 URL: http://www.opensync.org/changeset/5634 Log: Some simple tests for OSyncMember Modified: trunk/tests/CMakeLists.txt trunk/tests/data/filter_save_and_load/configs/group/1/syncmember.conf trunk/tests/group-tests/check_member.c Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Tue Apr 28 19:28:17 2009 (r5633) +++ trunk/tests/CMakeLists.txt Wed Apr 29 14:15:50 2009 (r5634) @@ -273,6 +273,15 @@ BUILD_CHECK_TEST( member group-tests/check_member.c ${TEST_TARGET_LIBRARIES} ) OSYNC_TESTCASE(member member_new) +OSYNC_TESTCASE(member member_ref) +OSYNC_TESTCASE(member member_name) +OSYNC_TESTCASE(member member_name_save_and_load) +OSYNC_TESTCASE(member member_pluginname) +OSYNC_TESTCASE(member member_configdir) +OSYNC_TESTCASE(member member_configdir_deep_path) +OSYNC_TESTCASE(member member_config) +OSYNC_TESTCASE(member member_get_config_or_default) +OSYNC_TESTCASE(member member_id) BUILD_CHECK_TEST( module module-tests/check_module.c ${TEST_TARGET_LIBRARIES} ) OSYNC_TESTCASE(module module_create) Modified: trunk/tests/data/filter_save_and_load/configs/group/1/syncmember.conf ============================================================================== --- trunk/tests/data/filter_save_and_load/configs/group/1/syncmember.conf Tue Apr 28 19:28:17 2009 (r5633) +++ trunk/tests/data/filter_save_and_load/configs/group/1/syncmember.conf Wed Apr 29 14:15:50 2009 (r5634) @@ -1,2 +1,4 @@ <?xml version="1.0"?> -<syncmember version="1.0"><pluginname>file-sync</pluginname></syncmember> +<syncmember version="1.0"> + <pluginname>file-sync</pluginname> +</syncmember> Modified: trunk/tests/group-tests/check_member.c ============================================================================== --- trunk/tests/group-tests/check_member.c Tue Apr 28 19:28:17 2009 (r5633) +++ trunk/tests/group-tests/check_member.c Wed Apr 29 14:15:50 2009 (r5634) @@ -1,7 +1,9 @@ #include <check.h> #include <opensync/opensync.h> #include <opensync/opensync-group.h> +#include <opensync/opensync-plugin.h> #include <opensync/opensync_internals.h> +#include <opensync/group/opensync_member_internals.h> #include <stdlib.h> #include <glib.h> @@ -9,16 +11,337 @@ #include "support.h" +/** @brief Calls osync_member_new setting the schema dir and + checking for success + */ +OSyncMember *osync_testing_member_new(const char *testbed) +{ + OSyncError *error = NULL; + OSyncMember *member = NULL; + member = osync_member_new(&error); + fail_unless(member != NULL, "Member == NULL on creation"); + fail_unless(error == NULL, NULL); + if (testbed) + osync_member_set_schemadir(member, testbed); + return member; +} + START_TEST (member_new) { - OSyncMember *member = NULL; - member = osync_member_new(NULL); - fail_unless(member != NULL, "Member == NULL on creation"); - osync_member_unref(member); + OSyncMember *member = osync_testing_member_new(NULL); + osync_member_unref(member); +} +END_TEST + +START_TEST (member_ref) +{ + OSyncMember *member = NULL; + OSyncMember *member2 = NULL; + member = osync_testing_member_new(NULL); + + member2 = osync_member_ref(member); + fail_unless(member == member2, NULL); + + osync_member_unref(member); + osync_member_unref(member); +} +END_TEST + +START_TEST (member_name) +{ + OSyncMember *member = NULL; + const char *membername = NULL; + member = osync_testing_member_new(NULL); + + osync_member_set_name(member, "foo"); + membername = osync_member_get_name(member); + fail_unless(membername != NULL, NULL); + fail_unless(strcmp(membername, "foo") == 0, "Expecting member name 'foo' got '%s'\n", membername); + + /* Overwrite (leak check) */ + osync_member_set_name(member, "bar"); + membername = osync_member_get_name(member); + fail_unless(membername != NULL, NULL); + fail_unless(strcmp(membername, "bar") == 0, NULL); + + osync_member_unref(member); +} +END_TEST + +START_TEST (member_name_save_and_load) +{ + char *testbed = setup_testbed("filter_save_and_load"); + + OSyncError *error = NULL; + OSyncMember *member = NULL; + const char *membername = NULL; + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_set_name(member, "foo"); + membername = osync_member_get_name(member); + fail_unless(membername != NULL, NULL); + fail_unless(strcmp(membername, "foo") == 0, NULL); + + fail_unless(osync_member_save(member, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + member = osync_testing_member_new(testbed); + + /* Reload and check it worked */ + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + membername = osync_member_get_name(member); + fail_unless(membername != NULL, NULL); + fail_unless(strcmp(membername, "foo") == 0, "After reloading member got name '%s' expecting 'foo'\n", membername); + + osync_member_unref(member); + destroy_testbed(testbed); +} +END_TEST + +START_TEST (member_pluginname) +{ + char *testbed = setup_testbed("filter_save_and_load"); + + OSyncError *error = NULL; + OSyncMember *member = NULL; + const char *pluginname = NULL; + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + pluginname = osync_member_get_pluginname(member); + fail_unless(pluginname != NULL, NULL); + fail_unless(strcmp(pluginname, "file-sync") == 0, NULL); + + osync_member_set_pluginname(member, "foo"); + pluginname = osync_member_get_pluginname(member); + fail_unless(pluginname != NULL, NULL); + fail_unless(strcmp(pluginname, "foo") == 0, NULL); + + osync_member_set_pluginname(member, "bar"); + pluginname = osync_member_get_pluginname(member); + fail_unless(pluginname != NULL, NULL); + fail_unless(strcmp(pluginname, "bar") == 0, NULL); + + fail_unless(osync_member_save(member, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + member = osync_testing_member_new(testbed); + + /* Reload and check it worked */ + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + pluginname = osync_member_get_pluginname(member); + fail_unless(pluginname != NULL, NULL); + fail_unless(strcmp(pluginname, "bar") == 0, "After reloading member got plugin name '%s' expecting 'bar'\n", pluginname); + + osync_member_unref(member); + destroy_testbed(testbed); +} +END_TEST + + +START_TEST (member_configdir) +{ + char *testbed = setup_testbed("filter_save_and_load"); + OSyncError *error = NULL; + OSyncMember *member = NULL; + const char *configdir = NULL; + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + configdir = osync_member_get_configdir(member); + fail_unless(configdir != NULL, NULL); + fail_unless(strcmp(configdir, "configs/group/1") == 0, NULL); + + + osync_member_set_configdir(member, "configdir_test"); + configdir = osync_member_get_configdir(member); + fail_unless(configdir != NULL, NULL); + fail_unless(strcmp(configdir, "configdir_test") == 0, NULL); + + fail_unless(osync_member_save(member, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + + fail_unless(osync_testing_diff("configs/group/1", "configdir_test"), NULL); + + destroy_testbed(testbed); +} +END_TEST + +/** TODO: are non-existant paths more than one directory deep acceptable? */ +START_TEST (member_configdir_deep_path) +{ + char *testbed = setup_testbed("filter_save_and_load"); + OSyncError *error = NULL; + OSyncMember *member = NULL; + const char *configdir = NULL; + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + configdir = osync_member_get_configdir(member); + fail_unless(configdir != NULL, NULL); + fail_unless(strcmp(configdir, "configs/group/1") == 0, NULL); + + + osync_member_set_configdir(member, "configdir_test/group/1"); + configdir = osync_member_get_configdir(member); + fail_unless(configdir != NULL, NULL); + fail_unless(strcmp(configdir, "configdir_test/group/1") == 0, NULL); + + fail_unless(osync_member_save(member, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + + fail_unless(osync_testing_diff("configs/group/1", "configdir_test/group/1"), NULL); + + destroy_testbed(testbed); +} +END_TEST + +START_TEST (member_config) +{ + OSyncError *error = NULL; + OSyncMember *member = NULL; + OSyncPluginConfig *config = NULL; + OSyncPluginConfig *config2 = NULL; + member = osync_testing_member_new(NULL); + + fail_if(osync_member_has_config(member), NULL); + + config = osync_plugin_config_new(&error); + fail_unless(config != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_member_set_config(member, config); + fail_unless(osync_member_has_config(member), NULL); + fail_unless(osync_member_get_config(member, &error) == config, NULL); + fail_unless(error == NULL, NULL); + + fail_unless(osync_member_get_config_or_default(member, &error) == config, NULL); + fail_unless(error == NULL, NULL); + + osync_plugin_config_unref(config); + config2 = osync_plugin_config_new(&error); + fail_unless(config != NULL, NULL); + fail_unless(error == NULL, NULL); + + osync_member_set_config(member, config2); + fail_unless(osync_member_has_config(member), NULL); + fail_unless(osync_member_get_config(member, &error) == config2, NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + osync_plugin_config_unref(config2); +} +END_TEST + +/* Need to test + if config loaded then returned config is same + if config file then that is loaded + if no config then default is loaded +*/ +START_TEST (member_get_config_or_default) +{ + char *testbed = setup_testbed("filter_save_and_load"); + OSyncError *error = NULL; + OSyncMember *member = NULL; + OSyncPluginConfig *config = NULL; + OSyncPluginConfig *config2 = NULL; + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + config = osync_member_get_config_or_default(member, &error); + fail_unless(config != NULL, NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_member_has_config(member), NULL); + + fail_unless(osync_member_save(member, &error), NULL); + fail_unless(error == NULL, NULL); + + osync_member_unref(member); + fail_unless(osync_testing_file_exists("configs/group/1/file-sync.conf")); + + /* Reload with config in place */ + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + config = osync_member_get_config_or_default(member, &error); + fail_unless(config != NULL, NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_member_has_config(member), NULL); + + /* Check we get the same config now it has been loaded */ + config2 = osync_member_get_config_or_default(member, &error); + fail_unless(config2 != NULL, NULL); + fail_unless(error == NULL, NULL); + fail_unless(config2 == config, NULL); + + config2 = osync_member_get_config(member, &error); + fail_unless(config2 != NULL, NULL); + fail_unless(error == NULL, NULL); + fail_unless(config2 == config, NULL); + + osync_member_unref(member); + destroy_testbed(testbed); +} +END_TEST + +START_TEST (member_id) +{ + char *testbed = setup_testbed("filter_save_and_load"); + + OSyncError *error = NULL; + OSyncMember *member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/2", &error), NULL); + fail_unless(error == NULL, NULL); + + fail_unless((int)osync_member_get_id(member) == 2, NULL); + osync_member_unref(member); + + member = osync_testing_member_new(testbed); + + fail_unless(osync_member_load(member, "configs/group/1", &error), NULL); + fail_unless(error == NULL, NULL); + + fail_unless((int)osync_member_get_id(member) == 1, NULL); + osync_member_unref(member); + + destroy_testbed(testbed); } END_TEST OSYNC_TESTCASE_START("member") OSYNC_TESTCASE_ADD(member_new) +OSYNC_TESTCASE_ADD(member_ref) +OSYNC_TESTCASE_ADD(member_name) +OSYNC_TESTCASE_ADD(member_name_save_and_load) +OSYNC_TESTCASE_ADD(member_pluginname) +OSYNC_TESTCASE_ADD(member_configdir) +OSYNC_TESTCASE_ADD(member_configdir_deep_path) +OSYNC_TESTCASE_ADD(member_config) +OSYNC_TESTCASE_ADD(member_get_config_or_default) +OSYNC_TESTCASE_ADD(member_id) OSYNC_TESTCASE_END |
From: <svn...@op...> - 2009-04-29 08:05:58
|
Author: bellmich Date: Wed Apr 29 10:05:49 2009 New Revision: 1075 URL: http://libsyncml.opensync.org/changeset/1075 Log: patch for ticket #233 (sanitized item UIDs) Modified: trunk/tools/syncml-ds-tool.c Modified: trunk/tools/syncml-ds-tool.c ============================================================================== --- trunk/tools/syncml-ds-tool.c Wed Apr 29 09:27:17 2009 (r1074) +++ trunk/tools/syncml-ds-tool.c Wed Apr 29 10:05:49 2009 (r1075) @@ -513,6 +513,24 @@ exit(3); } +static char * getSafeFilename(const char *filename) +{ + SmlBool clean = TRUE; + size_t i; + for (i=0; i < strlen(filename); i++) + { + if (!g_ascii_isalnum(filename[i]) && + filename[i] != '-' && + filename[i] != '_') + clean = FALSE; + } + if (clean) { + return g_strdup(filename); + } else { + return g_base64_encode((const unsigned char *) filename, strlen(filename)); + } +} + static SmlBool recvChangeCallback( SmlDataSyncObject *dsObject, const char *source, @@ -547,10 +565,11 @@ if (datastore->directory) { printf("Writing item %s to directory %s.\n", uid, datastore->directory); /* prepare absolute filenames */ - absolute_uid = g_strdup_printf("%s/%s", datastore->directory, uid); + char *safeUID = getSafeFilename(uid); + absolute_uid = g_strdup_printf("%s/%s", datastore->directory, safeUID); absolute_status = g_strdup_printf("%s/%s", datastore->directory, STATUS_FILENAME); /* sanity check for uid */ - if (!strcmp(uid, STATUS_FILENAME)) + if (!strcmp(safeUID, STATUS_FILENAME)) { smlErrorSet(error, SML_ERROR_GENERIC, "The filename %s cannot be used as UID. This is a potential attack.", @@ -560,6 +579,8 @@ STATUS_FILENAME); goto error; } + smlSafeCFree(&safeUID); + /* cache that the remote device knows the uid */ if (datastore->remoteHash) { g_hash_table_insert(datastore->remoteHash, g_strdup(absolute_uid), (char *)"1"); |
From: <svn...@op...> - 2009-04-29 07:27:32
|
Author: bellmich Date: Wed Apr 29 09:27:17 2009 New Revision: 1074 URL: http://libsyncml.opensync.org/changeset/1074 Log: patch for ticket #234 Modified: trunk/libsyncml/data_sync_api/transport_http_client.c Modified: trunk/libsyncml/data_sync_api/transport_http_client.c ============================================================================== --- trunk/libsyncml/data_sync_api/transport_http_client.c Tue Apr 28 13:15:31 2009 (r1073) +++ trunk/libsyncml/data_sync_api/transport_http_client.c Wed Apr 29 09:27:17 2009 (r1074) @@ -145,7 +145,20 @@ GList *o = dsObject->datastores; for (; o; o = o->next) { SmlDataSyncDatastore *datastore = o->data; - if (!smlDataSyncClientSendAlert(datastore, SML_ALERT_SLOW_SYNC, error)) + + SmlAlertType alertType = SML_ALERT_SLOW_SYNC; + if (dsObject->getAlertTypeCallback) + { + alertType = dsObject->getAlertTypeCallback( + dsObject, + datastore->sourceUri, + SML_ALERT_TWO_WAY, + dsObject->getAlertTypeUserdata, + error); + if (*error) + goto error; + } + if (!smlDataSyncClientSendAlert(datastore, alertType, error)) goto error; } smlTrace(TRACE_INTERNAL, "%s: all datastores created their alerts", __func__); |
From: <svn...@op...> - 2009-04-28 17:28:20
|
Author: scriptor Date: Tue Apr 28 19:28:17 2009 New Revision: 5633 URL: http://www.opensync.org/changeset/5633 Log: Fixed help message. Modified: plugins/ldap-sync/misc/ldap_format_convert.c plugins/ldap-sync/tests/check_do_convert_from_to.c Modified: plugins/ldap-sync/misc/ldap_format_convert.c ============================================================================== --- plugins/ldap-sync/misc/ldap_format_convert.c Tue Apr 28 12:02:54 2009 (r5632) +++ plugins/ldap-sync/misc/ldap_format_convert.c Tue Apr 28 19:28:17 2009 (r5633) @@ -935,7 +935,7 @@ if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { - usage(argv[1]); + usage(argv[0]); goto out; } Modified: plugins/ldap-sync/tests/check_do_convert_from_to.c ============================================================================== --- plugins/ldap-sync/tests/check_do_convert_from_to.c Tue Apr 28 12:02:54 2009 (r5632) +++ plugins/ldap-sync/tests/check_do_convert_from_to.c Tue Apr 28 19:28:17 2009 (r5633) @@ -935,7 +935,7 @@ if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { - usage(argv[1]); + usage(argv[0]); goto out; } |
From: <svn...@op...> - 2009-04-28 11:15:47
|
Author: bellmich Date: Tue Apr 28 13:15:31 2009 New Revision: 1073 URL: http://libsyncml.opensync.org/changeset/1073 Log: fixed wrong vCal 1.0 device information If the default format of a datastore is iCal 2.0 then the content type for vCal 1.0 was wrong. Old (buggy): text/calendar 1.0 New (correct): text/x-vcalendar 1.0 Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_devinf.c Tue Apr 28 11:02:31 2009 (r1072) +++ trunk/libsyncml/data_sync_api/data_sync_devinf.c Tue Apr 28 13:15:31 2009 (r1073) @@ -510,11 +510,11 @@ } else if (!strcmp(ct, SML_ELEMENT_TEXT_ICAL)) { - ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_ICAL, "1.0", error); + ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCAL, "1.0", error); if (!ctype) goto error; smlDevInfDataStoreAddRx(ds, ctype); - ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_ICAL, "1.0", error); + ctype = smlDevInfNewContentType(SML_ELEMENT_TEXT_VCAL, "1.0", error); if (!ctype) goto error; smlDevInfDataStoreAddTx(ds, ctype); |
From: <svn...@op...> - 2009-04-28 10:03:00
|
Author: bellmich Date: Tue Apr 28 12:02:54 2009 New Revision: 5632 URL: http://www.opensync.org/changeset/5632 Log: Preferred can only occur one time. Modified: trunk/misc/schemas/plugin_config.xsd Modified: trunk/misc/schemas/plugin_config.xsd ============================================================================== --- trunk/misc/schemas/plugin_config.xsd Mon Apr 27 22:41:33 2009 (r5631) +++ trunk/misc/schemas/plugin_config.xsd Tue Apr 28 12:02:54 2009 (r5632) @@ -87,7 +87,13 @@ <xsd:complexType name="Formats"> <xsd:sequence> <xsd:element maxOccurs="unbounded" minOccurs="1" name="Format" type="Format" /> - <xsd:element maxOccurs="0" minOccurs="0" name="Preferred" type="xsd:string" /> + <!-- The preferred format is a hint for the converter. + If you like to get vCards and you do not support vCards directly + (e.g. the file plugin only supports raw data) + but you have only a source which supports only XML format + then you can specify vcard30 and you will get vCard 3.0. + --> + <xsd:element maxOccurs="1" minOccurs="0" name="Preferred" type="xsd:string" /> </xsd:sequence> </xsd:complexType> |
From: <svn...@op...> - 2009-04-28 09:02:37
|
Author: bellmich Date: Tue Apr 28 11:02:31 2009 New Revision: 1072 URL: http://libsyncml.opensync.org/changeset/1072 Log: fixed cmake warning Modified: trunk/tests/CMakeLists.txt Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Tue Apr 28 11:02:10 2009 (r1071) +++ trunk/tests/CMakeLists.txt Tue Apr 28 11:02:31 2009 (r1072) @@ -1,4 +1,11 @@ MACRO( ADD_MOBILE_TEST _testName ) + + if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) + ## The macro ADD_CHECK_TEST creates false warning. + cmake_policy(SET CMP0002 OLD) + endif(COMMAND cmake_policy) + ADD_EXECUTABLE( ${_testName} mobiles/${_testName}/test.c ) TARGET_LINK_LIBRARIES( ${_testName} ${ARGN} ) ADD_TEST( ${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName} ${CMAKE_CURRENT_SOURCE_DIR}/mobiles/${_testName} ) |
From: <svn...@op...> - 2009-04-28 09:02:26
|
Author: bellmich Date: Tue Apr 28 11:02:10 2009 New Revision: 1071 URL: http://libsyncml.opensync.org/changeset/1071 Log: committed patch from ticket #232 (supplied by Kwan hong Lee) Modified: trunk/libsyncml/data_sync_api/data_sync.c Modified: trunk/libsyncml/data_sync_api/data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.c Mon Apr 27 11:52:35 2009 (r1070) +++ trunk/libsyncml/data_sync_api/data_sync.c Tue Apr 28 11:02:10 2009 (r1071) @@ -625,35 +625,40 @@ SmlDataSyncDatastore *datastore = change->datastore; /* copy data */ - smlAssert(datastore->contentType); - smlAssert(index(datastore->contentType, '/')); - size_t appClassLength = ((size_t) index(datastore->contentType, '/')) - - ((size_t) datastore->contentType); - if ( ( strstr(datastore->contentType, SML_CONTENT_TYPE_APPLICATION) == datastore->contentType && - appClassLength == strlen(SML_CONTENT_TYPE_APPLICATION) ) || - ( strstr(datastore->contentType, SML_CONTENT_TYPE_AUDIO) == datastore->contentType && - appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) || - ( strstr(datastore->contentType, SML_CONTENT_TYPE_IMAGE) == datastore->contentType && - appClassLength == strlen(SML_CONTENT_TYPE_IMAGE) ) || - ( strstr(datastore->contentType, SML_CONTENT_TYPE_MESSAGE) == datastore->contentType && - appClassLength == strlen(SML_CONTENT_TYPE_MESSAGE) ) || - ( strstr(datastore->contentType, SML_CONTENT_TYPE_VIDEO) == datastore->contentType && - appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) ) - { - /* binary data must be base64 encoded */ - change->data = g_base64_encode((const unsigned char *) data, size); - if (!change->data) { - smlErrorSet(error, SML_ERROR_GENERIC, - "The base 64 encoding of glib failed."); - goto error; + if (data) { + smlAssert(datastore->contentType); + smlAssert(index(datastore->contentType, '/')); + size_t appClassLength = ((size_t) index(datastore->contentType, '/')) - + ((size_t) datastore->contentType); + if ( ( strstr(datastore->contentType, SML_CONTENT_TYPE_APPLICATION) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_APPLICATION) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_AUDIO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_IMAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_IMAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_MESSAGE) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_MESSAGE) ) || + ( strstr(datastore->contentType, SML_CONTENT_TYPE_VIDEO) == datastore->contentType && + appClassLength == strlen(SML_CONTENT_TYPE_AUDIO) ) ) + { + /* binary data must be base64 encoded */ + change->data = g_base64_encode((const unsigned char *) data, size); + if (!change->data) { + smlErrorSet(error, SML_ERROR_GENERIC, + "The base 64 encoding of glib failed."); + goto error; + } + change->size = strlen(change->data); + } else { + change->data = smlTryMalloc0(size+1, error); + if (!change->data) + goto error; + memcpy(change->data, data, size); + change->size = size; } - change->size = strlen(change->data); } else { - change->data = smlTryMalloc0(size+1, error); - if (!change->data) - goto error; - memcpy(change->data, data, size); - change->size = size; + change->data = NULL; + change->size = 0; } /* append change to datastore */ |
From: <svn...@op...> - 2009-04-27 20:41:45
|
Author: scriptor Date: Mon Apr 27 22:41:33 2009 New Revision: 5631 URL: http://www.opensync.org/changeset/5631 Log: Enter into loop only when there are more than 0 subentries. Based on a patch provided by Sven Anders (ANDURAS service solutions AG). Many thanks for the patch. Modified: plugins/ldap-sync/src/ldap_connect.c Modified: plugins/ldap-sync/src/ldap_connect.c ============================================================================== --- plugins/ldap-sync/src/ldap_connect.c Mon Apr 27 22:41:24 2009 (r5630) +++ plugins/ldap-sync/src/ldap_connect.c Mon Apr 27 22:41:33 2009 (r5631) @@ -1881,39 +1881,46 @@ } if (possible_subentries != NULL) { + int number_possible_subentries = ldap_count_entries(sinkenv->ld, possible_subentries); + #ifdef DEBUG_ldapdata_from_server - ldap_plugin_printf("There are %i subentries.", ldap_count_entries(sinkenv->ld, possible_subentries)); + ldap_plugin_printf("There are %i subentries.", number_possible_subentries); #endif - LDAPMessage *subentry_result = ldap_first_entry(sinkenv->ld, possible_subentries) ; - if (subentry_result == NULL) { - ldap_plugin_dump_ldap_error_message(sinkenv, entry->dn, subentry_filter, "ldap_first_entry()"); - } else { - for ( ; subentry_result ; subentry_result = ldap_next_entry(sinkenv->ld, subentry_result)) { - // keyattribute for subentries: "ou" - char *keyattr = (char *)"ou"; + + if (number_possible_subentries > 0) { + + + LDAPMessage *subentry_result = ldap_first_entry(sinkenv->ld, possible_subentries) ; + if (subentry_result == NULL) { + ldap_plugin_dump_ldap_error_message(sinkenv, entry->dn, subentry_filter, "ldap_first_entry()"); + } else { + for ( ; subentry_result ; subentry_result = ldap_next_entry(sinkenv->ld, subentry_result)) { + // keyattribute for subentries: "ou" + char *keyattr = (char *)"ou"; - ldap_entry *subentry = ldap_plugin_create_ldap_entry_from_LDAPMessage(ctx, sinkenv, subentry_result, keyattr, error); - if (subentry == NULL) { - osync_trace(TRACE_ERROR, "%s:%i: ERROR: ldap_plugin_create_ldap_entry_from_LDAPMessage() has failed. Skipping this subentry.\n", __FILE__, __LINE__); - continue; - } + ldap_entry *subentry = ldap_plugin_create_ldap_entry_from_LDAPMessage(ctx, sinkenv, subentry_result, keyattr, error); + if (subentry == NULL) { + osync_trace(TRACE_ERROR, "%s:%i: ERROR: ldap_plugin_create_ldap_entry_from_LDAPMessage() has failed. Skipping this subentry.\n", __FILE__, __LINE__); + continue; + } #ifdef DEBUG_ldapdata_from_server - ldap_plugin_printf("%s:%i:", __FILE__, __LINE__); - ldap_plugin_printf("\n\n-----------------"); + ldap_plugin_printf("%s:%i:", __FILE__, __LINE__); + ldap_plugin_printf("\n\n-----------------"); - ldap_plugin_printf("subentry->id: %s\nsubentry->dn: %s", subentry->id, subentry->dn); + ldap_plugin_printf("subentry->id: %s\nsubentry->dn: %s", subentry->id, subentry->dn); - // TODO - ldap_plugin_dump_ldap_attributes(subentry); - ldap_plugin_printf("-----------------\n"); + // TODO + ldap_plugin_dump_ldap_attributes(subentry); + ldap_plugin_printf("-----------------\n"); #endif - entry->subentries = g_list_append(entry->subentries, subentry); + entry->subentries = g_list_append(entry->subentries, subentry); - } // for ( ; subentry_result ; subentry_result = ldap_next_entry(sinkenv->ld, subentry_result)) - } // if (subentry_result == NULL) { } else { } + } // for ( ; subentry_result ; subentry_result = ldap_next_entry(sinkenv->ld, subentry_result)) + } // if (subentry_result == NULL) { } else { } + } // if (number_possible_subentries > 0) ldap_msgfree(possible_subentries); possible_subentries = NULL; |
From: <svn...@op...> - 2009-04-27 20:41:30
|
Author: scriptor Date: Mon Apr 27 22:41:24 2009 New Revision: 5630 URL: http://www.opensync.org/changeset/5630 Log: Bug fix. Patch provided by Sven Anders (ANDURAS service solutions AG). Thank you very much, indeed. Modified: plugins/ldap-sync/tests/CMakeLists.txt Modified: plugins/ldap-sync/tests/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/tests/CMakeLists.txt Mon Apr 27 22:41:12 2009 (r5629) +++ plugins/ldap-sync/tests/CMakeLists.txt Mon Apr 27 22:41:24 2009 (r5630) @@ -284,10 +284,11 @@ ############################################### # Check the detector functions: -ADD_EXECUTABLE( check_detector1 check_detector1.c ) LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ) INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ) + +ADD_EXECUTABLE( check_detector1 check_detector1.c ) TARGET_LINK_LIBRARIES( check_detector1 ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARIES} ) ADD_TEST( detect1 check_detector1 ${TESTDIR}/contact1.xml ) @@ -312,10 +313,11 @@ ######################################################### # Check the converter functions: -ADD_EXECUTABLE( check_do_convert_from_to check_do_convert_from_to.c ) LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ) INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ) + +ADD_EXECUTABLE( check_do_convert_from_to check_do_convert_from_to.c ) TARGET_LINK_LIBRARIES( check_do_convert_from_to ${OPENSYNC_LIBRARIES} ${GLIB2_LIBRARIES} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARIES} ) ADD_TEST( convert_vcards1 ${TESTDIR}/check_convert_from_to ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR}/tests/vcards/*.vcf" "--to-ldap-evolutionperson" ) |
From: <svn...@op...> - 2009-04-27 20:41:19
|
Author: scriptor Date: Mon Apr 27 22:41:12 2009 New Revision: 5629 URL: http://www.opensync.org/changeset/5629 Log: Bug fix. Patch provided by Sven Anders (ANDURAS service solutions AG). Thank you very much, indeed. Modified: plugins/ldap-sync/src/ldap_plugin.c Modified: plugins/ldap-sync/src/ldap_plugin.c ============================================================================== --- plugins/ldap-sync/src/ldap_plugin.c Sun Apr 26 22:25:10 2009 (r5628) +++ plugins/ldap-sync/src/ldap_plugin.c Mon Apr 27 22:41:12 2009 (r5629) @@ -3459,7 +3459,7 @@ #ifdef DEBUG_change_type_modified ldap_plugin_printf("\n%s:%i:%s():", __FILE__, __LINE__, __func__); - ldap_plugin_printf(About to call ldap_plugin_get_hash_from_ldap_server():\nid_of_modified_entry = \"%s\"\nentry->id = \"%s\"\n", *id_of_modified_entry, entry->id); + ldap_plugin_printf("About to call ldap_plugin_get_hash_from_ldap_server():\nid_of_modified_entry = \"%s\"\nentry->id = \"%s\"\n", *id_of_modified_entry, entry->id); #endif if (!ldap_plugin_get_hash_from_ldap_server(ctx, sinkenv, *id_of_modified_entry, hash, error)) { @@ -4324,7 +4324,7 @@ #endif - osync_trace(TRACE_EXIT, "%s"); + osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; error: |
From: <svn...@op...> - 2009-04-27 09:52:40
|
Author: bellmich Date: Mon Apr 27 11:52:35 2009 New Revision: 1070 URL: http://libsyncml.opensync.org/changeset/1070 Log: more detailed error message Modified: trunk/tests/check_data_sync_api.c Modified: trunk/tests/check_data_sync_api.c ============================================================================== --- trunk/tests/check_data_sync_api.c Thu Apr 23 14:58:47 2009 (r1069) +++ trunk/tests/check_data_sync_api.c Mon Apr 27 11:52:35 2009 (r1070) @@ -85,7 +85,11 @@ switch (type) { case SML_DATA_SYNC_EVENT_ERROR: - sml_fail_unless(FALSE, "error from ds api: %s", smlErrorPrint(&error)); + if (dsObject == client) { + sml_fail_unless(FALSE, "OMA DS client failed: %s", smlErrorPrint(&error)); + } else { + sml_fail_unless(FALSE, "OMA DS server failed: %s", smlErrorPrint(&error)); + } break; case SML_DATA_SYNC_EVENT_CONNECT: /* g_message("Remote device was successfully connected."); */ |
From: <svn...@op...> - 2009-04-26 20:25:17
|
Author: scriptor Date: Sun Apr 26 22:25:10 2009 New Revision: 5628 URL: http://www.opensync.org/changeset/5628 Log: Building filenames is now performed by glib functions, which seem to be a bit more platform neutral. Modified: plugins/ldap-sync/src/ldap_format.c Modified: plugins/ldap-sync/src/ldap_format.c ============================================================================== --- plugins/ldap-sync/src/ldap_format.c Sun Apr 26 22:24:26 2009 (r5627) +++ plugins/ldap-sync/src/ldap_format.c Sun Apr 26 22:25:10 2009 (r5628) @@ -1725,7 +1725,7 @@ const char *schema = NULL; xmlValidCtxtPtr xmlctx = NULL; const char *path = LDAP_PLUGIN_OPENSYNC_SCHEMASDIR; - char fullpath[65535]; + char *fullpath = NULL; struct stat stat_buffer; xmlSchemaValidCtxtPtr dtd = NULL; xmlSchemaPtr xsd = NULL; @@ -1784,11 +1784,17 @@ goto error; } - snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", path, schema); + // snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", path, schema); + fullpath = g_build_filename(path, schema, NULL); + if (fullpath == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: fullpath = NULL.", __FILE__, __LINE__); + goto error; + } errno = 0; if (stat(fullpath, &stat_buffer) == -1) { osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: \"%s\" could not be found: %s\n", __FILE__, __LINE__, stylesheet_file, strerror(errno)); + goto error; } @@ -1897,6 +1903,10 @@ xsd_file = NULL; } + if (fullpath) { + g_free(fullpath); + fullpath = NULL; + } osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; @@ -1917,6 +1927,11 @@ xsd_file = NULL; } + if (fullpath) { + g_free(fullpath); + fullpath = NULL; + } + if (!osync_error_is_set(error)) osync_error_set(error, OSYNC_ERROR_GENERIC, "Unknown reason.\n"); @@ -2171,7 +2186,7 @@ xmlChar *xmlbuffer = NULL; xmlDocPtr input_doc = NULL; int xmlbuffer_size = 0; - char fullpath[1024]; + char *fullpath = NULL; xmlDocPtr xmlcard = NULL; const char *path = NULL; struct stat stat_buffer; @@ -2282,7 +2297,12 @@ goto error; } - snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", path, stylesheet_file); + // snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", path, stylesheet_file); + fullpath = g_build_filename(path, stylesheet_file, NULL); + if (fullpath == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: fullpath = NULL.", __FILE__, __LINE__); + goto error; + } errno = 0; if (stat(fullpath, &stat_buffer) == -1) { @@ -2483,6 +2503,10 @@ input_doc = NULL; } + if (fullpath) { + g_free(fullpath); + fullpath = NULL; + } osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; @@ -2514,6 +2538,11 @@ xmlbuffer = NULL; } + if (fullpath) { + g_free(fullpath); + fullpath = NULL; + } + if (!osync_error_is_set(error)) osync_error_set(error, OSYNC_ERROR_GENERIC, "Unknown reason.\n"); |
From: <svn...@op...> - 2009-04-26 20:24:33
|
Author: scriptor Date: Sun Apr 26 22:24:26 2009 New Revision: 5627 URL: http://www.opensync.org/changeset/5627 Log: In my ongoing battle against cmake it turned out that the trivial task of assigning a value to a variable works in the way everybody expects it ONLY if one adds "FORCE" to the CMakeLists.txt/CTestConfig.cmake. If "FORCE" is omitted, the DART_TESTING_TIMEOUT will ALWAYS be set to 1500 on the first run of cmake, no matter what has been configured in CTestConfig.cmake or CMakeLists.txt. One would have to rerun cmake to get the configured values... Not to mention, that it is only DART_TESTING_TIMEOUT that seems to get noticed by cmake/ctest. And not, as most people would have expected it, CMAKE_CTEST_TIMEOUT. Modified: plugins/ldap-sync/CTestConfig.cmake plugins/ldap-sync/tests/CMakeLists.txt Modified: plugins/ldap-sync/CTestConfig.cmake ============================================================================== --- plugins/ldap-sync/CTestConfig.cmake Sun Apr 26 22:23:33 2009 (r5626) +++ plugins/ldap-sync/CTestConfig.cmake Sun Apr 26 22:24:26 2009 (r5627) @@ -12,14 +12,23 @@ set(CTEST_DROP_LOCATION "/testing/submit.php?project=ldap-sync") set(CTEST_DROP_SITE_CDASH TRUE) + +# Setting a custom timeout for ctest is a hassle. +# The only variable that seems to be considered by cmake/ctest is +# DART_TESTING_TIMEOUT. And this works ONLY, if one adds "FORCE". +# +# DART_TESTING_TIMEOUT must be set in CTestConfig.cmake rather than here. +# At least, it seems so... IF (RUN_LONG_TESTS) - set (TIMEOUT 3600) + SET ( TIMEOUT 3600 CACHE STRING "General timeout value." FORCE ) ELSE(RUN_LONG_TESTS) - set (TIMEOUT 300) + SET ( TIMEOUT 300 CACHE STRING "General timeout value." FORCE ) ENDIF(RUN_LONG_TESTS) -set (CTEST_TEST_TIMEOUT ${TIMEOUT}) -set (CMAKE_LONG_TEST_TIMEOUT ${TIMEOUT}) -set (DART_TESTING_TIMEOUT ${TIMEOUT}) -set (CTEST_TIME_LIMIT ${TIMEOUT}) +SET ( CTEST_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "The most natural variable for a timeout setting does NOT work. Great!" FORCE ) +SET ( CMAKE_LONG_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "Does not work, either." FORCE ) +SET ( DART_TESTING_TIMEOUT ${TIMEOUT} CACHE STRING "Is there really no other way to set a timeout to the tests run by ctest?" FORCE ) +SET ( CTEST_TIME_LIMIT ${TIMEOUT} CACHE STRING "Taken from ChangeLog.txt in cmake-2.6.2... No chance." FORCE ) + + Modified: plugins/ldap-sync/tests/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/tests/CMakeLists.txt Sun Apr 26 22:23:33 2009 (r5626) +++ plugins/ldap-sync/tests/CMakeLists.txt Sun Apr 26 22:24:26 2009 (r5627) @@ -12,25 +12,22 @@ SET ( SCHEMADIR "${LDAP_PLUGIN_OPENSYNC_SCHEMASDIR}" CACHE STRING "Path where any *.xml files are located.") - -# Setting a custom timeout does not work, at all, either. Completely buggy. -# +# Setting a custom timeout for ctest is a hassle. # The only variable that seems to be considered by cmake/ctest is -# DART_TESTING_TIMEOUT. And even this variable does not get set until -# cmake is run for the second time. This is getting on my nerves. -# +# DART_TESTING_TIMEOUT. And this works ONLY, if one adds "FORCE". +# # DART_TESTING_TIMEOUT must be set in CTestConfig.cmake rather than here. -# At least, it seems so... +# At least, it seems so... IF (RUN_LONG_TESTS) - SET ( TIMEOUT 3600 CACHE STRING "General timeout value.") + SET ( TIMEOUT 3600 CACHE STRING "General timeout value." FORCE ) ELSE(RUN_LONG_TESTS) - SET ( TIMEOUT 300 CACHE STRING "General timeout value.") + SET ( TIMEOUT 300 CACHE STRING "General timeout value." FORCE ) ENDIF(RUN_LONG_TESTS) -SET ( CTEST_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "The most natural variable for a timeout setting does not work. Great!") -SET ( CMAKE_LONG_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "Does not work, either." ) -SET ( DART_TESTING_TIMEOUT ${TIMEOUT} CACHE STRING "Is there really no way to set a timeout to the tests run by ctest?") -SET ( CTEST_TIME_LIMIT ${TIMEOUT} CACHE STRING "Taken from ChangeLog.txt in cmake-2.6.2... No chance.") +SET ( CTEST_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "The most natural variable for a timeout setting does NOT work. Great!" FORCE ) +SET ( CMAKE_LONG_TEST_TIMEOUT ${TIMEOUT} CACHE STRING "Does not work, either." FORCE ) +SET ( DART_TESTING_TIMEOUT ${TIMEOUT} CACHE STRING "Is there really no other way to set a timeout to the tests run by ctest?" FORCE ) +SET ( CTEST_TIME_LIMIT ${TIMEOUT} CACHE STRING "Taken from ChangeLog.txt in cmake-2.6.2... No chance." FORCE ) |
From: <svn...@op...> - 2009-04-26 20:23:39
|
Author: scriptor Date: Sun Apr 26 22:23:33 2009 New Revision: 5626 URL: http://www.opensync.org/changeset/5626 Log: Added a file about issues or bugs. Added: plugins/ldap-sync/BUGS Added: plugins/ldap-sync/BUGS ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ plugins/ldap-sync/BUGS Sun Apr 26 22:23:33 2009 (r5626) @@ -0,0 +1,42 @@ +These bugs are known to me: + +A. Implementation: + +I. The format mapping is not 100 % correct. + +This concerns the ldap-format plugin. It means, that the transformation +from any xmlformat-... format to an LDAP specific format and vice versa +is either incomplete or wrong. The ldap-format plugin does not fully +comply with the requirements, yet, as laid out by + +/usr/local/share/libopensync1/schemas/xmlformat-*.xsd. + + + +B. Design: + +I. Storage scheme on the LDAP server: + +I am not really happy with the way the data is stored on the LDAP server. +Only the object type "contact" maps to LDAP schemata that are already known +and used outside of the opensync project: + + evolutionperson.schema + inetorgperson.schema + +All the other three object types are mapped in a way that robs +the LDAP attributes of their original meaning. Just to get +a typical name-value pair stored. + +And even with the "contact" object type there is currently almost +no support for the situation that a particular XML element occurs +more than just once. The *.xsd files allow for such multiple +occurrences. + +Maybe I should create opensync specific LDAP schemata? Don't know. +I would have preferred using schemata that are already existing and +used by other people... + + + + |
From: <svn...@op...> - 2009-04-23 12:58:59
|
Author: bellmich Date: Thu Apr 23 14:58:47 2009 New Revision: 1069 URL: http://libsyncml.opensync.org/changeset/1069 Log: removed outdated port generator The port generator overwrites the configured port and creates a memory leak. Modified: trunk/tests/mobiles/obex_mobile_ds_client.c Modified: trunk/tests/mobiles/obex_mobile_ds_client.c ============================================================================== --- trunk/tests/mobiles/obex_mobile_ds_client.c Thu Apr 23 13:46:50 2009 (r1068) +++ trunk/tests/mobiles/obex_mobile_ds_client.c Thu Apr 23 14:58:47 2009 (r1069) @@ -408,8 +408,6 @@ SmlError *error = NULL; mobile_tsp = smlTransportNew(SML_TRANSPORT_OBEX_SERVER, &error); - obex_port = g_strdup_printf("%d", g_random_int_range(10001, 19999)); - sml_fail_unless(smlTransportSetConnectionType(mobile_tsp, SML_TRANSPORT_CONNECTION_TYPE_NET, &error), NULL); sml_fail_unless(smlTransportSetConfigOption(mobile_tsp, SML_TRANSPORT_CONFIG_PORT, obex_port, &error), NULL); |
From: <svn...@op...> - 2009-04-23 11:47:00
|
Author: bellmich Date: Thu Apr 23 13:46:50 2009 New Revision: 1068 URL: http://libsyncml.opensync.org/changeset/1068 Log: fixed memory leaks Modified: trunk/tests/check_ds.c Modified: trunk/tests/check_ds.c ============================================================================== --- trunk/tests/check_ds.c Mon Apr 20 17:14:23 2009 (r1067) +++ trunk/tests/check_ds.c Thu Apr 23 13:46:50 2009 (r1068) @@ -212,15 +212,17 @@ smlAssert(thread); - + smlThreadStop(thread->thread); + g_source_destroy(thread->data_source); g_source_destroy(thread->session_source); - - smlThreadStop(thread->thread); + g_source_unref(thread->data_source); + g_source_unref(thread->session_source); smlThreadFree(thread->thread); g_free(thread->functions); + g_free(thread->data_functions); g_main_context_unref(thread->context); g_main_context_unref(thread->context); |
From: <svn...@op...> - 2009-04-23 08:06:08
|
Author: henrik Date: Thu Apr 23 10:06:02 2009 New Revision: 5625 URL: http://www.opensync.org/changeset/5625 Log: Fixed portability issues (for Ming/Windows): - do not include libgen.h to get basename; instead use g_basename - use g_strdup instead of strdup - use __VA_ARGS__ in varadic macro definitions - define __func__ and MAX_PATH Modified: plugins/mozilla-sync/trunk/src/calendar-event.cpp plugins/mozilla-sync/trunk/src/mozilla-calendar.cpp plugins/mozilla-sync/trunk/src/mozilla-config.cpp plugins/mozilla-sync/trunk/src/mozilla-sync-utils.h plugins/mozilla-sync/trunk/src/mozilla-sync.cpp plugins/mozilla-sync/trunk/src/mozilla-xpcom.cpp plugins/mozilla-sync/trunk/src/nsProfileDirServiceProvider.cpp Modified: plugins/mozilla-sync/trunk/src/calendar-event.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/calendar-event.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/calendar-event.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -28,7 +28,6 @@ ================================================================ */ - #include <glib.h> #include <libxml/encoding.h> @@ -654,7 +653,6 @@ void (*pLogFunction)(int level, bool sensitive, const char* szFile, int iLine, const char *szFunc, const char* szFormat, ...)) { nsresult rv; - PRUint32 len; LOG(10, "Getting ICS for event [%s]", szKey); @@ -790,6 +788,6 @@ nsEmbedCString asICS; rv=icsCalendar->SerializeToICS(asICS); MOZ_ERROR_CHECK_FALSE(rv, "SerializeToICS"); - *pSzICS=strdup(asICS.get()); + *pSzICS=g_strdup(asICS.get()); if (*pSzICS) return TRUE; else return FALSE; } Modified: plugins/mozilla-sync/trunk/src/mozilla-calendar.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-calendar.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/mozilla-calendar.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -351,9 +351,11 @@ { PRUint32 len; - *pSzKey=myStatement->IsNull(0) ? strdup("") : strdup(myStatement->AsSharedUTF8String(0, &len)); - *pSzHash=myStatement->IsNull(1) ? strdup("") : strdup(myStatement->AsSharedUTF8String(1, &len)); - *pSzTitle=myStatement->IsNull(2 ) ? strdup("") : strdup(myStatement->AsSharedUTF8String(2, &len)); + *pSzKey=myStatement->IsNull(0) ? g_strdup("") : g_strdup(myStatement->AsSharedUTF8String(0, &len)); + *pSzHash=myStatement->IsNull(1) ? g_strdup("") : g_strdup(myStatement->AsSharedUTF8String(1, &len)); + *pSzTitle=myStatement->IsNull(2 ) ? g_strdup("") : g_strdup(myStatement->AsSharedUTF8String(2, &len)); + + return TRUE; } // ------------------------------------------------------------ @@ -427,7 +429,7 @@ const char *sEventStartTz = statement->AsSharedUTF8String(3, &len); const char *sC = statement->AsSharedUTF8String(4, &len); LOG(10, "Event id=[%s] title=[%s] start=[%s;%s] cal_id=[%s]", sId, sTitle, ss, sEventStartTz, sC); - bool f=statement->IsNull(4); + PRBool f=statement->IsNull(4); LOG(10, "NULL %d", f); } return TRUE; @@ -506,4 +508,6 @@ rv=statement->Execute(); MOZ_ERROR_CHECK_FALSE(rv, "Execute"); GFREE(szDelete); + + return TRUE; } Modified: plugins/mozilla-sync/trunk/src/mozilla-config.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-config.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/mozilla-config.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -145,7 +145,7 @@ fProfileDir=find_default_profile_directory(&szProfileDir, pSzError, pLogFunction); if (!fProfileDir) ERROR_MSG("Advanced option profile-directory was not set, and could not be determined automatically"); - pMozillaConfig->szProfileDirectory=strdup(szProfileDir); + pMozillaConfig->szProfileDirectory=g_strdup(szProfileDir); pMozillaConfig->thunderbirdAddressbook=FALSE; pMozillaConfig->szAddressbookFile=NULL; @@ -156,11 +156,11 @@ // @todo Figure out when to unref pOSyncPluginResource pOSyncPluginResource=osync_plugin_config_find_active_resource(pOSyncPluginConfig, "contact"); - if(pOSyncPluginResource) pMozillaConfig->szAddressbookFile=strdup(osync_plugin_resource_get_name(pOSyncPluginResource)); + if(pOSyncPluginResource) pMozillaConfig->szAddressbookFile=g_strdup(osync_plugin_resource_get_name(pOSyncPluginResource)); // Do not do osync_plugin_resource_unref(pOSyncPluginResource) - it will be accessed later. But why? pOSyncPluginResource=osync_plugin_config_find_active_resource(pOSyncPluginConfig, "event"); - if(pOSyncPluginResource) pMozillaConfig->szCalendarId=strdup(osync_plugin_resource_get_name(pOSyncPluginResource)); + if(pOSyncPluginResource) pMozillaConfig->szCalendarId=g_strdup(osync_plugin_resource_get_name(pOSyncPluginResource)); // Do not do osync_plugin_resource_unref(pOSyncPluginResource) - it will be accessed later. But why? if ( (pMozillaConfig->szAddressbookFile==NULL) && (pMozillaConfig->szCalendarId==NULL) ) Modified: plugins/mozilla-sync/trunk/src/mozilla-sync-utils.h ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-sync-utils.h Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/mozilla-sync-utils.h Thu Apr 23 10:06:02 2009 (r5625) @@ -27,74 +27,77 @@ ================================================================ */ - -// On FreeBSD and Windows/MinGW we need libgen to define "basename" which is used in LOG - -#if defined(__FreeBSD__) || defined(WIN32) -#include <libgen.h> +#ifdef _WIN32 +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif +#ifndef PATH_MAX +#define PATH_MAX _MAX_PATH +#endif #endif - /** Log a message using the @c pLogFunction passed **/ -#define LOG(level, message ...) pLogFunction(level, false, basename(__FILE__), __LINE__, __func__, message); +#define LOG(level, message, ...) \ + pLogFunction(level, false, g_basename(__FILE__), __LINE__, __func__, message,## __VA_ARGS__); /** Log a sensitive (private) message using the @c pLogFunction passed **/ -#define LOG_SENSITIVE(level, message ...) pLogFunction(level, true, basename(__FILE__), __LINE__, __func__, message); +#define LOG_SENSITIVE(level, message, ...) \ + pLogFunction(level, true, g_basename(__FILE__), __LINE__, __func__, message,## __VA_ARGS__); /** Create error message in the @c pSzError passed, and return **/ -#define ERROR_MSG(message ...) { \ - char *__szMsg=g_strdup_printf(message); \ - *pSzError=g_strdup_printf("%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szMsg); return FALSE; } +#define ERROR_MSG(message, ...) { \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + *pSzError=g_strdup_printf("%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg); return FALSE; } /** Check if mozilla returned an error code. If so, create error message in the @c pSzError passed, and return NULL **/ #define MOZ_ERROR_CHECK(rv, str) \ { if (NS_FAILED(rv)) \ { *pSzError=g_strdup_printf( \ - "%s(%d)%s: [%s] returned [0x0%x]", basename(__FILE__), __LINE__, __func__, str, rv ); return NULL; } } + "%s(%d)%s: [%s] returned [0x0%x]", g_basename(__FILE__), __LINE__, __func__, str, rv ); return NULL; } } /** Check if mozilla returned an error code. If so, create error message in the @c pSzError passed, and return FALSE **/ #define MOZ_ERROR_CHECK_FALSE(rv, str) \ { if (NS_FAILED(rv)) \ { *pSzError=g_strdup_printf( \ - "%s(%d)%s: [%s] returned [0x0%x]", basename(__FILE__), __LINE__, __func__, str, rv ); return FALSE; } } + "%s(%d)%s: [%s] returned [0x0%x]", g_basename(__FILE__), __LINE__, __func__, str, rv ); return FALSE; } } /** Check if pointer is NULL. If so, create error message in the @c pSzError passed, and return NULL **/ #define NULL_ERROR_CHECK(ptr, str) \ { if (!ptr) \ { *pSzError=g_strdup_printf( \ - "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, str); return NULL; } } + "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, str); return NULL; } } /** Check if RC is less than zero. If so, create error message in the @c pSzError passed, and return NULL **/ -#define RC_ERROR_CHECK(rc, str ...) \ +#define RC_ERROR_CHECK(rc, str, ...) \ { if (rc<0) \ - { char *__szMsg=g_strdup_printf(str); \ + { char *__szMsg=g_strdup_printf(str,## __VA_ARGS__); \ *pSzError=g_strdup_printf( \ "%s(%d): %s", __func__, __LINE__, __szMsg); return NULL; } } // http://www.sqlite.org/capi3.html -#define SQL_ERROR_CHECK_FALSE(PCONN, MESSAGE ...) { \ - char *__szMsg=g_strdup_printf(MESSAGE); \ +#define SQL_ERROR_CHECK_FALSE(PCONN, MESSAGE, ...) { \ + char *__szMsg=g_strdup_printf(MESSAGE,## __VA_ARGS__); \ PRInt32 __lastError; \ PCONN->GetLastError(&__lastError); \ if (__lastError==101) { \ - *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s]: SQL statement returned no rows", basename(__FILE__), __LINE__, __func__, __szMsg); \ + *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s]: SQL statement returned no rows", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ return FALSE; } \ if ( (__lastError!=0) && (__lastError!=100) ) { \ nsEmbedCString __acsError; \ pConn->GetLastErrorString(__acsError); \ - *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s] %d: %s", basename(__FILE__), __LINE__, __func__, __szMsg, __lastError, __acsError.get());\ + *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s] %d: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg, __lastError, __acsError.get());\ return FALSE; } \ }; -#define SQL_ERROR_CHECK_NOROWSOK_FALSE(PCONN, MESSAGE ...) { \ - char *__szMsg=g_strdup_printf(MESSAGE); \ +#define SQL_ERROR_CHECK_NOROWSOK_FALSE(PCONN, MESSAGE, ...) { \ + char *__szMsg=g_strdup_printf(MESSAGE,## __VA_ARGS__); \ PRInt32 __lastError; \ PCONN->GetLastError(&__lastError); \ if ( (__lastError!=0) && (__lastError!=100) ) { \ nsEmbedCString __acsError; \ pConn->GetLastErrorString(__acsError); \ - *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s] %d: %s", basename(__FILE__), __LINE__, __func__, __szMsg, __lastError, __acsError.get());\ + *pSzError=g_strdup_printf("%s(%d)%s: SQL error in [%s] %d: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg, __lastError, __acsError.get());\ return FALSE; } \ }; Modified: plugins/mozilla-sync/trunk/src/mozilla-sync.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-sync.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/mozilla-sync.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -82,10 +82,10 @@ #include "mozilla-xpcom.h" #include "mozilla-sync.h" - -// On FreeBSD and Windows/MinGW we need libgen to define "basename" which is used in LOG -#if defined(__FreeBSD__) || defined(WIN32) -#include <libgen.h> +#ifdef _WIN32 +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif #endif #define LOGLEVEL 10000 @@ -93,60 +93,60 @@ /** Log a message using the @c pLogFunction passed **/ -#define ERR_PRINTF(args ...) fprintf(stderr, args); +#define ERR_PRINTF(args, ...) fprintf(stderr, args,## __VA_ARGS__); -#define LOG(level, message ...) { \ +#define LOG(level, message, ...) { \ if (level<=LOGLEVEL) { \ - char *__szMsg=g_strdup_printf(message); \ - osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szMsg); \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ g_free(__szMsg); } } -#define LOG_SENSITIVE(level, message ...) { \ +#define LOG_SENSITIVE(level, message, ...) { \ if (level<=LOGLEVEL) { \ - char *__szMsg=g_strdup_printf(message); \ - osync_trace(TRACE_SENSITIVE, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szMsg); \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + osync_trace(TRACE_SENSITIVE, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ g_free(__szMsg); } } -#define LOG_ENTRY(level, message ...) { \ +#define LOG_ENTRY(level, message, ...) { \ if (level<=LOGLEVEL) { \ - char *__szMsg=g_strdup_printf(message); \ - osync_trace(TRACE_ENTRY, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szMsg); \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + osync_trace(TRACE_ENTRY, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ g_free(__szMsg); } } -#define LOG_EXIT(level, message ...) { \ +#define LOG_EXIT(level, message, ...) { \ if (level<=LOGLEVEL) { \ - char *__szMsg=g_strdup_printf(message); \ - osync_trace(TRACE_EXIT, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szMsg); \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + osync_trace(TRACE_EXIT, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ g_free(__szMsg); } } #define LOG_EXIT_ERROR_SZ(level, message) { \ - osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, message); \ + osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, message); \ osync_error_set(ppOSyncError, OSYNC_ERROR_GENERIC, message); \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, message); } + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, message); } #define LOG_EXIT_ERROR_OSYNC(level, ppOSyncError) { \ const char *__szOErr=""; \ if (ppOSyncError) __szOErr=osync_error_print_stack(ppOSyncError); \ - osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szOErr); \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, __szOErr); } + osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szOErr); \ + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, __szOErr); } #define LOG_EXIT_ERROR_OSYNC_SZ(level, ppOSyncError, message) { \ const char *__szOErr=""; \ if (ppOSyncError) __szOErr=osync_error_print_stack(ppOSyncError); \ - osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s: %s", basename(__FILE__), __LINE__, __func__, message, __szOErr); \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, __szOErr); } + osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s: %s", g_basename(__FILE__), __LINE__, __func__, message, __szOErr); \ + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, __szOErr); } #define LOG_EXIT_REPORT_ERROR_SZ(level, context, message) { \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, message); \ + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, message); \ OSyncError *__pError = NULL; \ osync_error_set(&__pError, OSYNC_ERROR_GENERIC, message); \ osync_context_report_osyncerror(context, __pError); \ - osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, message); } + osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, message); } -#define LOG_EXIT_REPORT_ERROR_MSG(level, context, message ...) { \ +#define LOG_EXIT_REPORT_ERROR_MSG(level, context, message, ...) { \ if (level<=LOGLEVEL) { \ - char *__szMsg=g_strdup_printf(message); \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, __szMsg); \ + char *__szMsg=g_strdup_printf(message,## __VA_ARGS__); \ + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, __szMsg); \ OSyncError *__pError = NULL; \ osync_error_set(&__pError, OSYNC_ERROR_GENERIC, __szMsg); \ osync_context_report_osyncerror(context, __pError); \ @@ -157,9 +157,9 @@ #define LOG_EXIT_REPORT_ERROR_OSYNC(level, context, pError) { \ const char *__szOErr=""; \ if (pError) __szOErr=osync_error_print_stack(&pError); \ - ERR_PRINTF("%s(%d)%s: ****** %s\n", basename(__FILE__), __LINE__, __func__, __szOErr); \ + ERR_PRINTF("%s(%d)%s: ****** %s\n", g_basename(__FILE__), __LINE__, __func__, __szOErr); \ osync_context_report_osyncerror(context, pError); \ - osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", basename(__FILE__), __LINE__, __func__, __szOErr); } + osync_trace(TRACE_EXIT_ERROR, "%s(%d)%s: %s", g_basename(__FILE__), __LINE__, __func__, __szOErr); } #define GFREE(p) { if (p) g_free(p); } @@ -185,10 +185,10 @@ #ifdef WIN32 char *_szFile=g_strdup(szFile); - osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", basename(_szFile), iLine, szFunc, __szMsg); + osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", g_basename(_szFile), iLine, szFunc, __szMsg); g_free(_szFile); #else - osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", basename(szFile), iLine, szFunc, __szMsg); + osync_trace(TRACE_INTERNAL, "%s(%d)%s: %s", g_basename(szFile), iLine, szFunc, __szMsg); #endif g_free(__szMsg); Modified: plugins/mozilla-sync/trunk/src/mozilla-xpcom.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-xpcom.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/mozilla-xpcom.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -176,7 +176,7 @@ char szGreDirectory[PATH_MAX]; #ifdef WIN32 - szGreDirectory=""; + szGreDirectory[0]='\0'; // TODO TODO TODO #else void* mod=dlopen("libxpcom.so", RTLD_LAZY); @@ -364,7 +364,7 @@ MOZ_ERROR_CHECK_FALSE(rv, "do_QueryInterface for nsISupportsID"); char* s; rv=cs->ToString(&s); - g_tree_insert(pGT, strdup(s), NULL); + g_tree_insert(pGT, g_strdup(s), NULL); MOZ_ERROR_CHECK_FALSE(rv, "HasMoreElements"); rv=enumerator->HasMoreElements(&f); MOZ_ERROR_CHECK_FALSE(rv, "HasMoreElements"); Modified: plugins/mozilla-sync/trunk/src/nsProfileDirServiceProvider.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/nsProfileDirServiceProvider.cpp Mon Apr 20 19:11:01 2009 (r5624) +++ plugins/mozilla-sync/trunk/src/nsProfileDirServiceProvider.cpp Thu Apr 23 10:06:02 2009 (r5625) @@ -60,7 +60,7 @@ #define LOG(level, message ...) \ { printf("nsProfileDirServiceProvider::%s(%d): ", __func__, __LINE__); printf(message); printf("\n"); } #else -#define LOG(level, message ...) +#define LOG(level, message, ...) #endif #ifdef XPCOM_GLUE |
From: <svn...@op...> - 2009-04-22 11:55:26
|
Author: bellmich Date: Wed Apr 22 13:55:16 2009 New Revision: 209 URL: http://libwbxml.opensync.org/changeset/209 Log: EXPAT splits <html> into three separate text nodes. Therefore it is necessary to scan for splitted text nodes and join them to get consistent text nodes. Modified: wbxml2/trunk/src/wbxml_tree.c Modified: wbxml2/trunk/src/wbxml_tree.c ============================================================================== --- wbxml2/trunk/src/wbxml_tree.c Wed Apr 22 13:53:37 2009 (r208) +++ wbxml2/trunk/src/wbxml_tree.c Wed Apr 22 13:55:16 2009 (r209) @@ -989,11 +989,38 @@ /* Add this Node to end of Sibbling Node list of Parent */ tmp = parent->children; + /* !!! WARNING !!! + * EXPAT splits <html> into three separate text nodes. + * Therefore it is necessary to scan for splitted text nodes and + * join them to get consistent text nodes. + */ + + /* If the handled node is a text node and the last node is a text node + * then the last node must be replace. + * Otherwise the node will be appended. + */ while (tmp->next != NULL) tmp = tmp->next; - node->prev = tmp; - tmp->next = node; + if (node->type == WBXML_TREE_TEXT_NODE && + tmp->type == WBXML_TREE_TEXT_NODE) { + /* join the two text nodes and replace the present text node */ + if (!wbxml_buffer_insert(node->content, tmp->content, 0)) + return FALSE; + if (tmp->prev == NULL) { + /* tmp is first child */ + parent->children = node; + } else { + /* tmp is not first child */ + tmp->prev->next = node; + node->prev = tmp->prev; + } + wbxml_tree_node_destroy(tmp); + } else { + /* normal situation => append node */ + node->prev = tmp; + tmp->next = node; + } } else { /* No previous sibbling element */ |
From: <svn...@op...> - 2009-04-22 11:53:43
|
Author: bellmich Date: Wed Apr 22 13:53:37 2009 New Revision: 208 URL: http://libwbxml.opensync.org/changeset/208 Log: normalized encoding Modified: wbxmlTestSuite/trunk/normalize_xml.pl Modified: wbxmlTestSuite/trunk/normalize_xml.pl ============================================================================== --- wbxmlTestSuite/trunk/normalize_xml.pl Wed Apr 22 13:52:40 2009 (r207) +++ wbxmlTestSuite/trunk/normalize_xml.pl Wed Apr 22 13:53:37 2009 (r208) @@ -67,6 +67,11 @@ $line =~ s{\s*\?>\s*$}{ encoding="UTF-8"?>\n}; } if ($state eq "ENC_OPEN" and $line =~ q{\?>\s*$}) { + ## uppercase encoding + my $encoding = $line; + $encoding =~ s{.*\sencoding="([^"]*)".*}{$1}; + $encoding = uc($encoding); + $line =~ s{\sencoding="[^"]*"}{ encoding="${encoding}"}; $state = "WRITE"; } |
From: <svn...@op...> - 2009-04-22 11:52:45
|
Author: bellmich Date: Wed Apr 22 13:52:40 2009 New Revision: 207 URL: http://libwbxml.opensync.org/changeset/207 Log: updated number of AIRSYNC tests Modified: wbxml2/trunk/CMakeLists.txt Modified: wbxml2/trunk/CMakeLists.txt ============================================================================== --- wbxml2/trunk/CMakeLists.txt Wed Apr 22 13:51:56 2009 (r206) +++ wbxml2/trunk/CMakeLists.txt Wed Apr 22 13:52:40 2009 (r207) @@ -228,7 +228,7 @@ ENABLE_TESTING() CONFIGURE_FILE( "tests/launchTests.sh" "${CMAKE_CURRENT_BINARY_DIR}/launchTests.sh") CONFIGURE_FILE( "tests/normalize_xml.pl" "${CMAKE_CURRENT_BINARY_DIR}/normalize_xml.pl" @ONLY) -SET( airsync_tests 1 ) +SET( airsync_tests 3 ) SET( ddf_tests 7 ) # 2009-Jan-19 bellmich # All DRMREL 1.0 tests are switched off. |
From: <svn...@op...> - 2009-04-22 11:52:07
|
Author: bellmich Date: Wed Apr 22 13:51:56 2009 New Revision: 206 URL: http://libwbxml.opensync.org/changeset/206 Log: committed patch from Ossi Jormakka (Ixonos Plc) (added two new tests for AIRSYNC) Added: wbxmlTestSuite/trunk/airsync/airsync-002-search_query_for_exchange.xml wbxmlTestSuite/trunk/airsync/airsync-003-search_response_from_exchange.xml Added: wbxmlTestSuite/trunk/airsync/airsync-002-search_query_for_exchange.xml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ wbxmlTestSuite/trunk/airsync/airsync-002-search_query_for_exchange.xml Wed Apr 22 13:51:56 2009 (r206) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" +"http://www.microsoft.com/"> +<Search xmlns="http://synce.org/formats/airsync_wm5/search"> + <Store> + <Name>Mailbox</Name> + <Query> + <And> + <Class xmlns="http://synce.org/formats/airsync_wm5/airsync">Calendar</Class> + <FreeText>test</FreeText> + </And> + </Query> + <Options> + <RebuildResults/> + <DeepTraversal/> + <Range>0-1</Range> + <BodyPreference xmlns="http://synce.org/formats/airsync_wm5/airsyncbase"> + <Type>2</Type> + </BodyPreference> + </Options> + </Store> +</Search> Added: wbxmlTestSuite/trunk/airsync/airsync-003-search_response_from_exchange.xml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ wbxmlTestSuite/trunk/airsync/airsync-003-search_response_from_exchange.xml Wed Apr 22 13:51:56 2009 (r206) @@ -0,0 +1,102 @@ +<?xml version="1.0"?> +<!DOCTYPE AirSync PUBLIC "-//AIRSYNC//DTD AirSync//EN" "http://www.microsoft.com/"> +<Search xmlns="http://synce.org/formats/airsync_wm5/search"> + <Status>1</Status> + <Response> + <Store> + <Status>1</Status> + <Result> + <Class xmlns="http://synce.org/formats/airsync_wm5/airsync">Calendar</Class> + <LongId>RgAAAADi22n%2b5K6eSoH%2bdzl9mrUlBwAiJdrFeosuS5FQPukoeMhpAH7xbHCsAAAiJdrFeosuS5FQPukoeMhpAH7zrksUAAAP</LongId> + <CollectionId xmlns="http://synce.org/formats/airsync_wm5/airsync">3</CollectionId> + <Properties> + <Timezone xmlns="http://synce.org/formats/airsync_wm5/calendar">iP///0YATABFACAAUwB0AGEAbgBkAGEAcgBkACAAVABpAG0AZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAFAAQAAAAAAAAAAAAAAEYATABFACAARABhAHkAbABpAGcAaAB0ACAAVABpAG0AZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAMAAAAAAAAAxP///w==</Timezone> + <DtStamp xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T112208Z</DtStamp> + <StartTime xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T090000Z</StartTime> + <Subject xmlns="http://synce.org/formats/airsync_wm5/calendar">hfjjf</Subject> + <UID xmlns="http://synce.org/formats/airsync_wm5/calendar">040000008200E00074C5B7101A82E00800000000F4BD10E469BEC901000000000000000010000000449579D4A72EED4EB3F70D04913F0277</UID> + <OrganizerName xmlns="http://synce.org/formats/airsync_wm5/calendar">maemo</OrganizerName> + <OrganizerEmail xmlns="http://synce.org/formats/airsync_wm5/calendar">maemo@test.local</OrganizerEmail> + <Attendees xmlns="http://synce.org/formats/airsync_wm5/calendar"> + <Attendee> + <Email>maemo@test.local</Email> + <Name>maemo</Name> + <AttendeeStatus>0</AttendeeStatus> + <AttendeeType>1</AttendeeType> + </Attendee> + </Attendees> + <Location xmlns="http://synce.org/formats/airsync_wm5/calendar">meetingroom testi</Location> + <EndTime xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T100000Z</EndTime> + <Body xmlns="http://synce.org/formats/airsync_wm5/airsyncbase"> + <Type>2</Type> + <EstimatedDataSize>365</EstimatedDataSize> + <Data><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta name="Generator" content="Microsoft Exchange Server"> +<!-- converted from text --> +<style>.EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; }</style></head> +<body> +<font size="2"><div class="PlainText">&nbsp;</div></font> +</body> +</html></Data> + </Body> + <Sensitivity xmlns="http://synce.org/formats/airsync_wm5/calendar">0</Sensitivity> + <BusyStatus xmlns="http://synce.org/formats/airsync_wm5/calendar">0</BusyStatus> + <AllDayEvent xmlns="http://synce.org/formats/airsync_wm5/calendar">0</AllDayEvent> + <Reminder xmlns="http://synce.org/formats/airsync_wm5/calendar">15</Reminder> + <MeetingStatus xmlns="http://synce.org/formats/airsync_wm5/calendar">5</MeetingStatus> + <NativeBodyType xmlns="http://synce.org/formats/airsync_wm5/airsyncbase">1</NativeBodyType> + </Properties> + </Result> + <Result> + <Class xmlns="http://synce.org/formats/airsync_wm5/airsync">Calendar</Class> + <LongId>RgAAAADi22n%2b5K6eSoH%2bdzl9mrUlBwAiJdrFeosuS5FQPukoeMhpAH7xbHCsAAAiJdrFeosuS5FQPukoeMhpAH7zrksSAAAP</LongId> + <CollectionId xmlns="http://synce.org/formats/airsync_wm5/airsync">3</CollectionId> + <Properties> + <Timezone xmlns="http://synce.org/formats/airsync_wm5/calendar">iP///0YATABFACAAUwB0AGEAbgBkAGEAcgBkACAAVABpAG0AZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAFAAQAAAAAAAAAAAAAAEYATABFACAARABhAHkAbABpAGcAaAB0ACAAVABpAG0AZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAMAAAAAAAAAxP///w==</Timezone> + <DtStamp xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T105620Z</DtStamp> + <StartTime xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T110000Z</StartTime> + <Subject xmlns="http://synce.org/formats/airsync_wm5/calendar">tent</Subject> + <UID xmlns="http://synce.org/formats/airsync_wm5/calendar">040000008200E00074C5B7101A82E008000000002E1A5BA069BEC901000000000000000010000000F1BB45467D72B44F822E9686F1D18ED4</UID> + <OrganizerName xmlns="http://synce.org/formats/airsync_wm5/calendar">maemo</OrganizerName> + <OrganizerEmail xmlns="http://synce.org/formats/airsync_wm5/calendar">maemo@test.local</OrganizerEmail> + <Attendees xmlns="http://synce.org/formats/airsync_wm5/calendar"> + <Attendee> + <Email>meetingroomtest@test.local</Email> + <Name>meetingroom testi</Name> + <AttendeeStatus>0</AttendeeStatus> + <AttendeeType>3</AttendeeType> + </Attendee> + <Attendee> + <Email>maemo@test.local</Email> + <Name>maemo</Name> + <AttendeeStatus>0</AttendeeStatus> + <AttendeeType>1</AttendeeType> + </Attendee> + </Attendees> + <Location xmlns="http://synce.org/formats/airsync_wm5/calendar">meetingroom testi</Location> + <EndTime xmlns="http://synce.org/formats/airsync_wm5/calendar">20090417T120000Z</EndTime> + <Body xmlns="http://synce.org/formats/airsync_wm5/airsyncbase"> + <Type>2</Type> + <EstimatedDataSize>365</EstimatedDataSize> + <Data><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta name="Generator" content="Microsoft Exchange Server"> +<!-- converted from text --> +<style>.EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; }</style></head> +<body> +<font size="2"><div class="PlainText">&nbsp;</div></font> +</body> +</html></Data> + </Body> + <Sensitivity xmlns="http://synce.org/formats/airsync_wm5/calendar">0</Sensitivity> + <BusyStatus xmlns="http://synce.org/formats/airsync_wm5/calendar">0</BusyStatus> + <AllDayEvent xmlns="http://synce.org/formats/airsync_wm5/calendar">0</AllDayEvent> + <Reminder xmlns="http://synce.org/formats/airsync_wm5/calendar">15</Reminder> + <MeetingStatus xmlns="http://synce.org/formats/airsync_wm5/calendar">5</MeetingStatus> + <NativeBodyType xmlns="http://synce.org/formats/airsync_wm5/airsyncbase">1</NativeBodyType> + </Properties> + </Result> + <Range>0-1</Range> + <Total>19</Total> + </Store> + </Response> +</Search> |