Changeset 488
- Timestamp:
- 07/11/08 17:32:06 (4 months ago)
- Files:
-
- trunk/libsyncml/parser/sml_xml_parse.c (modified) (4 diffs)
- trunk/libsyncml/sml_devinf.c (modified) (16 diffs)
- trunk/libsyncml/sml_manager.c (modified) (5 diffs)
- trunk/libsyncml/sml_notification.c (modified) (5 diffs)
- trunk/libsyncml/sml_notification.h (modified) (1 diff)
- trunk/tests/check_san.c (modified) (3 diffs)
- trunk/tests/check_session.c (modified) (3 diffs)
- trunk/tools/syncml-obex-client.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libsyncml/parser/sml_xml_parse.c
r481 r488 2401 2401 /* determine list item type */ 2402 2402 SmlDevInfCTCapType type; 2403 type = smlDevInfCTCapTypeFromString(elem_name, NULL);2403 type = smlDevInfCTCapTypeFromString(elem_name, error); 2404 2404 value = NULL; 2405 2405 if (type != SML_DEVINF_CTCAP_UNKNOWN) … … 2576 2576 /* determine item type */ 2577 2577 SmlDevInfCTCapType type; 2578 type = smlDevInfCTCapTypeFromString(elem_name, NULL);2578 type = smlDevInfCTCapTypeFromString(elem_name, error); 2579 2579 value = NULL; 2580 2580 if (type != SML_DEVINF_CTCAP_UNKNOWN) … … 2657 2657 /* determine item type */ 2658 2658 SmlDevInfCTCapType type; 2659 type = smlDevInfCTCapTypeFromString(elem_name, NULL);2659 type = smlDevInfCTCapTypeFromString(elem_name, error); 2660 2660 value = NULL; 2661 2661 if (type != SML_DEVINF_CTCAP_UNKNOWN && … … 2761 2761 /* determine item type */ 2762 2762 SmlDevInfCTCapType type; 2763 type = smlDevInfCTCapTypeFromString(elem_name, NULL);2763 type = smlDevInfCTCapTypeFromString(elem_name, error); 2764 2764 value = NULL; 2765 2765 if (type != SML_DEVINF_CTCAP_UNKNOWN && trunk/libsyncml/sml_devinf.c
r427 r488 49 49 SmlDevInfDevTyp smlDevInfDevTypeFromString(const char *name, SmlError **error) 50 50 { 51 smlAssert(error); 52 smlAssert(*error == NULL); 53 51 54 if (!strcmp(name, SML_ELEMENT_DEVTYP_PAGER)) { 52 55 return SML_DEVINF_DEVTYPE_PAGER; … … 71 74 const char *smlDevInfDevTypeToString(SmlDevInfDevTyp type, SmlError **error) 72 75 { 76 smlAssert(error); 77 smlAssert(*error == NULL); 78 73 79 switch (type) { 74 80 case SML_DEVINF_DEVTYPE_PAGER: … … 97 103 { 98 104 smlAssert(devid); 105 smlAssert(error); 106 smlAssert(*error == NULL); 99 107 smlTrace(TRACE_ENTRY, "%s(%s, %i, %p)", __func__, devid, devtyp, error); 100 108 … … 365 373 SmlDevInfDataStore *smlDevInfDataStoreNew(const char *sourceRef, SmlError **error) 366 374 { 375 smlAssert(error); 376 smlAssert(*error == NULL); 367 377 smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, sourceRef, error); 368 378 … … 651 661 smlTrace(TRACE_ENTRY, "%s(%p, %i, %p, %p)", __func__, cmd, devinf, version, error); 652 662 smlAssert(cmd); 663 smlAssert(error); 664 smlAssert(*error == NULL); 653 665 SmlLocation *source = NULL; 654 666 … … 692 704 smlTrace(TRACE_ENTRY, "%s(%p, %i, %p)", __func__, devinf, version, error); 693 705 smlAssert(devinf); 706 smlAssert(error); 707 smlAssert(*error == NULL); 694 708 SmlLocation *source = NULL; 695 709 … … 740 754 { 741 755 smlTrace(TRACE_ENTRY, "%s(%i, %p)", __func__, version, error); 756 smlAssert(error); 757 smlAssert(*error == NULL); 742 758 SmlLocation *target = NULL; 743 759 … … 773 789 smlAssert(data); 774 790 smlAssert(length); 791 smlAssert(error); 792 smlAssert(*error == NULL); 775 793 776 794 SmlDevInf *devinf = smlXmlDevInfParse(data, length, error); … … 790 808 smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, result, error); 791 809 smlAssert(result); 810 smlAssert(error); 811 smlAssert(*error == NULL); 792 812 793 813 if (result->type != SML_COMMAND_TYPE_RESULTS) { … … 821 841 SmlDevInfCTCapType smlDevInfCTCapTypeFromString(const char *name, SmlError **error) 822 842 { 843 smlAssert(error); 844 smlAssert(*error == NULL); 845 823 846 if (!strcmp(name, SML_ELEMENT_CTTYPE)) { 824 847 return SML_DEVINF_CTCAP_CTTYPE; … … 854 877 const char *smlDevInfCTCapTypeToString(SmlDevInfCTCapType type, SmlError **error) 855 878 { 879 smlAssert(error); 880 smlAssert(*error == NULL); 881 856 882 switch (type) { 857 883 case SML_DEVINF_CTCAP_CTTYPE: … … 894 920 { 895 921 smlTrace(TRACE_ENTRY, "%s(%p)", __func__, error); 922 smlAssert(error); 923 smlAssert(*error == NULL); 896 924 897 925 SmlDevInfPropParam *param = smlTryMalloc0(sizeof(SmlDevInfPropParam), error); … … 1018 1046 { 1019 1047 smlTrace(TRACE_ENTRY, "%s(%p)", __func__, error); 1048 smlAssert(error); 1049 smlAssert(*error == NULL); 1020 1050 1021 1051 SmlDevInfProperty *property = smlTryMalloc0(sizeof(SmlDevInfProperty), error); … … 1251 1281 { 1252 1282 smlTrace(TRACE_ENTRY, "%s(%p)", __func__, error); 1283 smlAssert(error); 1284 smlAssert(*error == NULL); 1253 1285 1254 1286 SmlDevInfContentType *ct = smlTryMalloc0(sizeof(SmlDevInfContentType), error); … … 1298 1330 { 1299 1331 smlTrace(TRACE_ENTRY, "%s(%p)", __func__, error); 1332 smlAssert(error); 1333 smlAssert(*error == NULL); 1300 1334 1301 1335 SmlDevInfCTCap *ctcap = smlTryMalloc0(sizeof(SmlDevInfCTCap), error); … … 1401 1435 const SmlDevInfCTCap *ctcap = smlDevInfGetNthCTCap(devinf, nth); 1402 1436 char *type = smlDevInfCTCapGetCTType(ctcap); 1403 SmlDevInfCTCapType cttype = smlDevInfCTCapTypeFromString(type, NULL); 1437 SmlError *error = NULL; 1438 SmlDevInfCTCapType cttype = smlDevInfCTCapTypeFromString(type, &error); 1404 1439 smlSafeCFree(&type); 1405 1440 return cttype; trunk/libsyncml/sml_manager.c
r486 r488 235 235 if (!(session = smlSessionNew(SML_SESSION_TYPE_SERVER, data->type, header->version, header->protocol, header->source, header->target, header->sessionID, 1, &locerror))) 236 236 goto error_free_header; 237 if (manager->localMaxMsgSize)238 smlSessionSetLocalMaxMsgSize(session, manager->localMaxMsgSize);239 if (manager->localMaxObjSize)240 smlSessionSetLocalMaxObjSize(session, manager->localMaxObjSize);241 242 237 if (!smlManagerSessionAdd(manager, session, link, &locerror)) 243 238 goto error_free_header; 239 smlSessionUnref(session); 244 240 } 245 241 … … 634 630 smlTrace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, manager, session, link, error); 635 631 632 smlSessionRef(session); 633 636 634 if (smlSessionGetSessionID(session)) { 637 635 //Check if sessionID exists … … 646 644 manager->lastSessionID = atoi(smlSessionGetSessionID(session)); 647 645 } else { 646 /* FIXME: This is critical because the session ID is predictable. */ 647 g_warning("%s: Using predictable session numbering.", __func__); 648 648 manager->lastSessionID++; 649 649 char *lastid = g_strdup_printf("%i", manager->lastSessionID); … … 667 667 668 668 manager->sessions = g_list_append(manager->sessions, sess); 669 669 670 /* prepare large object support */ 671 if (0 < manager->localMaxMsgSize && 672 ( 673 manager->localMaxMsgSize < smlSessionGetLocalMaxMsgSize(session) || 674 smlSessionGetLocalMaxMsgSize(session) <= 0 675 )) 676 smlSessionSetLocalMaxMsgSize(session, manager->localMaxMsgSize); 677 if (0 < manager->localMaxObjSize && 678 ( 679 manager->localMaxObjSize < smlSessionGetLocalMaxObjSize(session) || 680 smlSessionGetLocalMaxObjSize(session) <= 0 681 )) 682 smlSessionSetLocalMaxObjSize(session, manager->localMaxObjSize); 683 if (smlSessionGetLocalMaxObjSize(session) && 684 smlSessionGetLocalMaxMsgSize(session)) 685 smlSessionUseLargeObjects(session, TRUE); 686 else 687 smlSessionUseLargeObjects(session, FALSE); 688 670 689 smlSessionSetEventCallback(session, _event_callback, manager); 671 690 smlSessionSetDataCallback(session, _data_send_callback, sess); … … 677 696 678 697 error: 698 smlSessionUnref(session); 679 699 smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); 680 700 return FALSE; trunk/libsyncml/sml_notification.c
r486 r488 25 25 #include "sml_transport_internals.h" 26 26 #include "sml_command_internals.h" 27 #include "sml_manager_internals.h" 27 28 28 29 /** … … 95 96 // FIXME: this is a hack because the original implementation 96 97 // FIXME: only support server 98 // Only one question which client sends a notification!? 97 99 san->sessionType = SML_SESSION_TYPE_CLIENT; 98 100 smlCredRef(cred); … … 317 319 smlAssert(data); 318 320 smlAssert(size); 321 322 /* If a notification is sent via a normal SyncML message 323 * then the used session must be managed to guarantee the 324 * consistency of the session. 325 */ 326 smlAssert(san->manager); 327 319 328 SmlSanAlert *alert = NULL; 320 329 SmlCommand *cmd = NULL; … … 328 337 goto error_free_assm; 329 338 330 SmlSession *session = smlSessionNew(san->sessionType, san->type, version, SML_PROTOCOL_SYNCML, san->target, source, "1", 0, error); 339 guint64 sessionID = (((guint64) g_random_int ()) << 32) + g_random_int (); 340 char *sessionString = g_strdup_printf("%lu", sessionID); 341 SmlSession *session = smlSessionNew(san->sessionType, san->type, version, SML_PROTOCOL_SYNCML, san->target, source, sessionString, 0, error); 331 342 if (!session) { 332 343 smlLocationUnref(source); 333 344 goto error_free_assm; 334 345 } 335 smlSessionSetLocalMaxMsgSize(session, san->localMaxMsgSize); 336 smlSessionSetLocalMaxObjSize(session, san->localMaxObjSize); 346 smlManagerSessionAdd(san->manager, session, NULL, error); 347 if (san->manager->localMaxMsgSize) 348 smlSessionSetLocalMaxMsgSize(session, san->manager->localMaxMsgSize); 349 if (san->manager->localMaxObjSize) 350 smlSessionSetLocalMaxObjSize(session, san->manager->localMaxObjSize); 337 351 if (san->cred) 338 352 smlSessionRegisterCred(session, san->cred); 339 if (san->manager)340 smlManagerSessionAdd(san->manager, session, NULL, error);341 353 342 354 if (!smlAssemblerStart(assm, session, error)) … … 618 630 } 619 631 620 void smlNotificationSetLocalMaxMsgSize(SmlNotification *san, unsigned int size)621 {622 smlAssert(san);623 san->localMaxMsgSize = size;624 }625 626 void smlNotificationSetLocalMaxObjSize(SmlNotification *san, unsigned int size)627 {628 smlAssert(san);629 san->localMaxObjSize = size;630 }631 632 632 /*@}*/ trunk/libsyncml/sml_notification.h
r486 r488 64 64 const char *smlSanAlertGetServerURI(SmlSanAlert *alert); 65 65 66 void smlNotificationSetLocalMaxMsgSize(SmlNotification *san, unsigned int size);67 void smlNotificationSetLocalMaxObjSize(SmlNotification *san, unsigned int size);68 69 66 #endif //_SML_NOTIFICATION_H_ trunk/tests/check_san.c
r486 r488 21 21 #include "support.h" 22 22 23 /* If the notification is a normal SyncML message then a manager is 24 * required. The easiest way are two function which create and destroy 25 * a default manager - only for testing. 26 */ 27 28 SmlTransport *_tsp = NULL; 29 30 SmlManager* _start_manager() 31 { 32 unsigned int defaultMaxMsgSize = 10240; 33 unsigned int defaultMaxObjSize = 1024000; 34 35 SmlError *error = NULL; 36 _tsp = smlTransportNew(SML_TRANSPORT_HTTP_SERVER, &error); 37 fail_unless(_tsp != NULL, smlErrorPrint(&error)); 38 fail_unless(error == NULL, smlErrorPrint(&error)); 39 40 SmlManager *manager = smlManagerNew(_tsp, &error); 41 fail_unless(manager != NULL, smlErrorPrint(&error)); 42 fail_unless(error == NULL, smlErrorPrint(&error)); 43 44 smlManagerSetLocalMaxMsgSize(manager, defaultMaxMsgSize); 45 smlManagerSetLocalMaxObjSize(manager, defaultMaxObjSize); 46 47 return manager; 48 } 49 50 void *_stop_manager(SmlManager *manager) 51 { 52 smlManagerFree(manager); 53 smlTransportFree(_tsp); 54 } 55 23 56 START_TEST (check_san_new) 24 57 { … … 176 209 fail_unless(san != NULL, NULL); 177 210 fail_unless(error == NULL, NULL); 211 SmlManager *manager = _start_manager(); 212 smlNotificationSetManager(san, manager); 178 213 179 214 fail_unless(smlNotificationNewAlert(san, SML_ALERT_TWO_WAY_BY_SERVER, SML_ELEMENT_TEXT_VCARD, "tttt", &error), NULL); 180 215 fail_unless(error == NULL, NULL); 181 smlNotificationSetLocalMaxMsgSize(san, 1024);182 smlNotificationSetLocalMaxObjSize(san, 102400);183 216 184 217 char *buffer = NULL; … … 187 220 fail_unless(error == NULL, NULL); 188 221 smlNotificationFree(san); 222 223 _stop_manager(manager); 189 224 190 225 /* SyncML 1.1 SAN parsing is not supported today. */ trunk/tests/check_session.c
r486 r488 252 252 smlTrace(TRACE_EXIT, "%s", __func__); 253 253 } 254 255 /* If the notification is a normal SyncML message then a manager is 256 * required. The easiest way are two function which create and destroy 257 * a default manager - only for testing. 258 */ 259 260 SmlTransport *_tsp = NULL; 261 262 SmlManager* _start_manager() 263 { 264 unsigned int defaultMaxMsgSize = 10240; 265 unsigned int defaultMaxObjSize = 1024000; 266 267 SmlError *error = NULL; 268 _tsp = smlTransportNew(SML_TRANSPORT_HTTP_SERVER, &error); 269 fail_unless(_tsp != NULL, smlErrorPrint(&error)); 270 fail_unless(error == NULL, smlErrorPrint(&error)); 271 272 SmlManager *manager = smlManagerNew(_tsp, &error); 273 fail_unless(manager != NULL, smlErrorPrint(&error)); 274 fail_unless(error == NULL, smlErrorPrint(&error)); 275 276 smlManagerSetLocalMaxMsgSize(manager, defaultMaxMsgSize); 277 smlManagerSetLocalMaxObjSize(manager, defaultMaxObjSize); 278 279 return manager; 280 } 281 282 void *_stop_manager(SmlManager *manager) 283 { 284 smlManagerFree(manager); 285 smlTransportFree(_tsp); 286 } 287 254 288 255 289 START_TEST (check_session_new) … … 2508 2542 2509 2543 SmlNotification *san = smlNotificationNew(SML_SAN_VERSION_11, SML_SAN_UIMODE_USER, SML_SAN_INITIATOR_SERVER, 65535, "test", "/", SML_MIMETYPE_XML, &error); 2510 fail_unless(san != NULL, NULL);2511 fail_unless(error == NULL, NULL);2512 smlNotificationSetLocalMaxMsgSize(san, defaultMaxMsgSize);2513 smlNotificationSet LocalMaxObjSize(san, defaultMaxObjSize);2544 fail_unless(san != NULL, smlErrorPrint(&error)); 2545 fail_unless(error == NULL, smlErrorPrint(&error)); 2546 SmlManager *manager = _start_manager(); 2547 smlNotificationSetManager(san, manager); 2514 2548 2515 2549 fail_unless(smlNotificationNewAlert(san, SML_ALERT_TWO_WAY_BY_SERVER, SML_ELEMENT_TEXT_VCARD, "tttt", &error), NULL); … … 2595 2629 smlSessionUnref(session2); 2596 2630 smlSessionUnref(session); 2631 2632 _stop_manager(manager); 2597 2633 } 2598 2634 END_TEST trunk/tools/syncml-obex-client.c
r486 r488 625 625 goto error; 626 626 smlManagerSetEventCallback(manager, _manager_event, NULL); 627 if (useLargeObjs) 628 { 629 /* This is a server which supports SyncML 1.1 or higher. 630 * So large objects must be supported. 631 */ 632 smlManagerSetLocalMaxMsgSize(manager, recvLimit); 633 smlManagerSetLocalMaxObjSize(manager, maxObjSize); 634 } 627 635 628 636 /* The authenticator */ … … 660 668 if (!san) 661 669 goto error; 670 smlNotificationSetManager(san, manager); 662 671 663 672 for (i = 1; i < argc; i++) { … … 756 765 goto error; 757 766 758 /* Send notification */759 if (useLargeObjs)760 {761 /* This is a server which uses SyncML 1.1 or higher.762 * So large objects must be supported.763 */764 smlNotificationSetLocalMaxMsgSize(san, recvLimit);765 smlNotificationSetLocalMaxObjSize(san, maxObjSize);766 }767 767 if (!smlNotificationSend(san, client, &error)) 768 768 goto error;
