From: <svn...@op...> - 2009-09-14 10:35:07
|
Author: bellmich Date: Mon Sep 14 12:34:56 2009 New Revision: 1264 URL: http://libsyncml.opensync.org/changeset/1264 Log: SmlDataSyncSession should never include sml_data_sync_private.h. Modified: trunk/libsyncml/data_sync_api/sml_data_sync.c trunk/libsyncml/data_sync_api/sml_data_sync_internals.h trunk/libsyncml/data_sync_api/sml_data_sync_session.c Modified: trunk/libsyncml/data_sync_api/sml_data_sync.c ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync.c Mon Sep 14 11:24:28 2009 (r1263) +++ trunk/libsyncml/data_sync_api/sml_data_sync.c Mon Sep 14 12:34:56 2009 (r1264) @@ -523,6 +523,12 @@ return FALSE; } +gboolean +sml_data_sync_get_only_localtime (SmlDataSync *self) +{ + return self->priv->only_localtime; +} + /** * sml_data_sync_add_data_store: * @self: A #SmlDataSync @@ -745,6 +751,8 @@ return data_sync_session; } else { data_sync_session = sml_data_sync_session_new(session, self, error); + if (!data_sync_session) + return NULL; g_hash_table_insert(self->priv->data_sync_sessions, data_sync_session, data_sync_session); g_hash_table_insert(self->priv->sessions, session, data_sync_session); g_object_ref(data_sync_session); @@ -761,12 +769,77 @@ return self->priv->alert_callback; } +gboolean +sml_data_sync_configure_session (SmlDataSync *self, + SmlSession *session, + GError **error) +{ + smlTrace(TRACE_ENTRY, "%s (%p, %p, %p)", __func__, self, session, error); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DATA_SYNC (self), FALSE, error, SML_ERROR_GENERIC, "There must be a SmlDataSync object."); + sml_return_val_error_if_fail (session, FALSE, error, SML_ERROR_GENERIC, "There must be a SmlSession object."); + + smlSessionUseStringTable(session, self->priv->use_string_table); + smlSessionUseOnlyReplace(session, self->priv->only_replace); + smlSessionUseNumberOfChanges(session, self->priv->use_number_of_changes); + + /* authentication management for OMA DS clients*/ + if (self->priv->session_type == SML_SESSION_TYPE_CLIENT && + (self->priv->username || self->priv->password)) + { + /* prepare credential */ + SmlCred *cred = smlCredNewAuth (self->priv->auth_type, + self->priv->username, + self->priv->password, + error); + if (!cred) { + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, (*error)->message); + return FALSE; + /* FIXME: Memory Leak !!! */ + } + + smlSessionRegisterCred(session, cred); + } + smlTrace(TRACE_EXIT, "%s - TRUE", __func__); + return TRUE; +} + +gboolean +sml_data_sync_disconnect_session (SmlDataSync *self, + SmlSession *session, + GError **error) +{ + SmlLink *link_ = smlManagerSessionGetLink (self->priv->manager, + session, + error); + if (!link_ && *error) + return FALSE; + + /* OBEX is a stateful protocol and the client should + * init the disconnect. The problem is what happens + * when the client hangs? + * + * if (dsObject->tspType != SML_TRANSPORT_OBEX_SERVER && + * !smlTransportDisconnect(dsObject->tsp, link, &error)) + */ + if (!smlTransportDisconnect(self->priv->tsp, link_, error)) + { + if (link_) + smlLinkDeref(link_); + return FALSE; + } + if (link_) + smlLinkDeref(link_); + + return TRUE; +} + /* *************************************** */ /* ***** Management Callback ***** */ /* *************************************** */ static void -sml_data_sync_disconnect_session (gpointer key, gpointer value, void *userdata) +sml_data_sync_disconnect_data_sync_session (gpointer key, gpointer value, void *userdata) { SmlDataSyncSession *dss = key; /* value is the same */ SmlDataSync *ds = userdata; @@ -865,7 +938,7 @@ self->priv->state < SML_DATA_SYNC_STATE_DISCONNECTED) { if (self->priv->state < SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS) { self->priv->state = SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS; - g_hash_table_foreach (self->priv->data_sync_sessions, sml_data_sync_disconnect_session, self); + g_hash_table_foreach (self->priv->data_sync_sessions, sml_data_sync_disconnect_data_sync_session, self); } else { /* disconnect failed */ self->priv->state = SML_DATA_SYNC_STATE_DISCONNECTED; Modified: trunk/libsyncml/data_sync_api/sml_data_sync_internals.h ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync_internals.h Mon Sep 14 11:24:28 2009 (r1263) +++ trunk/libsyncml/data_sync_api/sml_data_sync_internals.h Mon Sep 14 12:34:56 2009 (r1264) @@ -56,10 +56,14 @@ SmlDataSyncDataStore* sml_data_sync_get_data_store_from_local_uri (SmlDataSync *self, const gchar *local, GError **error); SmlDataSyncSession* sml_data_sync_get_session (SmlDataSync *self, SmlSession *session, GError **error); +gboolean sml_data_sync_configure_session (SmlDataSync *self, SmlSession *session, GError **error); +gboolean sml_data_sync_disconnect_session (SmlDataSync *self, SmlSession *session, GError **error); SmlDataSyncSessionEventCallback sml_data_sync_get_event_callback (SmlDataSync *self); void* sml_data_sync_get_event_userdata (SmlDataSync *self); +gboolean sml_data_sync_get_only_localtime (SmlDataSync *self); + SmlDsSessionAlertCb sml_data_sync_get_alert_callback (SmlDataSync *self); G_END_DECLS Modified: trunk/libsyncml/data_sync_api/sml_data_sync_session.c ============================================================================== --- trunk/libsyncml/data_sync_api/sml_data_sync_session.c Mon Sep 14 11:24:28 2009 (r1263) +++ trunk/libsyncml/data_sync_api/sml_data_sync_session.c Mon Sep 14 12:34:56 2009 (r1264) @@ -22,9 +22,6 @@ #include "sml_data_sync_data_store_session_internals.h" #include "data_sync_devinf.h" -/* FIXME: !!!!!!! */ -#include "sml_data_sync_private.h" - #include "sml_data_sync_internals.h" #include "../sml_support.h" #include "../sml_error_internals.h" @@ -158,6 +155,7 @@ SmlDataSync *data_sync, GError **error) { + smlTrace(TRACE_ENTRY, "%s (%p, %p, %p)", __func__, session, data_sync, error); CHECK_ERROR_REF sml_return_val_error_if_fail (session != NULL, NULL, error, SML_ERROR_GENERIC, "There must be a SmlSession object."); sml_return_val_error_if_fail (SML_IS_DATA_SYNC (data_sync), NULL, error, SML_ERROR_GENERIC, "There must be a SmlDataSync object."); @@ -167,26 +165,13 @@ self->priv->session = session; self->priv->data_sync = data_sync; self->priv->actual_package = SML_PACKAGE_0; - self->priv->only_localtime = data_sync->priv->only_localtime; + self->priv->only_localtime = sml_data_sync_get_only_localtime(data_sync); - smlSessionUseStringTable(session, data_sync->priv->use_string_table); - smlSessionUseOnlyReplace(session, data_sync->priv->only_replace); - smlSessionUseNumberOfChanges(session, data_sync->priv->use_number_of_changes); - - /* authentication management for OMA DS clients*/ - if (data_sync->priv->session_type == SML_SESSION_TYPE_CLIENT && - (data_sync->priv->username || data_sync->priv->password)) + if (!sml_data_sync_configure_session(data_sync, session, error)) { - /* prepare credential */ - SmlCred *cred = smlCredNewAuth(data_sync->priv->auth_type, - data_sync->priv->username, data_sync->priv->password, - error); - if (!cred) - return NULL; - /* FIXME: Memory Leak !!! */ - - smlSessionRegisterCred(self->priv->session, cred); - smlTrace(TRACE_INTERNAL, "%s: credential initialized", __func__); + g_object_unref(self); + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, (*error)->message); + return NULL; } self->priv->hash_ds2dsdss = g_hash_table_new_full(g_direct_hash, @@ -201,6 +186,7 @@ g_direct_equal, sml_data_sync_session_free_data_store_session, sml_data_sync_session_free_data_store_session); + smlTrace(TRACE_EXIT, "%s - %p", __func__, self); return self; } @@ -421,13 +407,7 @@ { self->priv->state = SML_DATA_SYNC_STATE_DISCONNECT_IN_PROGRESS; - SmlLink *link_ = smlManagerSessionGetLink(self->priv->data_sync->priv->manager, - self->priv->session, - error); - if (!link_ && *error) - goto error; - - if (!smlTransportDisconnect(self->priv->data_sync->priv->tsp, link_, error)) + if (!sml_data_sync_disconnect_session (self->priv->data_sync, self->priv->session, error)) goto error; } //} @@ -538,10 +518,6 @@ case SML_MANAGER_SESSION_NEW: smlTrace(TRACE_INTERNAL, "%s: Just received a new session with ID %d.", __func__, smlSessionGetSessionID(self->priv->session)); - - smlTrace(TRACE_INTERNAL, "%s: maxObjSize %d", - __func__, self->priv->data_sync->priv->max_obj_size); - break; case SML_MANAGER_SESSION_FINAL: smlTrace(TRACE_INTERNAL, "%s: Session %d reported final.", @@ -549,7 +525,7 @@ /* determine which package was received */ - if (self->priv->data_sync->priv->session_type == SML_SESSION_TYPE_CLIENT) + if (sml_data_sync_get_session_type(self->priv->data_sync) == SML_SESSION_TYPE_CLIENT) { /* only devinf receiving is not supported */ if (self->priv->actual_package < SML_PACKAGE_1) @@ -640,27 +616,8 @@ /* initiate disconnect */ - SmlLink *link_ = smlManagerSessionGetLink( - self->priv->data_sync->priv->manager, - self->priv->session, - &locerror); - if (!link_ && locerror) - goto error; - /* OBEX is a stateful protocol and the client should - * init the disconnect. The problem is what happens - * when the client hangs? - * - * if (dsObject->tspType != SML_TRANSPORT_OBEX_SERVER && - * !smlTransportDisconnect(dsObject->tsp, link, &error)) - */ - if (!smlTransportDisconnect(self->priv->data_sync->priv->tsp, link_, &locerror)) - { - if (link_) - smlLinkDeref(link_); + if (!sml_data_sync_disconnect_session (self->priv->data_sync, self->priv->session, &locerror)) goto error; - } - if (link_) - smlLinkDeref(link_); sml_data_sync_session_send_event(self, NULL, SML_DATA_SYNC_SESSION_EVENT_FINISHED, NULL); break; |