From: <svn...@op...> - 2009-04-15 15:02:40
|
Author: bellmich Date: Wed Apr 15 17:02:28 2009 New Revision: 1046 URL: http://libsyncml.opensync.org/changeset/1046 Log: unified the different internal state variables Modified: trunk/libsyncml/data_sync_api/data_sync.c trunk/libsyncml/data_sync_api/data_sync.h trunk/libsyncml/data_sync_api/data_sync_callbacks.c trunk/libsyncml/data_sync_api/transport_http_client.c Modified: trunk/libsyncml/data_sync_api/data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.c Wed Apr 15 14:30:38 2009 (r1045) +++ trunk/libsyncml/data_sync_api/data_sync.c Wed Apr 15 17:02:28 2009 (r1046) @@ -60,8 +60,7 @@ dsObject->dsType = dsType; dsObject->tspType = tspType; dsObject->version = SML_VERSION_11; - dsObject->sentChanges = FALSE; - dsObject->isInitialized = FALSE; + dsObject->internalState = SML_DATA_SYNC_STATE_NEW; dsObject->useNumberOfChanges = TRUE; dsObject->useTimestampAnchor = TRUE; @@ -117,8 +116,11 @@ smlTrace(TRACE_EXIT, "%s - %p", __func__, dsObject); return dsObject; error: - if (dsObject) + if (dsObject) { + if (dsObject->tsp) + smlTransportFree(dsObject->tsp); smlDataSyncObjectUnref(&dsObject); + } smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); return NULL; } @@ -514,8 +516,6 @@ CHECK_ERROR_REF smlAssert(dsObject); - dsObject->isConnected = FALSE; - if (!dsObject->identifier) dsObject->identifier = smlDataSyncDevInfGetIdentifier(); @@ -527,7 +527,7 @@ if (!dsObject->funcDsInit(dsObject, error)) goto error; - dsObject->isInitialized = TRUE; + dsObject->internalState = SML_DATA_SYNC_STATE_INITIALIZED; smlTrace(TRACE_EXIT, "%s - TRUE", __func__); return TRUE; @@ -650,13 +650,13 @@ /* Verify that the library is in the correct state */ - if (dsObject->sentChanges) + if (dsObject->internalState >= SML_DATA_SYNC_STATE_SENT_CHANGES) { smlErrorSet(error, SML_ERROR_GENERIC, - "The function %s is called more than once.", __func__); + "The function %s is called to late or more than once.", __func__); goto error; } else { - dsObject->sentChanges = TRUE; + dsObject->internalState = SML_DATA_SYNC_STATE_SENT_CHANGES; } if (dsObject->dsType == SML_SESSION_TYPE_SERVER && dsObject->actualPackage != SML_PACKAGE_4) @@ -830,8 +830,8 @@ if ((*dsObject)->tsp) { SmlError *error = NULL; if ((*dsObject)->dsType == SML_SESSION_TYPE_CLIENT && - (*dsObject)->isConnected && - !(*dsObject)->gotDisconnect && + SML_DATA_SYNC_STATE_CONNECTED >= (*dsObject)->internalState && + (*dsObject)->internalState <= SML_DATA_SYNC_STATE_DISCONNECTED && !smlTransportDisconnect((*dsObject)->tsp, NULL, &error)) { /* just ignore the error */ smlTrace(TRACE_ERROR, "%s: %s", @@ -839,7 +839,7 @@ smlErrorDeref(&error); } /* FIXME: we have to wait here for the disconnect ... */ - if ((*dsObject)->isInitialized && + if ((*dsObject)->internalState >= SML_DATA_SYNC_STATE_INITIALIZED && !smlTransportFinalize((*dsObject)->tsp, &error)) { smlTrace(TRACE_ERROR, "%s: %s", __func__, smlErrorPrint(&error)); Modified: trunk/libsyncml/data_sync_api/data_sync.h ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync.h Wed Apr 15 14:30:38 2009 (r1045) +++ trunk/libsyncml/data_sync_api/data_sync.h Wed Apr 15 17:02:28 2009 (r1046) @@ -75,6 +75,17 @@ SML_PACKAGE_END = 7, /* client after end received from server */ } SmlDataSyncPackageType; +typedef enum { + SML_DATA_SYNC_STATE_UNKNOWN = 0, + SML_DATA_SYNC_STATE_NEW = 1, + SML_DATA_SYNC_STATE_INITIALIZED = 2, + SML_DATA_SYNC_STATE_CONNECTED = 3, + SML_DATA_SYNC_STATE_SESSION_READY = 4, + SML_DATA_SYNC_STATE_SENT_CHANGES = 5, + SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS = 6, + SML_DATA_SYNC_STATE_DISCONNECTED = 7, +} SmlDataSyncInternalStateType; + /* typedefs for internal objects */ /*! @brief This object represents an OMA DS datastore. @@ -147,11 +158,7 @@ /* states */ - SmlBool isInitialized; - SmlBool isConnected; - SmlBool gotDisconnect; - SmlBool tryDisconnect; - SmlBool sentChanges; + SmlDataSyncInternalStateType internalState; int refCount; SmlDataSyncPackageType actualPackage; Modified: trunk/libsyncml/data_sync_api/data_sync_callbacks.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_callbacks.c Wed Apr 15 14:30:38 2009 (r1045) +++ trunk/libsyncml/data_sync_api/data_sync_callbacks.c Wed Apr 15 17:02:28 2009 (r1046) @@ -60,11 +60,11 @@ case SML_MANAGER_SESSION_FLUSH: case SML_MANAGER_CONNECT_DONE: smlTrace(TRACE_INTERNAL, "%s: ignored event %d ", __func__, type); + dsObject->internalState = SML_DATA_SYNC_STATE_CONNECTED; break; case SML_MANAGER_SESSION_ESTABLISHED: smlTrace(TRACE_INTERNAL, "%s: session established", __func__); - dsObject->gotDisconnect = FALSE; - dsObject->isConnected = TRUE; + dsObject->internalState = SML_DATA_SYNC_STATE_SESSION_READY; smlDataSyncSendEvent( dsObject, SML_DATA_SYNC_EVENT_CONNECT, dsObject->eventUserdata, NULL); @@ -75,7 +75,7 @@ * then it is useless to handle the disconnect * event. */ - if (!dsObject->isConnected) + if (dsObject->internalState < SML_DATA_SYNC_STATE_CONNECTED) { smlTrace(TRACE_INTERNAL, "%s: ignored disconnect because never connected", @@ -110,7 +110,7 @@ } } - dsObject->gotDisconnect = TRUE; + dsObject->internalState = SML_DATA_SYNC_STATE_DISCONNECTED; smlDataSyncSendEvent( dsObject, SML_DATA_SYNC_EVENT_DISCONNECT, dsObject->eventUserdata, NULL); @@ -122,10 +122,10 @@ smlTrace(TRACE_INTERNAL, "There was an error in the transport: %s", smlErrorPrint(&error)); - if (dsObject->isConnected && - !dsObject->gotDisconnect) { - if (dsObject->tryDisconnect == FALSE) { - dsObject->tryDisconnect = TRUE; + if (SML_DATA_SYNC_STATE_CONNECTED <= dsObject->internalState && + dsObject->internalState < SML_DATA_SYNC_STATE_DISCONNECTED) { + if (dsObject->internalState < SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS) { + dsObject->internalState = SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS; SmlError *locerror = NULL; SmlLink *link_ = smlManagerSessionGetLink( dsObject->manager, @@ -162,7 +162,7 @@ */ } else { /* disconnect failed */ - dsObject->gotDisconnect = TRUE; + dsObject->internalState = SML_DATA_SYNC_STATE_DISCONNECTED; } } goto error; Modified: trunk/libsyncml/data_sync_api/transport_http_client.c ============================================================================== --- trunk/libsyncml/data_sync_api/transport_http_client.c Wed Apr 15 14:30:38 2009 (r1045) +++ trunk/libsyncml/data_sync_api/transport_http_client.c Wed Apr 15 17:02:28 2009 (r1046) @@ -132,8 +132,6 @@ smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, dsObject, error); CHECK_ERROR_REF - dsObject->tryDisconnect = FALSE; - /* init new session */ if (!smlDataSyncTransportHttpClientInitNewSession(dsObject, error)) goto error; |