Changeset 500
- Timestamp:
- 07/16/08 15:29:47 (4 months ago)
- Files:
-
- trunk/libsyncml/sml_manager.c (modified) (1 diff)
- trunk/libsyncml/sml_notification.c (modified) (3 diffs)
- trunk/libsyncml/sml_notification_internals.h (modified) (1 diff)
- trunk/libsyncml/sml_parse.c (modified) (4 diffs)
- trunk/libsyncml/sml_parse.h (modified) (1 diff)
- trunk/libsyncml/sml_parse_internals.h (modified) (1 diff)
- trunk/libsyncml/syncml_internals.h (modified) (1 diff)
- trunk/libsyncml/transports/obex_client.c (modified) (1 diff)
- trunk/tests/check_sync.c (modified) (33 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libsyncml/sml_manager.c
r492 r500 217 217 if (!parser) 218 218 goto session_error; 219 /* add manager to parser for OMA DS 1.2 SAN handling */ 220 smlParserSetManager(parser, manager); 219 221 220 222 /* start to parse the data */ trunk/libsyncml/sml_notification.c
r492 r500 194 194 if (!san) 195 195 goto error; 196 san->type = SML_MIMETYPE_SAN; 196 197 197 198 /* Version */ … … 313 314 } 314 315 315 static SmlBool _smlNotificationAssemble11(SmlNotification *san, char **data, unsigned int *size, SmlProtocolVersion version, SmlError **error)316 SmlBool smlNotificationAssemble11(SmlNotification *san, char **data, unsigned int *size, SmlProtocolVersion version, SmlError **error) 316 317 { 317 318 smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %i, %p)", __func__, san, data, size, version, error); … … 514 515 return _smlNotificationAssemble12(san, data, size, error); 515 516 case SML_SAN_VERSION_10: 516 return _smlNotificationAssemble11(san, data, size, SML_VERSION_10, error);517 return smlNotificationAssemble11(san, data, size, SML_VERSION_10, error); 517 518 case SML_SAN_VERSION_11: 518 return _smlNotificationAssemble11(san, data, size, SML_VERSION_11, error);519 return smlNotificationAssemble11(san, data, size, SML_VERSION_11, error); 519 520 case SML_SAN_VERSION_UNKNOWN: 520 521 smlErrorSet(error, SML_ERROR_GENERIC, "Unknown SAN version."); trunk/libsyncml/sml_notification_internals.h
r486 r500 45 45 }; 46 46 47 SmlBool smlNotificationAssemble11( 48 SmlNotification *san, 49 char **data, 50 unsigned int *size, 51 SmlProtocolVersion version, 52 SmlError **error); 53 47 54 #endif //_SML_NOTIFICATION_INTERNALS_H_ trunk/libsyncml/sml_parse.c
r474 r500 25 25 #include "sml_command_internals.h" 26 26 #include "sml_elements_internals.h" 27 #include "sml_notification_internals.h" 27 28 28 29 #include "parser/sml_xml_assm.h" … … 58 59 switch (type) { 59 60 case SML_MIMETYPE_XML: 61 if (!(parser->parser_userdata = smlXmlParserNew(&(parser->functions), error))) 62 goto error_free_parser; 63 break; 64 case SML_MIMETYPE_SAN: 65 /* SANs will be converted to normal SyncML 1.1 notifications */ 60 66 if (!(parser->parser_userdata = smlXmlParserNew(&(parser->functions), error))) 61 67 goto error_free_parser; … … 85 91 } 86 92 93 void smlParserSetManager(SmlParser *parser, SmlManager *manager) 94 { 95 smlAssert(parser); 96 smlAssert(manager); 97 parser->manager = manager; 98 } 99 87 100 /** @brief Frees a parser 88 101 * … … 121 134 smlAssert(size); 122 135 smlAssert(parser->functions.start); 123 136 smlAssertMsg(parser->type != SML_MIMETYPE_SAN || parser->manager, 137 SML_ASSERT_MSG_SAN_PARSE_REQUIRES_MANAGER); 138 124 139 if (parser->limit && size > parser->limit) { 125 140 smlErrorSet(error, SML_ERROR_GENERIC, "Input data too large"); 126 141 goto error; 127 142 } 128 129 if (!parser->functions.start(parser->parser_userdata, data, size, error)) 130 goto error; 143 144 if (parser->type == SML_MIMETYPE_SAN) { 145 /* convert OMA DS 1.2 SAN into an SyncML 1.1 notification */ 146 smlTrace(TRACE_INTERNAL, "%s - detected an OMA DS 1.2 SAN", __func__); 147 148 /* parse the SAN */ 149 SmlNotification *san = smlNotificationParse(data, size, error); 150 if (!san) 151 goto error; 152 153 /* fix 1.2 SAN for use with SyncML 1.1 */ 154 smlNotificationSetManager(san, parser->manager); 155 san->type = SML_MIMETYPE_XML; 156 san->sessionType = SML_SESSION_TYPE_CLIENT; 157 san->target = smlLocationNew("/", NULL, error); 158 if (!san->target) 159 goto error; 160 161 /* assemble a SyncML 1.1 notification */ 162 char *xmlData = NULL; 163 unsigned int xmlSize = 0; 164 if (!smlNotificationAssemble11(san, &xmlData, &xmlSize, SML_VERSION_12, error)) 165 goto error; 166 smlTrace(TRACE_INTERNAL, 167 "%s - converted OMA DS 1.2 SAN to SyncML 1.1 server alerted sync - %s", 168 __func__, xmlData); 169 170 /* run the parser on the converted SAN */ 171 if (!parser->functions.start(parser->parser_userdata, xmlData, xmlSize, error)) { 172 smlSafeCFree(&xmlData); 173 goto error; 174 } 175 smlSafeCFree(&xmlData); 176 } else { 177 /* run the parser directly on the data */ 178 if (!parser->functions.start(parser->parser_userdata, data, size, error)) 179 goto error; 180 } 131 181 132 182 smlTrace(TRACE_EXIT, "%s", __func__); trunk/libsyncml/sml_parse.h
r474 r500 133 133 int smlAssemblerGetRequestedMaxObjSize(SmlAssembler *assm) LIBSYNCML_DEPRECATED; 134 134 135 /* If you want to parse OMA DS 1.2 SANs then the manager is required. */ 136 void smlParserSetManager(SmlParser *parser, SmlManager *manager); 137 135 138 #endif //_SML_PARSE_H_ trunk/libsyncml/sml_parse_internals.h
r474 r500 27 27 SmlMimeType type; 28 28 unsigned int limit; 29 SmlManager *manager; 29 30 }; 30 31 trunk/libsyncml/syncml_internals.h
r491 r500 61 61 #define SML_ASSERT_MSG_ERROR_MUST_BE_AVAILABLE "If this function is used then there must be an error." 62 62 #define SML_ASSERT_MSG_ERROR_MUST_BE_FILLED "If this function is used then the error message must be present." 63 #define SML_ASSERT_MSG_SAN_PARSE_REQUIRES_MANAGER "If an OMA DS 1.2 SAN must be parsed then the manager must be present." 63 64 64 65 #endif trunk/libsyncml/transports/obex_client.c
r493 r500 1112 1112 1113 1113 /* Lets see if it was successfull */ 1114 smlTrace(TRACE_INTERNAL, "%s: Wait for the answer ...", __func__); 1114 1115 while (env->busy) { 1115 1116 if (OBEX_HandleInput(env->obexhandle, 20) < 0) { trunk/tests/check_sync.c
r496 r500 383 383 smlManagerDispatch(clientmanager); 384 384 usleep(100); 385 fail_unless( session_errors == 0, smlErrorPrint(&eventError));385 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 386 386 } 387 387 … … 399 399 smlManagerDispatch(clientmanager); 400 400 usleep(100); 401 fail_unless( session_errors == 0, smlErrorPrint(&eventError));401 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 402 402 } 403 403 … … 559 559 smlManagerDispatch(clientmanager); 560 560 usleep(100); 561 fail_unless( session_errors == 0, smlErrorPrint(&eventError));561 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 562 562 } 563 563 … … 589 589 smlManagerDispatch(clientmanager); 590 590 usleep(100); 591 fail_unless( session_errors == 0, smlErrorPrint(&eventError));591 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 592 592 } 593 593 … … 632 632 smlManagerDispatch(clientmanager); 633 633 usleep(100); 634 fail_unless( session_errors == 0, smlErrorPrint(&eventError));634 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 635 635 } 636 636 … … 645 645 smlManagerDispatch(clientmanager); 646 646 usleep(100); 647 fail_unless( session_errors == 0, smlErrorPrint(&eventError));647 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 648 648 } 649 649 … … 827 827 smlManagerDispatch(clientmanager); 828 828 usleep(100); 829 fail_unless( session_errors == 0, smlErrorPrint(&eventError));829 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 830 830 } 831 831 … … 857 857 smlManagerDispatch(clientmanager); 858 858 usleep(100); 859 fail_unless( session_errors == 0, smlErrorPrint(&eventError));859 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 860 860 } 861 861 … … 900 900 smlManagerDispatch(clientmanager); 901 901 usleep(100); 902 fail_unless( session_errors == 0, smlErrorPrint(&eventError));902 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 903 903 } 904 904 … … 941 941 smlManagerDispatch(clientmanager); 942 942 usleep(100); 943 fail_unless( session_errors == 0, smlErrorPrint(&eventError));943 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 944 944 } 945 945 … … 969 969 smlManagerDispatch(clientmanager); 970 970 usleep(100); 971 fail_unless( session_errors == 0, smlErrorPrint(&eventError));971 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 972 972 } 973 973 … … 982 982 smlManagerDispatch(clientmanager); 983 983 usleep(100); 984 fail_unless( session_errors == 0, smlErrorPrint(&eventError));984 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 985 985 } 986 986 … … 1235 1235 smlManagerDispatch(clientmanager); 1236 1236 usleep(100); 1237 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1237 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1238 1238 } 1239 1239 … … 1253 1253 smlDsSessionDispatch(servertracker->dssessions[2]); 1254 1254 usleep(100); 1255 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1255 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1256 1256 } 1257 1257 … … 1289 1289 smlManagerDispatch(clientmanager); 1290 1290 usleep(100); 1291 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1291 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1292 1292 } 1293 1293 … … 1342 1342 smlManagerDispatch(clientmanager); 1343 1343 usleep(100); 1344 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1344 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1345 1345 } 1346 1346 … … 1383 1383 smlManagerDispatch(clientmanager); 1384 1384 usleep(100); 1385 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1385 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1386 1386 } 1387 1387 … … 1411 1411 smlManagerDispatch(clientmanager); 1412 1412 usleep(100); 1413 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1413 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1414 1414 } 1415 1415 … … 1431 1431 smlManagerDispatch(clientmanager); 1432 1432 usleep(100); 1433 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1433 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1434 1434 } 1435 1435 … … 1636 1636 smlManagerDispatch(clientmanager); 1637 1637 usleep(100); 1638 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1638 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1639 1639 } 1640 1640 … … 1666 1666 smlManagerDispatch(clientmanager); 1667 1667 usleep(100); 1668 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1668 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1669 1669 } 1670 1670 … … 1709 1709 smlManagerDispatch(clientmanager); 1710 1710 usleep(100); 1711 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1711 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1712 1712 } 1713 1713 … … 1722 1722 smlManagerDispatch(clientmanager); 1723 1723 usleep(100); 1724 fail_unless( session_errors == 0, smlErrorPrint(&eventError));1724 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1725 1725 } 1726 1726 … … 1808 1808 1809 1809 SmlError *error = NULL; 1810 SmlTransport *server = smlTransportNew(SML_TRANSPORT_OBEX_SERVER, &error); 1811 SmlTransport *client = smlTransportNew(SML_TRANSPORT_OBEX_CLIENT, &error); 1812 1813 fail_unless(smlTransportSetConfigOption(client, "URL", "127.0.0.1", &error), NULL); 1810 SmlTransport *server = smlTransportNew(SML_TRANSPORT_OBEX_CLIENT, &error); 1811 SmlTransport *client = smlTransportNew(SML_TRANSPORT_OBEX_SERVER, &error); 1812 1814 1813 fail_unless(smlTransportSetConfigOption(client, "PORT", "10110", &error), NULL); 1815 1814 fail_unless(smlTransportSetConnectionType(client, SML_TRANSPORT_CONNECTION_TYPE_NET, &error), NULL); 1816 1815 1816 fail_unless(smlTransportSetConfigOption(server, "URL", "127.0.0.1", &error), NULL); 1817 1817 fail_unless(smlTransportSetConfigOption(server, "PORT", "10110", &error), NULL); 1818 1818 fail_unless(smlTransportSetConnectionType(server, SML_TRANSPORT_CONNECTION_TYPE_NET, &error), NULL); 1819 1819 1820 1820 managerTracker *clienttracker = g_malloc0(sizeof(managerTracker)); 1821 SmlManager *clientmanager = clienttracker->manager = smlManagerNew( server, &error);1821 SmlManager *clientmanager = clienttracker->manager = smlManagerNew(client, &error); 1822 1822 smlManagerSetEventCallback(clienttracker->manager, _manager_event, clienttracker); 1823 1823 managerTracker *servertracker = g_malloc0(sizeof(managerTracker)); 1824 SmlManager *servermanager = servertracker->manager = smlManagerNew( client, &error);1824 SmlManager *servermanager = servertracker->manager = smlManagerNew(server, &error); 1825 1825 smlManagerSetEventCallback(servertracker->manager, _manager_event, servertracker); 1826 1826 smlManagerSetLocalMaxMsgSize(servertracker->manager, TEST_DEFAULT_MAX_MSG_SIZE); 1827 smlManagerSetLocalMaxObjSize(servertracker->manager, TEST_DEFAULT_MAX_OBJ_SIZE); 1828 1829 fail_unless(smlManagerStart(clientmanager, &error), NULL); 1830 fail_unless(error == NULL, NULL); 1831 fail_unless(smlManagerStart(servermanager, &error), NULL); 1832 fail_unless(error == NULL, NULL); 1833 1827 1834 fail_unless(smlTransportInitialize(client, &error), NULL); 1828 1835 fail_unless(smlTransportInitialize(server, &error), NULL); 1829 1830 fail_unless(smlManagerStart(clientmanager, &error), NULL);1831 fail_unless(error == NULL, NULL);1832 fail_unless(smlManagerStart(servermanager, &error), NULL);1833 fail_unless(error == NULL, NULL);1834 1836 1835 1837 SmlLocation *loc1 = smlLocationNew("test1", NULL, &error); … … 1879 1881 smlAuthRegister(auth2, servermanager, &error); 1880 1882 1881 fail_unless(smlTransportConnect( client, &error), NULL);1883 fail_unless(smlTransportConnect(server, &error), NULL); 1882 1884 fail_unless(error == NULL, NULL); 1883 1885 … … 1885 1887 fail_unless(san != NULL, NULL); 1886 1888 fail_unless(error == NULL, NULL); 1889 smlNotificationSetManager(san, servermanager); 1887 1890 1888 1891 fail_unless(smlDsServerAddSan(servertracker->ds[0], san, &error), NULL); … … 1893 1896 fail_unless(error == NULL, NULL); 1894 1897 1895 /* FIXME: Clients never send SANs. They only receive SANs. */ 1896 fail_unless(smlNotificationSend(san, client, &error), NULL); 1897 fail_unless(error == NULL, NULL); 1898 fail_unless(smlNotificationSend(san, server, &error), smlErrorPrint(&error)); 1899 fail_unless(error == NULL, smlErrorPrint(&error)); 1898 1900 1899 1901 while (sans_received < 3 || num_sessions < 1) { … … 1901 1903 smlManagerDispatch(clientmanager); 1902 1904 usleep(100); 1905 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1903 1906 } 1904 1907 … … 1916 1919 smlManagerDispatch(clientmanager); 1917 1920 usleep(100); 1921 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1918 1922 } 1919 1923 … … 1945 1949 smlManagerDispatch(clientmanager); 1946 1950 usleep(100); 1947 } 1948 1949 smlDsSessionSendSync(clienttracker->dssessions[0], num_items, _sync_reply, GINT_TO_POINTER(1), &error); 1950 smlDsSessionSendSync(clienttracker->dssessions[1], num_items, _sync_reply, GINT_TO_POINTER(1), &error); 1951 smlDsSessionSendSync(clienttracker->dssessions[2], num_items, _sync_reply, GINT_TO_POINTER(1), &error); 1952 1953 int i = 0; 1954 for (i = 0; i < num_items; i++) { 1955 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_ADD, "uid", "data", 4, SML_ELEMENT_TEXT_VCARD, _add_reply, GINT_TO_POINTER(2), &error), NULL); 1956 fail_unless(error == NULL, NULL); 1957 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_REPLACE, "uid", "newdata", 7, SML_ELEMENT_TEXT_VCARD, _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1958 fail_unless(error == NULL, NULL); 1959 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_DELETE, "uid", NULL, 0, SML_ELEMENT_TEXT_VCARD, _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1960 fail_unless(error == NULL, NULL); 1961 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_ADD, "uid", "data", 4, SML_ELEMENT_TEXT_VCAL, _add_reply, GINT_TO_POINTER(2), &error), NULL); 1962 fail_unless(error == NULL, NULL); 1963 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_REPLACE, "uid", "newdata", 7, SML_ELEMENT_TEXT_VCAL, _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1964 fail_unless(error == NULL, NULL); 1965 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_DELETE, "uid", NULL, 0, SML_ELEMENT_TEXT_VCAL, _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1966 fail_unless(error == NULL, NULL); 1967 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[2], SML_CHANGE_ADD, "uid", "data", 4, SML_ELEMENT_TEXT_PLAIN, _add_reply, GINT_TO_POINTER(2), &error), NULL); 1968 fail_unless(error == NULL, NULL); 1969 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[2], SML_CHANGE_REPLACE, "uid", "newdata", 7, SML_ELEMENT_TEXT_PLAIN, _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1970 fail_unless(error == NULL, NULL); 1971 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[2], SML_CHANGE_DELETE, "uid", NULL, 0, SML_ELEMENT_TEXT_PLAIN, _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1972 fail_unless(error == NULL, NULL); 1973 } 1974 1975 smlDsSessionCloseSync(clienttracker->dssessions[0], &error); 1976 smlDsSessionCloseSync(clienttracker->dssessions[1], &error); 1977 smlDsSessionCloseSync(clienttracker->dssessions[2], &error); 1951 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 1952 } 1953 1954 const char *content_types[] = {SML_ELEMENT_TEXT_VCARD, SML_ELEMENT_TEXT_VCAL, SML_ELEMENT_TEXT_PLAIN}; 1955 int k = 0; 1956 for (k = 0; k < 3; k++) 1957 { 1958 smlDsSessionSendSync(clienttracker->dssessions[k], num_changes, _sync_reply, GINT_TO_POINTER(1), &error); 1959 1960 int i = 0; 1961 for (i = 0; i < num_items; i++) { 1962 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[k], SML_CHANGE_ADD, "uid", "data", 4, content_types[k], _add_reply, GINT_TO_POINTER(2), &error), NULL); 1963 fail_unless(error == NULL, NULL); 1964 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[k], SML_CHANGE_REPLACE, "uid", "newdata", 7, content_types[k], _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1965 fail_unless(error == NULL, NULL); 1966 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[k], SML_CHANGE_DELETE, "uid", NULL, 0, content_types[k], _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1967 fail_unless(error == NULL, NULL); 1968 } 1969 1970 smlDsSessionCloseSync(clienttracker->dssessions[k], &error); 1971 } 1978 1972 1979 1973 fail_unless(smlSessionFlush(clienttracker->session, TRUE, &error), NULL); … … 1998 1992 smlManagerDispatch(clientmanager); 1999 1993 usleep(100); 1994 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 2000 1995 } 2001 1996 … … 2010 2005 smlManagerDispatch(clientmanager); 2011 2006 usleep(100); 2007 fail_unless(eventError == NULL, smlErrorPrint(&eventError)); 2012 2008 } 2013 2009 … … 2075 2071 create_case(s, "sync_multi_conf_from_devinf", sync_multi_conf_from_devinf); 2076 2072 create_case(s, "sync_send_san", sync_send_san); 2077 /* OMA DS 1.2 SAN support is not fully implemented until now. */ 2078 // create_case(s, "sync_send_san12", sync_send_san12); 2073 create_case(s, "sync_send_san12", sync_send_san12); 2079 2074 2080 2075 return s;
