Changeset 169
- Timestamp:
- 05/24/06 16:43:46 (2 years ago)
- Files:
-
- branches/dev-branch/libsyncml/objects/sml_auth.c (modified) (1 diff)
- branches/dev-branch/libsyncml/parser/sml_xml_assm.c (modified) (13 diffs)
- branches/dev-branch/libsyncml/parser/sml_xml_parse.c (modified) (6 diffs)
- branches/dev-branch/libsyncml/sml_command_internals.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_devinf.c (modified) (2 diffs)
- branches/dev-branch/libsyncml/sml_devinf.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_elements.c (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_elements.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_elements_internals.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_parse.c (modified) (2 diffs)
- branches/dev-branch/libsyncml/sml_parse.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_session.c (modified) (7 diffs)
- branches/dev-branch/libsyncml/sml_session.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_session_internals.h (modified) (1 diff)
- branches/dev-branch/libsyncml/sml_support.c (modified) (1 diff)
- branches/dev-branch/tests/check_obex.c (modified) (4 diffs)
- branches/dev-branch/tests/check_sync.c (modified) (4 diffs)
- branches/dev-branch/tools/syncml-obex-client.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dev-branch/libsyncml/objects/sml_auth.c
r160 r169 108 108 } 109 109 110 if (auth->state == SML_ERROR_AUTH_REJECTED || auth->state == SML_ERROR_AUTH_REQUIRED) 110 if (auth->state == SML_ERROR_AUTH_REJECTED || auth->state == SML_ERROR_AUTH_REQUIRED) { 111 smlTrace(TRACE_INTERNAL, "Ending session due to wrong / missing creds"); 111 112 session->end = TRUE; 113 } 112 114 113 115 reply = smlAuthHeaderReply(session, auth->state, &error); branches/dev-branch/libsyncml/parser/sml_xml_assm.c
r166 r169 198 198 } 199 199 200 SmlBool smlItemAssemble(SmlItem *item, SmlXmlAssembler *assm, Sml Bool raw, unsigned int complete_size, SmlError **error)201 { 202 smlTrace(TRACE_ENTRY, "%s(%p, %p, % i, %i, %p)", __func__, item, assm, raw, complete_size, error);200 SmlBool smlItemAssemble(SmlItem *item, SmlXmlAssembler *assm, SmlError **error) 201 { 202 smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, item, assm, error); 203 203 smlAssert(assm); 204 204 smlAssert(item); … … 222 222 } 223 223 224 //Meta225 /*if (complete_size) {226 if (!_smlXmlAssemblerStartNode(assm, SML_ELEMENT_META, error))227 goto error;228 229 if (!_smlXmlAssemblerAddIDNS(assm, NULL, SML_ELEMENT_SIZE, SML_NAMESPACE_METINF, complete_size, error))230 goto error;231 232 //META233 if (!_smlXmlAssemblerEndNode(assm, error))234 goto error;235 }*/236 237 224 if (smlItemHasData(item)) { 238 225 if (item->disabled) { 239 if (!_smlXmlAssemblerAddData(assm, SML_ELEMENT_DATA, "", 0, raw, error))226 if (!_smlXmlAssemblerAddData(assm, SML_ELEMENT_DATA, "", 0, item->raw, error)) 240 227 goto error; 241 228 } else { … … 245 232 goto error; 246 233 247 if (!_smlXmlAssemblerAddData(assm, SML_ELEMENT_DATA, data, size, raw, error))234 if (!_smlXmlAssemblerAddData(assm, SML_ELEMENT_DATA, data, size, item->raw, error)) 248 235 goto error; 249 236 } … … 347 334 goto error; 348 335 349 if (!smlItemAssemble(change->private.access.item, assm, FALSE, 0,error))336 if (!smlItemAssemble(change->private.access.item, assm, error)) 350 337 goto error; 351 338 … … 381 368 goto error; 382 369 383 if (change->size) { 370 const char *opt = smlAssemblerGetOption(assm->assembler, "USE_LARGEOBJECTS"); 371 SmlBool supportsLargeObjects = (opt && !atoi(opt)) ? FALSE : TRUE; 372 if (supportsLargeObjects && change->size) { 384 373 if (!_smlXmlAssemblerAddIDNS(assm, SML_ELEMENT_SIZE, SML_NAMESPACE_METINF, change->size, error)) 385 374 goto error; … … 390 379 goto error; 391 380 392 const char *opt = smlAssemblerGetOption(assm->assembler, "ONLY_REPLACE");381 opt = smlAssemblerGetOption(assm->assembler, "ONLY_REPLACE"); 393 382 if (opt && atoi(opt) && change->type == SML_COMMAND_TYPE_ADD) { 394 383 change->private.change.item->target = change->private.change.item->source; … … 396 385 } 397 386 398 if (!smlItemAssemble(change->private.change.item, assm, FALSE, change->size,error))387 if (!smlItemAssemble(change->private.change.item, assm, error)) 399 388 goto error; 400 389 … … 418 407 } 419 408 420 if (assm->session->supportsLargeObjects && assm->session->incomingMaxObjSize && assm->session->version != SML_VERSION_10) { 409 const char *opt = smlAssemblerGetOption(assm->assembler, "USE_LARGEOBJECTS"); 410 SmlBool supportsLargeObjects = (opt && !atoi(opt)) ? FALSE : TRUE; 411 if (supportsLargeObjects && assm->session->incomingMaxObjSize && assm->session->version != SML_VERSION_10) { 421 412 if (!_smlXmlAssemblerStartNode(assm, SML_ELEMENT_META, error)) 422 413 goto error; … … 441 432 goto error; 442 433 443 /*if (assm->session->supportsNumberOfChanges && assm->session->version != SML_VERSION_10) { 434 opt = smlAssemblerGetOption(assm->assembler, "USE_NUMBEROFCHANGES"); 435 SmlBool supportsNumberOfChanges = (opt && !atoi(opt)) ? FALSE : TRUE; 436 if (supportsNumberOfChanges && assm->session->version != SML_VERSION_10) { 444 437 if (!_smlXmlAssemblerAddID(assm, SML_ELEMENT_NUMBEROFCHANGES, cmd->private.sync.numChanged, error)) 445 438 goto error; 446 } */439 } 447 440 448 441 smlTrace(TRACE_EXIT, "%s", __func__); … … 605 598 goto error; 606 599 607 if (!smlItemAssemble(cmd->private.results.status->item, assm, TRUE, 0,error))600 if (!smlItemAssemble(cmd->private.results.status->item, assm, error)) 608 601 goto error; 609 602 … … 712 705 goto error_free_writer; 713 706 714 if (session->incomingMaxMsgSize || session->incomingMaxObjSize) { 707 //const char *opt = smlAssemblerGetOption(assm->assembler, "USE_LARGEOBJECTS"); 708 //SmlBool supportsLargeObjects = (opt && !atoi(opt)) ? FALSE : TRUE; 709 if (session->incomingMaxMsgSize) { // || (session->incomingMaxObjSize && supportsLargeObjects)) { 715 710 if (!_smlXmlAssemblerStartNode(assm, SML_ELEMENT_META, error)) 716 711 goto error_free_writer; … … 721 716 } 722 717 723 if (session->incomingMaxObjSize) {718 /*if (supportsLargeObjects && session->incomingMaxObjSize) { 724 719 if (!_smlXmlAssemblerAddIDNS(assm, SML_ELEMENT_MAXOBJSIZE, SML_NAMESPACE_METINF, session->incomingMaxObjSize, error)) 725 720 goto error_free_writer; 726 } 721 }*/ 727 722 728 723 //META … … 1556 1551 SmlBool smlXmlAssemblerRun(SmlXmlAssembler *assm, char **data, unsigned int *size, SmlBool *end, SmlBool final, unsigned int maxsize, SmlError **error) 1557 1552 { 1558 return smlXmlAssemblerRunFull(assm, data, size, end, final, TRUE, maxsize, error); 1553 SmlBool ans = smlXmlAssemblerRunFull(assm, data, size, end, final, TRUE, maxsize, error); 1554 1555 smlLog("sent-%i.xml", *data, *size); 1556 return ans; 1559 1557 } 1560 1558 branches/dev-branch/libsyncml/parser/sml_xml_parse.c
r166 r169 492 492 } 493 493 494 static SmlBool _smlCommandSyncMetaParse(SmlXmlParser *parser, unsignedint *maxobjsize, SmlError **error)494 static SmlBool _smlCommandSyncMetaParse(SmlXmlParser *parser, int *maxobjsize, SmlError **error) 495 495 { 496 496 smlTrace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, parser, maxobjsize, error); … … 519 519 goto error; 520 520 } else if (maxobjsize && !strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_MAXOBJSIZE)) { 521 if (!_smlXmlParserGetID(parser, maxobjsize, SML_ELEMENT_MAXOBJSIZE, error)) 521 unsigned int loc_maxobjsize = 0; 522 if (!_smlXmlParserGetID(parser, &loc_maxobjsize, SML_ELEMENT_MAXOBJSIZE, error)) 522 523 goto error; 524 *maxobjsize = loc_maxobjsize; 523 525 } else { 524 526 smlErrorSet(error, SML_ERROR_GENERIC, "wrong initial node: %s", xmlTextReaderConstName(parser->reader)); … … 985 987 if (!*cmd) 986 988 goto error; 989 (*cmd)->private.sync.maxObjSize = -1; 987 990 988 991 while (1) { … … 1021 1024 goto error_free_cmd; 1022 1025 } else if (!strcmp((char *)xmlTextReaderConstName(parser->reader), SML_ELEMENT_NUMBEROFCHANGES)) { 1026 (*cmd)->private.sync.hasNumChanged = TRUE; 1023 1027 if (!_smlXmlParserGetID(parser, &((*cmd)->private.sync.numChanged), SML_ELEMENT_NUMBEROFCHANGES, error)) 1024 1028 goto error_free_cmd; … … 1367 1371 char *debugstr = smlPrintBinary(data, size); 1368 1372 smlTrace(TRACE_INTERNAL, "Xml input: %s", debugstr); 1373 smlLog("received-%i.xml", data, size); 1369 1374 g_free(debugstr); 1370 1375 … … 2049 2054 } 2050 2055 2056 smlDevInfAddDataStore(devinf, datastore); 2057 2051 2058 smlTrace(TRACE_EXIT, "%s", __func__); 2052 2059 return TRUE; branches/dev-branch/libsyncml/sml_command_internals.h
r166 r169 29 29 30 30 typedef struct SmlCommandSyncPrivate { 31 unsignedint numChanged;31 int numChanged; 32 32 unsigned int maxObjSize; 33 SmlBool hasNumChanged; 33 34 } SmlCommandSyncPrivate; 34 35 branches/dev-branch/libsyncml/sml_devinf.c
r166 r169 513 513 } 514 514 515 void smlDevInfConfigureSession(SmlDevInf *devinf, SmlSession *session) 516 { 517 smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, devinf, session); 518 smlAssert(devinf); 519 smlAssert(session); 520 521 if (!devinf->supportsNumberOfChanges) 522 smlSessionUseNumberOfChanges(session, FALSE); 523 524 if (!devinf->supportsLargeObjs) 525 smlSessionUseLargeObjects(session, FALSE); 526 527 smlTrace(TRACE_EXIT, "%s", __func__); 528 } 529 515 530 SmlCommand *smlDevInfNewResult(SmlCommand *cmd, SmlDevInf *devinf, SmlDevInfVersion version, SmlError **error) 516 531 { … … 579 594 goto error_free_cmd; 580 595 } 596 smlItemSetRaw(cmd->private.access.item, TRUE); 581 597 582 598 smlTrace(TRACE_EXIT, "%s: %p", __func__, cmd); branches/dev-branch/libsyncml/sml_devinf.h
r160 r169 83 83 SmlCommand *smlDevInfNewGet(SmlDevInfVersion version, SmlError **error); 84 84 85 void smlDevInfConfigureSession(SmlDevInf *devinf, SmlSession *session); 86 85 87 SmlDevInf *smlDevInfParse(const char *data, unsigned int length, SmlError **error); 86 88 SmlDevInf *smlDevInfFromResult(SmlCommand *result, SmlError **error); branches/dev-branch/libsyncml/sml_elements.c
r166 r169 507 507 } 508 508 509 void smlItemSetRaw(SmlItem *item, SmlBool raw) 510 { 511 smlAssert(item); 512 513 item->raw = raw; 514 } 515 509 516 void smlCredFree(SmlCred *cred) 510 517 { branches/dev-branch/libsyncml/sml_elements.h
r127 r169 50 50 void smlItemSetTarget(SmlItem *item, SmlLocation *target); 51 51 SmlLocation *smlItemGetTarget(SmlItem *item); 52 void smlItemSetRaw(SmlItem *item, SmlBool raw); 52 53 53 54 void smlHeaderFree(SmlHeader *header); branches/dev-branch/libsyncml/sml_elements_internals.h
r166 r169 50 50 51 51 SmlBool disabled; 52 /** If set to true, libsyncml will omit the cdata tags */ 53 SmlBool raw; 52 54 }; 53 55 branches/dev-branch/libsyncml/sml_parse.c
r160 r169 121 121 smlAssert(size); 122 122 smlAssert(parser->functions.start); 123 124 smlLog("received-%i.xml", data, size);125 123 126 124 if (parser->limit && size > parser->limit) { … … 399 397 if (!assm->functions.run(assm->assm_userdata, data, size, end, final, smlAssemblerGetLimit(assm), error)) 400 398 goto error; 401 402 smlLog("sent-%i.xml", *data, *size);403 399 404 400 smlTrace(TRACE_EXIT, "%s", __func__); branches/dev-branch/libsyncml/sml_parse.h
r152 r169 111 111 void smlAssemblerSetRequestedLimit(SmlAssembler *assm, unsigned int limit); 112 112 void smlAssemblerSetLimit(SmlAssembler *assm, unsigned int limit); 113 unsigned int smlSessionGetSendingLimit(SmlSession *session); 113 114 SmlBool smlAssemblerGetSpace(SmlAssembler *assm, int *space, SmlCommand *parent, SmlCommand *cmd, SmlError **error); 114 115 unsigned int smlAssemblerGetMaxObjSize(SmlAssembler *assm); branches/dev-branch/libsyncml/sml_session.c
r168 r169 481 481 switch (sesscmd->type) { 482 482 case SML_SESSION_FLUSH: 483 if (sesscmd->end) 483 if (sesscmd->end) { 484 484 session->end = TRUE; 485 smlTrace(TRACE_INTERNAL, "End on flush was set"); 486 } 485 487 if (!_smlSessionFlushInternal(session, sesscmd->final, &error)) 486 488 goto error; … … 571 573 572 574 smlAssemblerSetRequestedLimit(session->assembler, header->maxmsgsize); 573 smlAssemblerSetRequestedMaxObjSize(session->assembler, header->maxobjsize);575 //smlAssemblerSetRequestedMaxObjSize(session->assembler, header->maxobjsize); 574 576 575 577 /* Reserve the status for header reply. It will always be cmdRef 0 … … 703 705 goto error_free_cmd; 704 706 } 707 708 /* If we are a server, we just mimick the behaviour of the client regarding 709 * large object handling and support of number of changes. This way we dont 710 * need to parse the devinf */ 711 if (cmd->type == SML_COMMAND_TYPE_SYNC) { 712 smlTrace(TRACE_INTERNAL, "maxObjSize: %i, numbOfChanges: %i, %i", cmd->private.sync.maxObjSize, cmd->private.sync.hasNumChanged, cmd->private.sync.numChanged); 713 if (cmd->private.sync.maxObjSize != -1) 714 smlAssemblerSetRequestedMaxObjSize(session->assembler, cmd->private.sync.maxObjSize); 715 716 if (session->sessionType == SML_SESSION_TYPE_SERVER) { 717 if (cmd->private.sync.maxObjSize == -1) 718 smlSessionUseLargeObjects(session, FALSE); 719 720 if (cmd->private.sync.hasNumChanged == FALSE) 721 smlSessionUseNumberOfChanges(session, FALSE); 722 } 723 } 724 705 725 706 726 session->parentCommand = cmd; … … 1073 1093 else 1074 1094 session->lastMessageID = 1; 1075 1095 1076 1096 session->end = FALSE; 1077 1097 session->sessionType = sessionType; 1078 1098 session->lastCommandID = 0; 1079 session->supportsNumberOfChanges = TRUE;1080 session->supportsLargeObjects = TRUE;1081 1099 1082 1100 if (sessionType == SML_SESSION_TYPE_CLIENT) … … 1269 1287 } 1270 1288 1289 void smlSessionUseNumberOfChanges(SmlSession *session, SmlBool support) 1290 { 1291 smlTrace(TRACE_ENTRY, "%s(%p, %i)", __func__, session, support); 1292 smlAssert(session); 1293 1294 smlAssemblerSetOption(session->assembler, "USE_NUMBEROFCHANGES", support ? "1" : "0"); 1295 1296 smlTrace(TRACE_EXIT, "%s", __func__); 1297 } 1298 1299 void smlSessionUseLargeObjects(SmlSession *session, SmlBool support) 1300 { 1301 smlTrace(TRACE_ENTRY, "%s(%p, %i)", __func__, session, support); 1302 smlAssert(session); 1303 1304 smlAssemblerSetOption(session->assembler, "USE_LARGEOBJECTS", support ? "1" : "0"); 1305 1306 smlTrace(TRACE_EXIT, "%s", __func__); 1307 } 1308 1271 1309 void smlSessionUseOnlyReplace(SmlSession *session, SmlBool onlyReplace) 1272 1310 { … … 1290 1328 } 1291 1329 1330 unsigned int smlSessionGetSendingLimit(SmlSession *session) 1331 { 1332 smlAssert(session); 1333 return smlAssemblerGetLimit(session->assembler); 1334 } 1335 1292 1336 void smlSessionSetReceivingLimit(SmlSession *session, unsigned int limit) 1293 1337 { … … 1308 1352 1309 1353 smlTrace(TRACE_EXIT, "%s", __func__); 1354 } 1355 1356 unsigned int smlSessionGetMaxObjSize(SmlSession *session) 1357 { 1358 smlAssert(session); 1359 return smlAssemblerGetMaxObjSize(session->assembler); 1310 1360 } 1311 1361 branches/dev-branch/libsyncml/sml_session.h
r168 r169 52 52 void smlSessionUseStringTable(SmlSession *session, SmlBool useStringtable); 53 53 void smlSessionUseOnlyReplace(SmlSession *session, SmlBool onlyReplace); 54 void smlSessionUseNumberOfChanges(SmlSession *session, SmlBool support); 55 void smlSessionUseLargeObjects(SmlSession *session, SmlBool support); 54 56 void smlSessionSetSendingLimit(SmlSession *session, unsigned int limit); 55 57 void smlSessionSetReceivingLimit(SmlSession *session, unsigned int limit); 56 58 void smlSessionSetSendingMaxObjSize(SmlSession *session, unsigned int limit); 59 unsigned int smlSessionGetMaxObjSize(SmlSession *session); 57 60 void smlSessionSetReceivingMaxObjSize(SmlSession *session, unsigned int limit); 58 61 const char *smlSessionGetSessionID(SmlSession *session); branches/dev-branch/libsyncml/sml_session_internals.h
r168 r169 31 31 SmlAssembler *assembler; 32 32 SmlBool onlyReplace; 33 34 SmlBool supportsNumberOfChanges;35 SmlBool supportsLargeObjects;36 33 37 34 SmlSessionEventCallback eventCallback; branches/dev-branch/libsyncml/sml_support.c
r127 r169 73 73 char *logfile = NULL; 74 74 for (;;i = i + 1) { 75 logfile = g_strdup_printf(logname, i); 75 char *logfile_tmp = g_strdup_printf("%s/%s", trace, logname); 76 logfile = g_strdup_printf(logfile_tmp, i); 77 g_free(logfile_tmp); 76 78 if (!g_file_test(logfile, G_FILE_TEST_EXISTS)) 77 79 break; branches/dev-branch/tests/check_obex.c
r127 r169 307 307 smlTransportDataDeref(data); 308 308 309 while (server_receives < 1) { usleep(50); }; 310 309 311 fail_unless(smlTransportDisconnect(client, NULL, &error), NULL); 310 312 fail_unless(error == NULL, NULL); 311 313 312 while (client_disconnect_done < 1 && client_errors < 2) { usleep(50); };314 while (client_disconnect_done < 2 && client_errors < 1) { usleep(50); }; 313 315 314 316 fail_unless(client_receives == 0, NULL); 315 317 fail_unless(server_receives == 1, NULL); 316 318 fail_unless(client_connect_done == 2, NULL); 317 fail_unless(client_disconnect_done == 1, NULL);318 fail_unless(client_errors == 2, NULL);319 fail_unless(client_disconnect_done == 2, NULL); 320 fail_unless(client_errors == 1, NULL); 319 321 320 322 smlTransportStop(client); … … 566 568 fail_unless(error == NULL, NULL); 567 569 568 while (client_disconnect_done < 2) { usleep(50); };570 while (client_disconnect_done < 6) { usleep(50); }; 569 571 570 572 fail_unless(client_receives == 3, NULL); … … 805 807 fail_unless(error == NULL, NULL); 806 808 807 while (client_disconnect_done < 1 || client_errors < 2) { usleep(50); };809 while (client_disconnect_done < 1 || client_errors < 1) { usleep(50); }; 808 810 809 811 fail_unless(client_receives == 0, NULL); … … 811 813 fail_unless(client_connect_done == 1, NULL); 812 814 fail_unless(client_disconnect_done == 1, NULL); 813 fail_unless(client_errors == 2, NULL);815 fail_unless(client_errors == 1, NULL); 814 816 815 817 smlTransportStop(client); branches/dev-branch/tests/check_sync.c
r166 r169 26 26 #include <libsyncml/transports/http_client.h> 27 27 #include <libsyncml/transports/http_server.h> 28 29 #include <libsyncml/objects/sml_devinf_obj.h> 28 30 29 31 #define NUM_SESSIONS 30 … … 224 226 smlTrace(TRACE_ENTRY, "%s()", __func__); 225 227 228 fail_unless(numChanges != 87, NULL); 226 229 syncs_received++; 227 230 … … 1038 1041 END_TEST 1039 1042 1043 /* client -- 3 * alert ---> server 1044 * server -- statuses, 3 * alert ---> client 1045 * client -- statuses, num * add, num * replace, num * delete ---> server 1046 * server -- statuses ---> client 1047 */ 1048 START_TEST (sync_multi_conf_from_devinf) 1049 { 1050 int num_items = 1; 1051 1052 init_alerts_received = 0; 1053 alerts_received = 0; 1054 syncs_received = 0; 1055 sync_ends_received = 0; 1056 changes_received = 0; 1057 replies_received = 0; 1058 adds_received = 0; 1059 add_replies_received = 0; 1060 deletes_received = 0; 1061 delete_replies_received = 0; 1062 modifies_received = 0; 1063 modify_replies_received = 0; 1064 session_ends = 0; 1065 1066 transport_errors = 0; 1067 num_sessions = 0; 1068 num_finals = 0; 1069 num_end = 0; 1070 session_errors = 0; 1071 1072 setup_testbed(NULL); 1073 1074 SmlError *error = NULL; 1075 SmlTransport *server = smlTransportNew(SML_TRANSPORT_HTTP_SERVER, &error); 1076 SmlTransport *client = smlTransportNew(SML_TRANSPORT_HTTP_CLIENT, &error); 1077 1078 SmlTransportHttpClientConfig clientConfig; 1079 clientConfig.port = 12004; 1080 clientConfig.url = "http://127.0.0.1:12004"; 1081 clientConfig.proxy = NULL; 1082 1083 SmlTransportHttpServerConfig serverConfig; 1084 serverConfig.port = 12004; 1085 serverConfig.url = NULL; 1086 serverConfig.interface = NULL; 1087 1088 managerTracker *clienttracker = g_malloc0(sizeof(managerTracker)); 1089 SmlManager *clientmanager = clienttracker->manager = smlManagerNew(client, &error); 1090 smlManagerSetEventCallback(clienttracker->manager, _manager_event, clienttracker); 1091 managerTracker *servertracker = g_malloc0(sizeof(managerTracker)); 1092 SmlManager *servermanager = servertracker->manager = smlManagerNew(server, &error); 1093 smlManagerSetEventCallback(servertracker->manager, _manager_event, servertracker); 1094 1095 fail_unless(smlTransportInitialize(client, &clientConfig, &error), NULL); 1096 fail_unless(smlTransportInitialize(server, &serverConfig, &error), NULL); 1097 1098 fail_unless(smlManagerStart(clientmanager, &error), NULL); 1099 fail_unless(error == NULL, NULL); 1100 fail_unless(smlManagerStart(servermanager, &error), NULL); 1101 fail_unless(error == NULL, NULL); 1102 1103 SmlLocation *loc = smlLocationNew("test", NULL, &error); 1104 fail_unless(loc != NULL, NULL); 1105 fail_unless(error == NULL, NULL); 1106 1107 SmlLocation *loc1 = smlLocationNew("test1", NULL, &error); 1108 fail_unless(loc1 != NULL, NULL); 1109 fail_unless(error == NULL, NULL); 1110 1111 SmlLocation *loc2 = smlLocationNew("test2", NULL, &error); 1112 fail_unless(loc2 != NULL, NULL); 1113 fail_unless(error == NULL, NULL); 1114 1115 SmlLocation *loc3 = smlLocationNew("test3", NULL, &error); 1116 fail_unless(loc3 != NULL, NULL); 1117 fail_unless(error == NULL, NULL); 1118 1119 clienttracker->ds[0] = smlDsClientNew(SML_ELEMENT_TEXT_VCARD, loc1, loc1, &error); 1120 clienttracker->ds[1] = smlDsClientNew(SML_ELEMENT_TEXT_VCAL, loc2, loc2, &error); 1121 clienttracker->ds[2] = smlDsClientNew(SML_ELEMENT_TEXT_PLAIN, loc3, loc3, &error); 1122 smlDsServerRegister(clienttracker->ds[0], clientmanager, &error); 1123 smlDsServerRegister(clienttracker->ds[1], clientmanager, &error); 1124 smlDsServerRegister(clienttracker->ds[2], clientmanager, &error); 1125 1126 servertracker->ds[0] = smlDsServerNew(SML_ELEMENT_TEXT_VCARD, loc1, &error); 1127 servertracker->ds[1] = smlDsServerNew(SML_ELEMENT_TEXT_VCAL, loc2, &error); 1128 servertracker->ds[2] = smlDsServerNew(SML_ELEMENT_TEXT_PLAIN, loc3, &error); 1129 smlDsServerSetConnectCallback(servertracker->ds[0], _recv_init_alert, servertracker); 1130 smlDsServerSetConnectCallback(servertracker->ds[1], _recv_init_alert, servertracker); 1131 smlDsServerSetConnectCallback(servertracker->ds[2], _recv_init_alert, servertracker); 1132 smlDsServerRegister(servertracker->ds[0], servermanager, &error); 1133 smlDsServerRegister(servertracker->ds[1], servermanager, &error); 1134 smlDsServerRegister(servertracker->ds[2], servermanager, &error); 1135 1136 /* The devinf obj */ 1137 SmlDevInf *devinf = smlDevInfNew("LibSyncmML", SML_DEVINF_DEVTYPE_WORKSTATION, &error); 1138 smlDevInfSetSupportsNumberOfChanges(devinf, FALSE); 1139 smlDevInfSetSupportsLargeObjs(devinf, FALSE); 1140 smlDevInfSetSupportsUTC(devinf, FALSE); 1141 SmlDevInfAgent *clientagent = smlDevInfAgentNew(devinf, &error); 1142 smlDevInfAgentRegister(clientagent, clientmanager, &error); 1143 1144 /* And we also add the devinfo to the devinf agent */ 1145 SmlDevInfDataStore *datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc1), &error); 1146 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_VCARD, "2.1"); 1147 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_VCARD, "2.1"); 1148 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1149 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1150 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1151 smlDevInfAddDataStore(devinf, datastore); 1152 1153 datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc2), &error); 1154 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_VCAL, "2.0"); 1155 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_VCAL, "2.0"); 1156 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1157 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1158 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1159 smlDevInfAddDataStore(devinf, datastore); 1160 1161 datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc3), &error); 1162 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_PLAIN, "1.0"); 1163 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_PLAIN, "1.0"); 1164 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1165 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1166 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1167 smlDevInfAddDataStore(devinf, datastore); 1168 1169 devinf = smlDevInfNew("LibSyncmML", SML_DEVINF_DEVTYPE_SERVER, &error); 1170 smlDevInfSetSupportsNumberOfChanges(devinf, FALSE); 1171 smlDevInfSetSupportsLargeObjs(devinf, FALSE); 1172 smlDevInfSetSupportsUTC(devinf, FALSE); 1173 SmlDevInfAgent *serveragent = smlDevInfAgentNew(devinf, &error); 1174 smlDevInfAgentRegister(serveragent, servermanager, &error); 1175 1176 datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc1), &error); 1177 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_VCARD, "2.1"); 1178 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_VCARD, "2.1"); 1179 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1180 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1181 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1182 smlDevInfAddDataStore(devinf, datastore); 1183 1184 datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc2), &error); 1185 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_VCAL, "2.0"); 1186 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_VCAL, "2.0"); 1187 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1188 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1189 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1190 smlDevInfAddDataStore(devinf, datastore); 1191 1192 datastore = smlDevInfDataStoreNew(smlLocationGetURI(loc3), &error); 1193 smlDevInfDataStoreSetRxPref(datastore, SML_ELEMENT_TEXT_PLAIN, "1.0"); 1194 smlDevInfDataStoreSetTxPref(datastore, SML_ELEMENT_TEXT_PLAIN, "1.0"); 1195 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_TWO_WAY, TRUE); 1196 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SLOW_SYNC, TRUE); 1197 smlDevInfDataStoreSetSyncCap(datastore, SML_DEVINF_SYNCTYPE_SERVER_ALERTED_SYNC, TRUE); 1198 smlDevInfAddDataStore(devinf, datastore); 1199 1200 smlLocationUnref(loc1); 1201 smlLocationUnref(loc2); 1202 smlLocationUnref(loc3); 1203 1204 /* The authenticator */ 1205 SmlAuthenticator *auth = smlAuthNew(&error); 1206 smlAuthSetEnable(auth, FALSE); 1207 smlAuthRegister(auth, clientmanager, &error); 1208 1209 /* The authenticator */ 1210 SmlAuthenticator *auth2 = smlAuthNew(&error); 1211 smlAuthSetEnable(auth2, FALSE); 1212 smlAuthRegister(auth2, servermanager, &error); 1213 1214 clienttracker->session = smlSessionNew(SML_SESSION_TYPE_CLIENT, SML_MIMETYPE_XML, SML_VERSION_12, SML_PROTOCOL_SYNCML, loc, loc, NULL, 0, &error); 1215 smlSessionSetReceivingLimit(clienttracker->session, 76400); 1216 smlSessionSetReceivingMaxObjSize(clienttracker->session, 76500); 1217 1218 smlDevInfConfigureSession(devinf, clienttracker->session); 1219 1220 fail_unless(smlManagerSessionAdd(clientmanager, clienttracker->session, NULL, &error), NULL); 1221 fail_unless(error == NULL, NULL); 1222 1223 smlLocationUnref(loc); 1224 1225 clienttracker->dssessions[0] = smlDsServerSendAlert(clienttracker->ds[0], clienttracker->session, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1226 clienttracker->dssessions[1] = smlDsServerSendAlert(clienttracker->ds[1], clienttracker->session, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1227 clienttracker->dssessions[2] = smlDsServerSendAlert(clienttracker->ds[2], clienttracker->session, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1228 1229 fail_unless(smlDevInfAgentSendDevInf(clientagent, clienttracker->session, &error), NULL); 1230 fail_unless(error == NULL, NULL); 1231 1232 fail_unless(smlSessionFlush(clienttracker->session, TRUE, &error), NULL); 1233 fail_unless(error == NULL, NULL); 1234 1235 while (init_alerts_received != 3 || num_sessions != 2) { 1236 smlManagerDispatch(servermanager); 1237 smlManagerDispatch(clientmanager); 1238 usleep(100); 1239 } 1240 1241 fail_unless(smlSessionGetSendingLimit(servertracker->session) == 76400, NULL); 1242 fail_unless(smlSessionGetMaxObjSize(servertracker->session) != 76500, NULL); 1243 smlSessionSetReceivingLimit(servertracker->session, 76400); 1244 smlSessionSetReceivingMaxObjSize(servertracker->session, 76500); 1245 1246 smlDsSessionGetAlert(servertracker->dssessions[0], _recv_alert, GINT_TO_POINTER(1)); 1247 smlDsSessionGetAlert(servertracker->dssessions[1], _recv_alert, GINT_TO_POINTER(1)); 1248 smlDsSessionGetAlert(servertracker->dssessions[2], _recv_alert, GINT_TO_POINTER(1)); 1249 1250 SmlDevInf *recvClientDevInf = smlDevInfAgentGetDevInf(serveragent); 1251 fail_unless(smlDevInfNumDataStores(recvClientDevInf) == 3, NULL); 1252 fail_unless(smlDevInfSupportsNumberOfChanges(recvClientDevInf) == FALSE, NULL); 1253 fail_unless(smlDevInfSupportsLargeObjs(recvClientDevInf) == FALSE, NULL); 1254 fail_unless(smlDevInfSupportsUTC(recvClientDevInf) == FALSE, NULL); 1255 1256 fail_unless(smlDevInfAgentSendDevInf(serveragent, servertracker->session, &error), NULL); 1257 fail_unless(error == NULL, NULL); 1258 1259 smlDsSessionSendAlert(servertracker->dssessions[0], SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1260 smlDsSessionSendAlert(servertracker->dssessions[1], SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1261 smlDsSessionSendAlert(servertracker->dssessions[2], SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 1262 1263 fail_unless(servertracker->session != NULL, NULL); 1264 fail_unless(smlSessionFlush(servertracker->session, TRUE, &error), NULL); 1265 1266 smlDsSessionGetAlert(clienttracker->dssessions[0], _recv_alert, GINT_TO_POINTER(1)); 1267 smlDsSessionGetAlert(clienttracker->dssessions[1], _recv_alert, GINT_TO_POINTER(1)); 1268 smlDsSessionGetAlert(clienttracker->dssessions[2], _recv_alert, GINT_TO_POINTER(1)); 1269 1270 while (alerts_received != 6) { 1271 smlDsSessionDispatch(servertracker->dssessions[0]); 1272 smlDsSessionDispatch(servertracker->dssessions[1]); 1273 smlDsSessionDispatch(servertracker->dssessions[2]); 1274 1275 smlDsSessionDispatch(clienttracker->dssessions[0]); 1276 smlDsSessionDispatch(clienttracker->dssessions[1]); 1277 smlDsSessionDispatch(clienttracker->dssessions[2]); 1278 1279 smlManagerDispatch(servermanager); 1280 smlManagerDispatch(clientmanager); 1281 usleep(100); 1282 } 1283 1284 fail_unless(smlSessionGetSendingLimit(clienttracker->session) == 76400, NULL); 1285 fail_unless(smlSessionGetMaxObjSize(clienttracker->session) == 0, NULL); 1286 1287 SmlDevInf *recvServerDevInf = smlDevInfAgentGetDevInf(clientagent); 1288 fail_unless(smlDevInfNumDataStores(recvServerDevInf) == 3, NULL); 1289 fail_unless(smlDevInfSupportsNumberOfChanges(recvServerDevInf) == FALSE, NULL); 1290 fail_unless(smlDevInfSupportsLargeObjs(recvServerDevInf) == FALSE, NULL); 1291 fail_unless(smlDevInfSupportsUTC(recvServerDevInf) == FALSE, NULL); 1292 1293 smlDsSessionSendSync(clienttracker->dssessions[0], 87, _sync_reply, GINT_TO_POINTER(1), &error); 1294 smlDsSessionSendSync(clienttracker->dssessions[1], 87, _sync_reply, GINT_TO_POINTER(1), &error); 1295 smlDsSessionSendSync(clienttracker->dssessions[2], 87, _sync_reply, GINT_TO_POINTER(1), &error); 1296 1297 int i = 0; 1298 for (i = 0; i < num_items; i++) { 1299 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_ADD, "uid", "data", 4, SML_ELEMENT_TEXT_VCARD, _add_reply, GINT_TO_POINTER(2), &error), NULL); 1300 fail_unless(error == NULL, NULL); 1301 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_REPLACE, "uid", "newdata", 7, SML_ELEMENT_TEXT_VCARD, _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1302 fail_unless(error == NULL, NULL); 1303 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[0], SML_CHANGE_DELETE, "uid", NULL, 0, SML_ELEMENT_TEXT_VCARD, _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1304 fail_unless(error == NULL, NULL); 1305 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_ADD, "uid", "data", 4, SML_ELEMENT_TEXT_VCAL, _add_reply, GINT_TO_POINTER(2), &error), NULL); 1306 fail_unless(error == NULL, NULL); 1307 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_REPLACE, "uid", "newdata", 7, SML_ELEMENT_TEXT_VCAL, _modify_reply, GINT_TO_POINTER(1), &error), NULL); 1308 fail_unless(error == NULL, NULL); 1309 fail_unless(smlDsSessionQueueChange(clienttracker->dssessions[1], SML_CHANGE_DELETE, "uid", NULL, 0, SML_ELEMENT_TEXT_VCAL, _delete_reply, GINT_TO_POINTER(1), &error), NULL); 1310
