13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*
23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project
33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License");
53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License.
63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at
73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *      http://www.apache.org/licenses/LICENSE-2.0
93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby *
103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software
113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS,
123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and
143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License.
153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Name: dmtNode.cc
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    General Description: Implementation of the DmtTreeImpl class
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmt.hpp"
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmtTreeImpl.hpp"
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmtNodeImpl.hpp"
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_tree_util.h"
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_tree_plugin_util.H"
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmLockingHelper.h"
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtNodeImpl::~DmtNodeImpl()
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtNodeImpl::DmtNodeImpl( BOOLEAN bLeaf,BOOLEAN bESN, DmtTree *ptrTree, CPCHAR oPath, CPCHAR strName )
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_bLeaf = bLeaf;
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_ptrTree = ptrTree;
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_oPath = DmtGetSafeStrPtr( oPath );
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_strName = strName;
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_bESN = bESN;
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_chunkOffset = 0L;         // offset
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby chunkData = NULL;
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtNodeImpl::DmtNodeImpl( BOOLEAN bLeaf, DmtTree *ptrTree, CPCHAR oPath, CPCHAR strName )
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_bLeaf = bLeaf;
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_ptrTree = ptrTree;
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_oPath = DmtGetSafeStrPtr( oPath );
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_strName = strName;
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetTree( PDmtTree& ptrTree ) const
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  ptrTree = m_ptrTree;
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SYNCML_DM_SUCCESS;
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetPath(DMString & path) const
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    path = m_oPath;
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_oPath != NULL && path == NULL )
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_DEVICE_FULL;
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_SUCCESS;
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetNodeName(DMString & name) const
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    name = m_strName;
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_strName != NULL && name == NULL )
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_DEVICE_FULL;
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_SUCCESS;
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetAttributes( DmtAttributes& oAttr ) const
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMLockingHelper oLock( GetTree(), GetTree()->m_nLockType );
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return dmTreeObj.GetAttributes(m_oPath.c_str(), oAttr, SYNCML_DM_REQUEST_TYPE_API);
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetTitle( CPCHAR szTitle )
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return GetTree()->SetNodeStringProp( m_oPath.c_str(), "Title", szTitle );
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetAcl( const DmtAcl& oAcl )
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return GetTree()->SetNodeStringProp( m_oPath.c_str(), "ACL", oAcl.toString().c_str());
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::Rename( CPCHAR szNewName )
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return GetTree()->SetNodeStringProp( m_oPath.c_str(), "Name", szNewName );
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetValue( DmtData& oData ) const
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyif (m_bESN)
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_RESULTS_TOO_LARGE;
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), GetTree()->m_nLockType );
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T dm_stat = SYNCML_DM_SUCCESS;
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMGetData getData;
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  dm_stat = dmTreeObj.Get(m_oPath.c_str(),getData,SYNCML_DM_REQUEST_TYPE_API);
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( dm_stat != SYNCML_DM_SUCCESS )
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dm_stat;
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (getData.m_nFormat == SYNCML_DM_FORMAT_NODE )
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     DMStringVector aChildren;
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     DMURI ptr(FALSE,getData.getCharData());
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     CPCHAR pSegment = NULL;
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     oData = DmtData( aChildren );  // set type to "node" for case of empty parent
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     // we got list of nodes, divided by '/'
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     while ( (pSegment = ptr.nextSegment()) != NULL )
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     {
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       dm_stat = oData.AddNodeValue(pSegment);
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if ( dm_stat != SYNCML_DM_SUCCESS )
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           return dm_stat;
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      dm_stat =  dmBuildData(getData.m_nFormat, getData.m_oData, oData);
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return dm_stat;
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetValue( const DmtData& value )
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyif (m_bESN)
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_RESULTS_TOO_LARGE;
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T dm_stat = SYNCML_DM_SUCCESS;
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMAddData oReplace;
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  dm_stat = oReplace.set(m_oPath.c_str(),value,"text/plain");
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( dm_stat != SYNCML_DM_SUCCESS )
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dm_stat;
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return dmTreeObj.Replace(oReplace,SYNCML_DM_REQUEST_TYPE_API);
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetChildNodes( DMVector<PDmtNode>& oChildren ) const
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMStringVector  aChildren;
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return GetChildNodes( oChildren, aChildren );
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetChildNodes( DMVector<PDmtNode>& oChildren, DMStringVector& aChildren ) const
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // cache current time for last access time updates
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMTreeCacheCurrentTime cacheTime(&dmTreeObj);
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  oChildren.clear(); // remove all previous items from array
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( m_bLeaf )
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FAIL;
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DmtData oData;
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T dm_stat = GetValue( oData );
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( dm_stat != SYNCML_DM_SUCCESS )
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dm_stat;
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  dm_stat = oData.GetNodeValue( aChildren );
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( dm_stat != SYNCML_DM_SUCCESS )
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dm_stat;
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  for ( int i = 0; i < aChildren.size(); i++ )
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString oPath = m_oPath;
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    oPath += "/";
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    oPath += aChildren[i];
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    PDmtNode ptrNode;
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    dm_stat = GetTree()->GetNodeByFullPath( oPath.c_str(), ptrNode );
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( dm_stat != SYNCML_DM_SUCCESS )
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return dm_stat;
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    oChildren.push_back( ptrNode );
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SYNCML_DM_SUCCESS;
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyBOOLEAN DmtNodeImpl::IsLeaf() const
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return m_bLeaf;
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetChildNode( CPCHAR szPath, PDmtNode& ptrNode  )
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMString oPath = m_oPath;
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  oPath += "/";
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  oPath += DmtGetSafeStrPtr( szPath );
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return GetTree()->GetNodeByFullPath( oPath.c_str(), ptrNode );
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::Execute( CPCHAR strData, DMString& result )
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_TREE_READONLY;
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dmTreeObj.Exec(m_oPath.c_str(),strData,result);
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby// implementation helpers
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtTreeImpl* DmtNodeImpl::GetTree() const
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return (DmtTreeImpl*)m_ptrTree.GetPtr();
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T DmtNodeImpl:: GetEngineChunkData(void)
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMGetData getData;
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = getData.set(chunkData, m_chunkOffset);
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( retStatus != SYNCML_DM_SUCCESS )
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return retStatus;
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = dmTreeObj.Get(m_oPath.c_str(),getData,SYNCML_DM_REQUEST_TYPE_API);
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( retStatus != SYNCML_DM_SUCCESS )
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return retStatus;
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  UINT32 returnLen;
2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = chunkData->GetReturnLen(returnLen);
2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_chunkOffset += returnLen;
2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return retStatus;
2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T DmtNodeImpl::GetFirstChunk(DmtDataChunk&  dmtChunkData)
2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMLockingHelper oLock( GetTree(), GetTree()->m_nLockType );
3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if( chunkData != NULL)
3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if(chunkData != &dmtChunkData)
3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {    retStatus = chunkData->FreeChunkBuffer();
3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if(retStatus!= SYNCML_DM_SUCCESS)
3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return retStatus;
3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = dmtChunkData.AllocateChunkBuffer();
3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if(retStatus!= SYNCML_DM_SUCCESS)
3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return retStatus;
3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  chunkData = &dmtChunkData;
3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_chunkOffset = 0L;
3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus =  GetEngineChunkData();
3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return retStatus;
3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby }
3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T DmtNodeImpl::GetNextChunk(DmtDataChunk& dmtChunkData)
3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMLockingHelper oLock( GetTree(), GetTree()->m_nLockType );
3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if(( chunkData == NULL) ||(chunkData != &dmtChunkData))
3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_INVALID_PARAMETER;
3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus =  GetEngineChunkData();
3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return retStatus;
3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby }
3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T DmtNodeImpl:: SetEngineChunkData(BOOLEAN isLastChunk)
3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMAddData oReplace;
3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = oReplace.set(m_oPath.c_str(), chunkData, m_chunkOffset, isLastChunk);
3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( retStatus != SYNCML_DM_SUCCESS )
3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return retStatus;
3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus =  dmTreeObj.Replace(oReplace,SYNCML_DM_REQUEST_TYPE_API);
3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( retStatus != SYNCML_DM_SUCCESS )
3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return retStatus;
3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  UINT32 dataLen;
3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = chunkData->GetChunkDataSize(dataLen);
3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_chunkOffset += dataLen;
3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return retStatus;
3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T DmtNodeImpl:: SetFirstChunk(DmtDataChunk& dmtChunkData)
3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (chunkData != NULL)
3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if(chunkData != &dmtChunkData)
3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {    retStatus = chunkData->FreeChunkBuffer();
3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if(retStatus!= SYNCML_DM_SUCCESS)
3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return retStatus;
3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  retStatus = dmtChunkData.AllocateChunkBuffer();
3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if(retStatus!= SYNCML_DM_SUCCESS)
3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return retStatus;
3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  chunkData = &dmtChunkData;
3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  m_chunkOffset = 0L;
3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   retStatus =  SetEngineChunkData(FALSE);
3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return retStatus;
3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T DmtNodeImpl::SetNextChunk(DmtDataChunk& dmtChunkData)
4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if(( chunkData == NULL) ||(chunkData != &dmtChunkData))
4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_INVALID_PARAMETER;
4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   retStatus =  SetEngineChunkData(FALSE);
4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return retStatus;
4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T DmtNodeImpl::SetLastChunk(DmtDataChunk& dmtChunkData)
4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby {
4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( GetTree()->m_nLockType == SYNCML_DM_LOCK_TYPE_SHARED )
4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_TREE_READONLY;
4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMLockingHelper oLock( GetTree(), SYNCML_DM_LOCK_TYPE_EXCLUSIVE );
4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !oLock.IsLockedSuccessfully() )
4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return oLock.GetError();
4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T retStatus =  SYNCML_DM_SUCCESS;
4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (!m_bESN)
4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_UNSUPPORTED_MEDIATYPE_FORMAT;
4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if(( chunkData == NULL) ||(chunkData != &dmtChunkData))
4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_INVALID_PARAMETER;
4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   retStatus =  SetEngineChunkData(TRUE);
4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return retStatus;
4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyboolean DmtNodeImpl::IsExternalStorageNode(void) const
4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ return m_bESN;
4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else
4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetFirstChunk(DmtDataChunk&  dmtChunkData)
4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FEATURE_NOT_SUPPORTED;
4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::GetNextChunk(DmtDataChunk& dmtChunkData)
4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FEATURE_NOT_SUPPORTED;
4583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetFirstChunk(DmtDataChunk& dmtChunkData)
4603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FEATURE_NOT_SUPPORTED;
4623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetNextChunk(DmtDataChunk& dmtChunkData)
4643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FEATURE_NOT_SUPPORTED;
4663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtNodeImpl::SetLastChunk(DmtDataChunk& dmtChunkData)
4683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
4693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FEATURE_NOT_SUPPORTED;
4703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyboolean DmtNodeImpl::IsExternalStorageNode(void) const { return FALSE;}
4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
474