13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************/
23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* module:          Managing SyncML Instances                            */
33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*                                                                       */
43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* file:            mgrinstancemgr.c                                     */
53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* target system:   all                                                  */
63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* target OS:       all                                                  */
73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*                                                                       */
83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Description:                                                          */
93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Core module for managing creation and usage of instances              */
103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************/
113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*
133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright Notice
143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication
153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc.,
163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001).
173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * All Rights Reserved.
183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Implementation of all or part of any Specification may require
193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * licenses under third party intellectual property rights,
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * including without limitation, patent rights (such a third party
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * may or may not be a Supporter). The Sponsors of the Specification
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * are not responsible and shall not be held responsible in any
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * manner for identifying or failing to identify any or all such
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * third party intellectual property rights.
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM,
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA,
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO.,
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL,
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * The above notice and this paragraph must be included on all copies
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * of this document that are made.
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *  Definitions
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *************************************************************************/
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Include Headers */
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <smldef.h>
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <sml.h>
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <smlerr.h>
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "libmem.h"
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "libstr.h"
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "liblock.h"
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "wsm.h"
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "mgr.h"
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Used external functions */
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef NOWSM
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    extern Ret_t addInfo(InstanceInfoPtr_t pInfo);
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    extern InstanceInfoPtr_t findInfo(InstanceID_t id);
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    extern Ret_t removeInfo(InstanceID_t id);
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SyncMLInfoPtr_t mgrGetSyncMLAnchor(void);
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Prototypes of exported SyncML API functions */
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlInitInstance(SmlCallbacksPtr_t callbacks, SmlInstanceOptionsPtr_t pOptions, VoidPtr_t pUserData, InstanceID_t *pInstanceID);
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlTerminateInstance (InstanceID_t id);
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlLockReadBuffer(InstanceID_t id, MemPtr_t *pReadPosition, MemSize_t *usedSize);
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlUnlockReadBuffer(InstanceID_t id, MemSize_t processedBytes);
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef NOWSM
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetMaxOutgoingSize(InstanceID_t id, MemSize_t maxOutgoingSize);
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetOutgoingBegin(InstanceID_t id);
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlLockWriteBuffer(InstanceID_t id, MemPtr_t *pWritePosition, MemSize_t *freeSize);
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlUnlockWriteBuffer(InstanceID_t id, MemSize_t writtenBytes);
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetCallbacks (InstanceID_t id, SmlCallbacksPtr_t pCallbacks);
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetUserData (InstanceID_t id, VoidPtr_t pUserData);
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby// added by luz %%%:
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlGetUserData(InstanceID_t id, VoidPtr_t *ppUserData);
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlGetEncoding(InstanceID_t id, SmlEncoding_t *pEncoding);
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef __SML_LITE__  /* these API calls are NOT included in the Toolkit lite version */
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SML_API Ret_t smlSetEncoding (InstanceID_t id, SmlEncoding_t encoding);
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Private function prototypes */
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t freeInstanceOptions (InstanceInfoPtr_t pInstanceInfo);
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic Ret_t freeInstanceInfo (InstanceInfoPtr_t pInfo);
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t mgrResetWorkspace (InstanceID_t id);
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t setInstanceOptions (InstanceID_t id, SmlInstanceOptionsPtr_t pOptions);
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *  Public SyncML API Functions
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *************************************************************************/
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:   smlInitInstance
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Creates a SyncML instance and assigns a corresponding workspace buffer in
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * which XML documents are assembled or parsed.
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * All callback functions implemented by a particular application are defined.
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Instance specific options can be passed. This function has to be called
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * before the first synchronization tasks can be performed. A reference valid
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * for a SyncML instance is returned.
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * An instance is active when processing a synchronization request
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * otherwise it is idle. An instance is terminated when smlTerminateInstance
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * is called.
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              SmlCallbacks_t
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  A structure holding references to the callback functions
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  implemented by the application
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              SmlInstanceOptionsPtr_t
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Option settings of a particular SyncML instance
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              VoidPtr_t
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  UserData is a pointer to a void structure the application
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  can pass into the SyncML Toolkit instance info.
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  It will be returned to the application with every called
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  callback function call!
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  NOTE: This is only a pointer, the memory object itself
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  remains within the responsibility of the calling application.
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  The memory object will not be copied, moved or freed by the
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Toolkit.
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OUT:             InstanceID_t
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Instance ID assigned to the initialized instance
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:          Ret_t
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Error Code
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlInitInstance(SmlCallbacksPtr_t pCallbacks, SmlInstanceOptionsPtr_t pOptions, VoidPtr_t pUserData, InstanceID_t *pInstanceID)
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t pInstanceInfo;
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  Ret_t             rc;
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef NOWSM
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Check pOptions, which have been passed by the application --- */
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pOptions || !pOptions->workspaceName)
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	  return SML_ERR_WRONG_USAGE;
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      /* if ONE instance is already initialized */
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (mgrGetInstanceListAnchor()!=NULL)
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_WRONG_USAGE;
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- check wether we already know about this instance --- */
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(*pInstanceID);
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- bail outh when we already have a instance with that id --- */
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo != NULL) return SML_ERR_WRONG_USAGE;
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Create a workspace for this instance --- */
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlInitInstance");
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ((rc = wsmCreate(pOptions->workspaceName, pOptions->workspaceSize, pInstanceID)) != SML_ERR_OK) {
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	RELEASETOOLKIT("smlInitInstance after wsmCreate failure");
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	return rc;
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlInitInstance");
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else // NOWSM
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Check pOptions, which have been passed by the application --- */
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pOptions || !pOptions->workspaceSize)
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	  return SML_ERR_WRONG_USAGE;
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	// ok so far
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	rc=SML_ERR_OK;
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Create an instance info memory object --- */
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo = (InstanceInfoPtr_t)smlLibMalloc((MemSize_t)sizeof(InstanceInfo_t));
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) {
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifndef NOWSM
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    wsmDestroy(pOptions->workspaceName);
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_NOT_ENOUGH_SPACE;
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else {
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // instance info created, return pointer as instanceID
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    *pInstanceID = (InstanceID_t)pInstanceInfo;
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlLibMemset(pInstanceInfo,0,(MemSize_t)sizeof(InstanceInfo_t));
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Set mandatory instance infos for this instance to defaults --- */
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->status=MGR_IDLE;
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->encoderState=NULL;                  // no encoding in progress, currently not used
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->decoderState=NULL;                  // no decoding in progress, currently not used
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef NOWSM
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->id=*pInstanceID;
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->workspaceState=NULL;                // to do: some workspace status info
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->nextInfo=NULL;
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // create a instance buffer
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->instanceBufSiz=pOptions->workspaceSize; // get requested size for the buffer
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->maxOutgoingSize=pOptions->maxOutgoingSize; // set max outgoing message size
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->instanceBuffer=smlLibMalloc(pInstanceInfo->instanceBufSiz);
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo->instanceBuffer==NULL)
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_NOT_ENOUGH_SPACE;
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // init buffer pointers
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->readPointer=pInstanceInfo->instanceBuffer;
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->writePointer=pInstanceInfo->instanceBuffer;
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->readLocked=0;
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->writeLocked=0;
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->outgoingMsgStart=NULL;
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef NOWSM
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Add instance infos memory object to the instance info list --- */
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      mgrSetInstanceListAnchor(pInstanceInfo);
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      rc = addInfo( pInstanceInfo );
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (rc!=SML_ERR_OK) return rc;
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Set the values of instance Infos as defined by the calling application ---*/
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* Set user data pointer */
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->userData=pUserData;
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* Set callback functions implemented by applications */
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (smlSetCallbacks(*pInstanceID, pCallbacks) != SML_ERR_OK) {
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifndef NOWSM
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	  wsmDestroy(pOptions->workspaceName);
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	  #endif
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	  return rc;
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // luz: %%% this was called twice, probably this is a bug, so I disabled the second call
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  //smlSetCallbacks(*pInstanceID, pCallbacks);
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* Set other application defined options for that instance */
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (setInstanceOptions (*pInstanceID, pOptions) != SML_ERR_OK) {
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifndef NOWSM
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 	  wsmDestroy(pOptions->workspaceName);
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 	  #endif
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 	  return rc;
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:   smlTerminateInstance
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Terminates a SyncML instance. The instance info is removed from the instances
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * list. Allmemory allocated for the workspace and the options variables is freed.
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              InstanceID_t
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  ID of the instance to be terminated
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:          Ret_t
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Error Code
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlTerminateInstance (InstanceID_t id)
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t pInstanceInfo;
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t             rc;
2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef NOWSM
3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Close the workspace --- */
3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo->instanceOptions != NULL) {
3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  		LOCKTOOLKIT("smlTerminateInstance");
3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	rc = wsmDestroy(pInstanceInfo->instanceOptions->workspaceName);
3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	RELEASETOOLKIT("smlTerminateInstance");
3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	if (rc!=SML_ERR_OK) {
3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      	//	  freeInstanceInfo(pInstanceInfo);
3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    		return rc;
3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    	}
3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Delete instance info and options --- */
3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      mgrSetInstanceListAnchor(NULL);
3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      removeInfo(id);
3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  freeInstanceInfo (pInstanceInfo);
3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlSetCallbacks
3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Sets new callback functions to an instance
3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        SmlCallbacksPtr_t
3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            A structure holding references to the callback functions
3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            implemented by the application
3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetCallbacks(InstanceID_t id, SmlCallbacksPtr_t pCallbacks)
3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlCallbacksPtr_t    pCallbacksCopy;
3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Check pCallbacks, which have been passed by the application --- */
3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (!pCallbacks)
3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_WRONG_USAGE;
3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- free old callback structure ---*/
3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlLibFree(pInstanceInfo->callbacks);
3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Use a copy of pCallbacksCopy --- */
3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pCallbacksCopy = (SmlCallbacksPtr_t)smlLibMalloc((MemSize_t)sizeof(SmlCallbacks_t));
3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pCallbacksCopy==NULL) return SML_ERR_NOT_ENOUGH_SPACE;
3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlLibMemcpy(pCallbacksCopy,pCallbacks,(MemSize_t)sizeof(SmlCallbacks_t));
3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	/* --- set new Callbacks --- */
3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	pInstanceInfo->callbacks = pCallbacksCopy;
3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlSetUserData
3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Sets a new Pointer to application specific user data,
3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * which is passed to all invoked callback functions
3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        VoidPtr_t
4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            UserData is a pointer to a void structure the application
4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            can pass into the SyncML Toolkit instance info.
4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            It will be returned to the application with every called
4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            callback function call!
4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            NOTE: This is only a pointer, the memory object itself
4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            remains within the responsibility of the calling application.
4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            The memory object will not be copied, moved or freed by the
4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Toolkit.
4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetUserData(InstanceID_t id, VoidPtr_t pUserData)
4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- set new user data pointer ---*/
4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->userData=pUserData;
4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlGetUserData  (added by luz %%%)
4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Returns Pointer to application specific user data,
4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * which is passed to all invoked callback functions
4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        *VoidPtr_t
4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Receives current Userdata pointer
4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlGetUserData(InstanceID_t id, VoidPtr_t *ppUserData)
4583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
4613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
4623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
4643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
4653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
4663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
4673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
4683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
4693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
4703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
4713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
4753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- get userdata pointer ---*/
4783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  *ppUserData = pInstanceInfo->userData;
4793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
4813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} // smlGetUserData
4823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
4853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlGetEncoding (added by luz %%%)
4863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Returns Currently set encoding type
4883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
4903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
4913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        *SmlEncoding_t
4933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Receives current encoding
4943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
4953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
4963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
4973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
4983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlGetEncoding(InstanceID_t id, SmlEncoding_t *pEncoding)
4993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
5003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
5023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
5033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
5053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
5063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
5073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
5083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
5093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
5103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
5113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
5123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
5133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
5143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
5163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- get encoding ---*/
5183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  *pEncoding = pInstanceInfo->instanceOptions->encoding;
5193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
5213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} // smlGetEncoding
5223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
5253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlSetEncoding
5263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Sets new encoding type for this Instance
5283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
5303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
5313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        SmlEncoding_t
5333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Type of Encoding to be used within this Instance
5343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
5363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
5373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
5383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef __SML_LITE__  /* these API calls are NOT included in the Toolkit lite version */
5393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetEncoding(InstanceID_t id, SmlEncoding_t encoding)
5403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
5413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
5433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
5443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Check pCallbacks, which have been passed by the application --- */
5463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (encoding==SML_UNDEF)
5473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_WRONG_USAGE;
5483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
5513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
5523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
5533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
5543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
5553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
5563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
5573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
5583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
5593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
5603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
5623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- free old callback structure ---*/
5653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->instanceOptions->encoding = encoding;
5663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
5683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
5693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
5703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
5753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlLockReadBuffer
5763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Locks the workspace buffer, which is assigned to the given instance
5783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * for reading. After this function is called, the application has
5793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * access to the workspace buffer, beginning at the address pReadPosition which
5803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * is returned by this function. SyncML will not change the workspace
5813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * buffer until smlUnlockReadBuffer is called.
5823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * pReadPosition returns a pointer to a valid position in the SyncML workspace
5833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * buffer. The pointer can be used by the application for copying outgoing
5843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * synchronization data from the buffer into some transport layer. usedSize
5853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * retrieves the size of synchronization data currently stored in the
5863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * workspace buffer beginning from the address to which pReadPosition points to.
5873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * This information is needed by the application when copying XML code out
5883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * of the buffer (while sending synchronization data)
5893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
5913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
5923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OUT:       MemPtr_t
5943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Workspace Pointer from which data can be read
5953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OUT:       MemSize_t
5973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Size of used data in workspace which may be read
5983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
5993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
6003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
6013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
6023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlLockReadBuffer(InstanceID_t id, MemPtr_t *pReadPosition, MemSize_t *usedSize)
6033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
6043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
6053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    InstanceInfoPtr_t	pInstanceInfo;
6063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
6083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
6093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // must not be already locked here
6103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo->readLocked)
6113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_WRONG_USAGE;
6123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // everything that is already written can also be read
6133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    *pReadPosition = pInstanceInfo->readPointer;
6143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // used portion is what is between read and write pointers
6153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    *usedSize = pInstanceInfo->writePointer-pInstanceInfo->readPointer;
6163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // lock
6173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->readLocked=1;
6183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
6193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t rc;
6203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlLockReadBuffer");
6223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Lock Workspace exclusively for reading and get a "Read" pointer --- */
6233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmLockH(id, SML_FIRST_DATA_ITEM, pReadPosition);
6243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlLockReadBuffer");
6253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
6263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Check, how much data has to be read ---*/
6283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlLockReadBuffer");
6293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmGetUsedSize(id,usedSize);
6303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlLockReadBuffer");
6313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
6323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
6333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
6353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
6363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
6413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlUnlockReadBuffer
6423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
6433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * End the read access of the application to the workspace buffer.
6443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SyncML is now owner of the buffer again and is able to manipulate its contents.
6453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * processedBytes passes the number of bytes, which the application has
6463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * successfully read and processed (e.g. when the application has copied
6473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * outgoing synchronization data from the workspace into a communication module).
6483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SyncML removes the given number of bytes from the workspace!
6493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
6503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
6513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
6523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
6533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        MemSize_t
6543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Actually read and processed bytes
6553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
6563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
6573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
6583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
6593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlUnlockReadBuffer(InstanceID_t id, MemSize_t processedBytes)
6603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
6613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
6623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    InstanceInfoPtr_t	pInstanceInfo;
6633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
6653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
6663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // must be already locked here
6673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pInstanceInfo->readLocked)
6683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_WRONG_USAGE;
6693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // advance read pointer by number of bytes processed
6703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo->readPointer+processedBytes>pInstanceInfo->writePointer)
6713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_WRONG_USAGE; // too many bytes processed
6723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // update read pointer
6733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->readPointer+=processedBytes;
6743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // auto-reset pointers if we have now read everything
6753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo->readPointer ==  pInstanceInfo->writePointer) {
6763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // clear the buffer
6773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      mgrResetWorkspace(pInstanceInfo);
6783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
6793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // unlock
6803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->readLocked=0;
6813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
6823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t rc;
6833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Pass the number of bytes which have been read --- */
6853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlUnlockReadBuffer");
6863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmProcessedBytes (id,processedBytes);
6873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlUnlockReadBuffer");
6883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
6893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Unlock Workspace --- */
6913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlUnlockReadBuffer");
6923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmUnlockH(id);
6933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlUnlockReadBuffer");
6943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
6953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
6963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
6983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
6993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef NOWSM
7023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
7043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlSetMaxOutgoingSize
7053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * marks the current write pointer position as beginning of a new outgoing
7073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * message. This is used to track outgoing message size while writing it
7083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
7103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
7113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        MemSize_t
7133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            maximum size of outgoing message (0=no limit except buffer size)
7143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
7163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
7173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
7183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetMaxOutgoingSize(InstanceID_t id, MemSize_t maxOutgoingSize)
7193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
7203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
7213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
7233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
7243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // set max outgoing message size
7263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->maxOutgoingSize = maxOutgoingSize;
7273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
7293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
7303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
7333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlSetOutgoingBegin
7343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * marks the current write pointer position as beginning of a new outgoing
7363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * message. This is used to track outgoing message size while writing it
7373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
7393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
7403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
7423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
7433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
7443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlSetOutgoingBegin(InstanceID_t id)
7453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
7463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t	pInstanceInfo;
7473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
7493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
7503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // remember current write pointer
7523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->outgoingMsgStart=pInstanceInfo->writePointer;
7533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
7553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
7563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
7583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
7603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlLockWriteBuffer
7613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Locks the workspace buffer, which is assigned to the given
7633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * instance for writing. After this function is called, the
7643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * application has access to the workspace buffer, beginning
7653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * at the address pWritePosition which is returned by this
7663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * function. SyncML will not change the workspace buffer until
7673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * smlUnlockWriteBuffer is called.
7683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * pWritePosition returns a pointer to a valid position in the
7693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SyncML workspace buffer. The pointer can be used by the application
7703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * for copying incoming synchronization data from some transport
7713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * layer into the buffer. freeSize retrieves the maximum usable
7723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * size of the workspace buffer beginning from the address to
7733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * which pWritePosition points to. This information is needed by
7743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * the application when copying XML code into the buffer (while
7753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * receiving synchronization data)
7763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
7783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
7793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OUT:       MemPtr_t
7813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Workspace Pointer to which data can be written
7823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * OUT:       MemSize_t
7843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Max free Size of available space for data
7853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
7863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
7873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
7883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
7893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlLockWriteBuffer(InstanceID_t id, MemPtr_t *pWritePosition, MemSize_t *freeSize)
7903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
7913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
7923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    InstanceInfoPtr_t	pInstanceInfo;
7933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
7953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
7963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // must not be already locked here
7973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo->writeLocked)
7983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_WRONG_USAGE;
7993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // return current write pointer
8003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    *pWritePosition = pInstanceInfo->writePointer;
8013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // free portion is either determined by actual room in buffer, or maximum outgoing size if set
8023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (
8033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo->maxOutgoingSize &&
8043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo->outgoingMsgStart &&
8053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo->outgoingMsgStart<pInstanceInfo->writePointer
8063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ) {
8073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // calculate what is allowed according to maxOutgoingSize
8083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      *freeSize =
8093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (pInstanceInfo->maxOutgoingSize) - // maximum outgoing size
8103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (pInstanceInfo->writePointer-pInstanceInfo->outgoingMsgStart); // size of outgoing message so far
8113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (pInstanceInfo->writePointer+*freeSize > pInstanceInfo->instanceBuffer+pInstanceInfo->instanceBufSiz) {
8123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // actual space in buffer is smaller
8133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        *freeSize =
8143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          (pInstanceInfo->instanceBuffer+pInstanceInfo->instanceBufSiz) - // end of buffer
8153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pInstanceInfo->writePointer; // current write position
8163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
8173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
8183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else {
8193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // simply return available size in buffer
8203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      *freeSize =
8213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (pInstanceInfo->instanceBuffer+pInstanceInfo->instanceBufSiz) - // end of buffer
8223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pInstanceInfo->writePointer; // current write position
8233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
8243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // lock
8253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->writeLocked=1;
8263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
8273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t rc;
8283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Lock Workspace exclusively for writing and get a "Write" pointer --- */
8303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlLockWriteBuffer");
8313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmLockH(id, SML_FIRST_FREE_ITEM, pWritePosition);
8323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlLockWriteBuffer");
8333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
8343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Check, how much free space is available for writing --- */
8363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlLockWriteBuffer");
8373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmGetFreeSize(id, freeSize);
8383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlLockWriteBuffer");
8393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
8403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
8413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
8433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
8443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
8493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  smlUnlockWriteBuffer
8503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
8513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * End the write access of the application to the workspace buffer.
8523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SyncML is now owner of the buffer again and is able to manipulate its
8533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * contents. writtenBytes passes the number of bytes which have been
8543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * written into the workspace buffer (e.g. when the application has copied
8553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * incoming synchronization data from a communication module into the
8563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * workspace). This information is needed by SyncML when processing received
8573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * synchronization data.
8583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
8593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
8603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
8613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
8623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        MemSize_t
8633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Actually written bytes
8643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
8653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
8663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
8673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
8683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySML_API Ret_t smlUnlockWriteBuffer(InstanceID_t id, MemSize_t writtenBytes)
8693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
8703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
8713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    InstanceInfoPtr_t	pInstanceInfo;
8723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
8743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
8753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // must be already locked here
8763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pInstanceInfo->writeLocked)
8773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_WRONG_USAGE;
8783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (writtenBytes > 0) {
8793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // advance write pointer by number of bytes written
8803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (pInstanceInfo->writePointer+writtenBytes>pInstanceInfo->instanceBuffer+pInstanceInfo->instanceBufSiz)
8813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_WRONG_USAGE; // too many bytes written
8823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // update write pointer
8833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo->writePointer+=writtenBytes;
8843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
8853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // unlock
8863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->writeLocked=0;
8873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
8883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t rc;
8893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (writtenBytes > 0)
8913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
8923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      /* --- Pass the number of bytes which have been written --- */
8933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      LOCKTOOLKIT("smlUnlockWriteBuffer");
8943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      rc = wsmSetUsedSize(id,writtenBytes);
8953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      RELEASETOOLKIT("smlUnlockWriteBuffer");
8963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (rc!=SML_ERR_OK) return rc;
8973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
8983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Unlock Workspace --- */
8993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("smlUnlockWriteBuffer");
9003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc = wsmUnlockH(id);
9013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("smlUnlockWriteBuffer");
9023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (rc!=SML_ERR_OK) return rc;
9033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
9043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
9063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
9073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*************************************************************************
9123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *  SyncML internal functions
9133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *************************************************************************/
9143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
9173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  mgrResetWorkspace
9183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reset the Workspace Buffer position to the beginning of the workspace
9193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * (clears all data in the buffer)
9203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
9213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
9223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the Instance
9233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    Return value,
9243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            SML_ERR_OK if successful
9253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
9263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t mgrResetWorkspace (InstanceID_t id) {
9273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
9283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    InstanceInfoPtr_t	pInstanceInfo;
9293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
9313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
9323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->readPointer=pInstanceInfo->instanceBuffer;
9343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->writePointer=pInstanceInfo->instanceBuffer;
9353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo->outgoingMsgStart=NULL; // no outgoing message in the buffer
9363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_OK; // ok
9373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
9383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t rc;
9393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    LOCKTOOLKIT("mgrResetWorkspace");
9403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    rc=wsmReset (id);
9413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    RELEASETOOLKIT("mgrResetWorkspace");
9423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return rc;
9433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
9443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
9453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
9493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:   setInstanceOptions
9503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
9513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * the options settings of an instance are set to a new value
9523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
9533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              InstanceID_t
9543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Instance ID assigned to the instance
9553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
9563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:              SmlInstanceOptionsPtr_t
9573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  New option settings of that particular SyncML instance
9583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  NOTE: only the encoding can be changed during life-time
9593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  of an instance
9603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  The other parameters of the instance options
9613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  (workspace size and name cannot be changed)
9623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
9633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:          Ret_t
9643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *                  Error Code
9653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
9663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t setInstanceOptions (InstanceID_t id, SmlInstanceOptionsPtr_t pOptions)
9673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
9683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Definitions --- */
9703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  InstanceInfoPtr_t         pInstanceInfo;
9713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlInstanceOptionsPtr_t      pOptionsCopy;
9723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifdef NOWSM
9753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Ckeck pOptions, which have been passed by the application --- */
9763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pOptions || (pOptions->encoding==SML_UNDEF))
9773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	  return SML_ERR_WRONG_USAGE;
9783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer
9803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #else
9813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Ckeck pOptions, which have been passed by the application --- */
9823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!pOptions || !pOptions->workspaceName|| (pOptions->encoding==SML_UNDEF))
9833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  	  return SML_ERR_WRONG_USAGE;
9843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* --- Find that instance --- */
9863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifdef __SML_LITE__  /* Only ONE instance is supported in the Toolkit lite version */
9873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = mgrGetInstanceListAnchor();
9883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
9893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pInstanceInfo = (InstanceInfoPtr_t) findInfo(id);
9903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
9913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
9923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInstanceInfo==NULL) return SML_ERR_MGR_INVALID_INSTANCE_INFO;
9943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- free old instance options ---*/
9963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  freeInstanceOptions(pInstanceInfo);
9973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Use a copy of pOptionsCopy --- */
9993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pOptionsCopy = (SmlInstanceOptionsPtr_t)smlLibMalloc((MemSize_t)sizeof(SmlInstanceOptions_t));
10003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pOptionsCopy==NULL) return SML_ERR_NOT_ENOUGH_SPACE;
10013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlLibMemcpy(pOptionsCopy,pOptions,(MemSize_t)sizeof(SmlInstanceOptions_t));
10023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #ifndef NOWSM
10043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pOptionsCopy->workspaceName=smlLibStrdup(pOptions->workspaceName);
10053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pOptionsCopy->workspaceName == NULL) {
10073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	  pInstanceInfo->instanceOptions=NULL;
10083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 	  smlLibFree(pOptionsCopy);
10093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 	  return SML_ERR_NOT_ENOUGH_SPACE;
10103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  #endif
10123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Assign the new options --- */
10143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pInstanceInfo->instanceOptions=pOptionsCopy;
10153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Let the new settingds take effect --- */
10183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Adjust workspace size ---*/
10193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Change workspace name ---*/
10203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // NOT SUPPORTED FOR YELLOW
10213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
10233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
10243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
10283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:  freeInstanceOptions
10293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Free Instances Options
10303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
10313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * RETURN:    InstanceInfoPtr_t
10323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            Pointer to the pInstance Info, which options should be freed
10333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
10343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t freeInstanceOptions (InstanceInfoPtr_t pInfo) {
10353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* --- Delete instance options (if there are any) --- */
10373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pInfo->instanceOptions!=NULL) {
10383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #ifndef NOWSM
10393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInfo->instanceOptions->workspaceName!=NULL)
10403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      smlLibFree(pInfo->instanceOptions->workspaceName);  // don't forget the substructures
10413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
10423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlLibFree(pInfo->instanceOptions);
10433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
10443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SML_ERR_OK;
10463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
10473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/**
10493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * FUNCTION:
10503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Free the memory of an removed Instance Info (including referenced sub structures)
10513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
10523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * IN:        InstanceID_t
10533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *            ID of the InstanceInfo structure to be freed
10543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
10553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic Ret_t freeInstanceInfo(InstanceInfoPtr_t pInfo) {
10563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	if (pInfo) {
10583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	  #ifdef NOWSM
10603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // return the instance buffer
10613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pInfo->instanceBuffer)
10623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      smlLibFree(pInfo->instanceBuffer);
10633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #else
10643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby		if (pInfo->workspaceState)
10653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby			smlLibFree(pInfo->workspaceState);
10663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    #endif
10673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby		if (pInfo->encoderState)
10683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby			smlLibFree(pInfo->encoderState);
10693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby		if (pInfo->decoderState)
10703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby			smlLibFree(pInfo->decoderState);
10713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby		if (pInfo->callbacks)
10723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby			smlLibFree(pInfo->callbacks);
10733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   	freeInstanceOptions(pInfo);
10753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby		smlLibFree(pInfo);
10773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	}
10783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby	return SML_ERR_OK;
10803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1081