Changeset 492
- Timestamp:
- 07/15/08 12:25:00 (4 months ago)
- Files:
-
- trunk/libsyncml/sml_manager.c (modified) (2 diffs)
- trunk/libsyncml/sml_manager.h (modified) (1 diff)
- trunk/libsyncml/sml_manager_internals.h (modified) (1 diff)
- trunk/libsyncml/sml_notification.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libsyncml/sml_manager.c
r490 r492 646 646 goto error; 647 647 } 648 649 if (atoi(smlSessionGetSessionID(session)) > manager->lastSessionID)650 manager->lastSessionID = atoi(smlSessionGetSessionID(session));651 648 } else { 652 /* FIXME: This is critical because the session ID is predictable. */ 653 g_warning("%s: Using predictable session numbering.", __func__); 654 manager->lastSessionID++; 655 char *lastid = g_strdup_printf("%i", manager->lastSessionID); 649 char *lastid = smlManagerGetNewSessionID(manager); 656 650 smlSessionSetSessionID(session, lastid); 657 651 smlSafeCFree(&lastid); … … 1174 1168 manager->localMaxObjSize = size; 1175 1169 } 1170 1171 char *smlManagerGetNewSessionID(SmlManager *manager) 1172 { 1173 smlTrace(TRACE_ENTRY, "%s(%p)", __func__, manager); 1174 smlAssertMsg(manager, "The manager is required to avoid duplicated session IDs."); 1175 1176 char *sessionString = NULL; 1177 while (sessionString == NULL) 1178 { 1179 /* create random session ID - glib only supports 32 bit random numbers */ 1180 guint64 sessionID = (((guint64) g_random_int ()) << 32) + g_random_int (); 1181 sessionString = g_strdup_printf("%llu", sessionID); 1182 smlTrace(TRACE_INTERNAL, "%s: new potential session ID is %llu.", __func__, sessionID); 1183 if (smlManagerSessionFind(manager, sessionString)) 1184 smlSafeCFree(&sessionString); 1185 } 1186 smlTrace(TRACE_EXIT, "%s - %s", __func__, sessionString); 1187 return sessionString; 1188 } trunk/libsyncml/sml_manager.h
r486 r492 69 69 void smlManagerSetLocalMaxObjSize(SmlManager *manager, unsigned int size); 70 70 71 char *smlManagerGetNewSessionID(SmlManager *manager); 72 71 73 #endif //_SML_MANAGER_H trunk/libsyncml/sml_manager_internals.h
r486 r492 28 28 29 29 GList *sessions; 30 unsigned int lastSessionID;31 30 32 31 SmlManagerEventCb eventCallback; trunk/libsyncml/sml_notification.c
r488 r492 337 337 goto error_free_assm; 338 338 339 guint64 sessionID = (((guint64) g_random_int ()) << 32) + g_random_int (); 340 char *sessionString = g_strdup_printf("%lu", sessionID); 339 char *sessionString = smlManagerGetNewSessionID(san->manager); 341 340 SmlSession *session = smlSessionNew(san->sessionType, san->type, version, SML_PROTOCOL_SYNCML, san->target, source, sessionString, 0, error); 342 341 if (!session) {
