From: <svn...@op...> - 2009-03-13 12:35:01
|
Author: bellmich Date: Fri Mar 13 13:34:48 2009 New Revision: 971 URL: http://libsyncml.opensync.org/changeset/971 Log: added a first implementation of the function smlDataSyncAbort Added: trunk/libsyncml/data_sync_api/data_sync_abort.c Modified: trunk/libsyncml/CMakeLists.txt trunk/libsyncml/data_sync_api/standard.h Modified: trunk/libsyncml/CMakeLists.txt ============================================================================== --- trunk/libsyncml/CMakeLists.txt Fri Mar 13 10:29:53 2009 (r970) +++ trunk/libsyncml/CMakeLists.txt Fri Mar 13 13:34:48 2009 (r971) @@ -17,6 +17,7 @@ sml_support.c sml_transport.c data_sync_api/data_sync.c + data_sync_api/data_sync_abort.c data_sync_api/data_sync_callbacks.c data_sync_api/data_sync_common.c data_sync_api/data_sync_devinf.c Added: trunk/libsyncml/data_sync_api/data_sync_abort.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/libsyncml/data_sync_api/data_sync_abort.c Fri Mar 13 13:34:48 2009 (r971) @@ -0,0 +1,76 @@ +/* + * libsyncml - A syncml protocol implementation + * Copyright (C) 2009 Michael Bell <mic...@op...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "../syncml.h" +#include "../syncml_internals.h" +#include "../sml_error_internals.h" + +#include <libsyncml/data_sync_api/defines.h> +#include <libsyncml/data_sync_api/standard.h> +#include <libsyncml/data_sync_api/callbacks.h> + +#include "data_sync.h" + +/** + * This code is put into a separate source code file + * because potentially all internal tricks and hacks + * are used to abort the OMA DS session most carefully + * ... at minimum in the future ... + */ + +#include "../sml_session_internals.h" +#include "../sml_manager_internals.h" + +SmlBool smlDataSyncAbort( + SmlDataSyncObject *dsObject, + SmlError **error) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + + /* determine the state of the session */ + if (!dsObject->session->sending && !dsObject->session->waiting) + { + /* send abort command */ + smlTrace(TRACE_INTERNAL, "%s: A careful abort is possible.", __func__); + /* FIXME: Send a default abort command. */ + /* FIXME: Is it necessary or recommended to abort every datastore. */ + goto WORKAROUND; + } else { + /* stop transport */ +WORKAROUND: + smlTrace(TRACE_INTERNAL, "%s: A hard abort is required.", __func__); + SmlLink *link = smlManagerSessionGetLink( + dsObject->manager, + dsObject->session, + error); + if (!link && *error) + goto error; + + if (!smlTransportDisconnect(dsObject->tsp, link, error)) + goto error; + } + + smlTrace(TRACE_EXIT, "%s", __func__); + return TRUE; +error: + smlTrace(TRACE_EXIT_ERROR, "%s - %s", __func__, smlErrorPrint(error)); + return FALSE; +} + Modified: trunk/libsyncml/data_sync_api/standard.h ============================================================================== --- trunk/libsyncml/data_sync_api/standard.h Fri Mar 13 10:29:53 2009 (r970) +++ trunk/libsyncml/data_sync_api/standard.h Fri Mar 13 13:34:48 2009 (r971) @@ -92,6 +92,23 @@ SmlError **error); /** + * Aborts the data synchronization in every state of the API. + * The only possible function call after this function is + * smlDataSyncObjectUnref. If you called this function then + * you can still wait for SML_DATA_SYNC_EVENT_ERROR or + * SML_DATA_SYNC_EVENT_FINISHED before you start to cleanup + * with smlDataSyncObjectUnref. + * + * @param dsObject The data sync object + * @param error The error condition + * + * @return TRUE on success. False on failure. + */ +SmlBool smlDataSyncAbort( + SmlDataSyncObject *dsObject, + SmlError **error); + +/** * Returns the identity of the remote sync peer. This is the * <Source></Source> tag. The returned reference is not owned * by the caller and must NOT be freed or unrefed by the caller. |