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