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 HambySource Name: dmToken.cc
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyGeneral Description: This file contains implementation of utility classes DMToken, DMURI, DMParser
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmtoken.h"
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmdefs.h"
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xpl_Logger.h"
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "syncml_dm_data_types.h"
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_tree_class.H"
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMToken::DMToken()
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = NULL;
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = NULL;
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = NULL;
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_cDelim = SYNCML_DM_COMMA;
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_bIsAlloc = TRUE;
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMToken::DMToken(char delimeter)
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = NULL;
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = NULL;
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = NULL;
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_cDelim = delimeter;
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_bIsAlloc = TRUE;
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMToken::DMToken(BOOLEAN bIsAlloc, CPCHAR str, char delimeter)
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = NULL;
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = NULL;
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_bIsAlloc = bIsAlloc;
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_cDelim = delimeter;
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    assign(str);
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMToken::~DMToken()
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_bIsAlloc == TRUE )
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        FreeAndSetNull(m_pStr);
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        reset();
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMToken::assign(CPCHAR szStr)
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_bIsAlloc == TRUE )
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        FreeAndSetNull(m_pStr);
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( szStr && szStr[0] )
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        { // copy non empty string only
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            m_pStr = (char *)DmAllocMem( DmStrlen(szStr)+1);
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( m_pStr != NULL) {
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                DmStrcpy( m_pStr, szStr );
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else {
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                XPL_LOG_DM_TMN_Error(("DMToken::assign : unable allocate memory\n"));
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        reset();
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pStr = (char*)szStr;
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = m_pStr;
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = m_pStr;
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return m_pStr;
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMToken::nextSegment()
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pDelimPos == NULL )
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pDelimPos != m_pStr )
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        *m_pDelimPos = m_cDelim;
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pTokenPos = m_pDelimPos+1;
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = DmStrchr(m_pTokenPos, m_cDelim);
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(m_pDelimPos != NULL)
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       *m_pDelimPos = SYNCML_DM_NULL;
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pTokenPos[0] == SYNCML_DM_NULL )
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return (m_pTokenPos);
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyUINT32 DMToken::getSegmentsCount()
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT32 count = 0;
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    char * sTokenPos = m_pStr;
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !sTokenPos )
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return 0;
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    reset();
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = DmStrchr(m_pTokenPos,m_cDelim);
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    while ( m_pDelimPos )
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        count++;
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pTokenPos = m_pDelimPos + 1;
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pDelimPos = DmStrchr(m_pTokenPos,m_cDelim);
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( *m_pTokenPos == SYNCML_DM_NULL )
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return count;
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = m_pStr;
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = m_pStr;
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return count+1;
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyvoid DMToken::reset()
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pDelimPos && m_pDelimPos != m_pStr )
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        *m_pDelimPos = m_cDelim;
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = m_pStr;
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = m_pStr;
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMURI::DMURI() : DMToken(TRUE, NULL,SYNCML_DM_FORWARD_SLASH)
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMURI::DMURI(BOOLEAN bIsAlloc) : DMToken(bIsAlloc, NULL,SYNCML_DM_FORWARD_SLASH)
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMURI::DMURI(BOOLEAN bIsAlloc, CPCHAR szURI) : DMToken(bIsAlloc, szURI,SYNCML_DM_FORWARD_SLASH)
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMURI::getTailSegments() const
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pDelimPos == NULL )
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pDelimPos == m_pStr && *m_pStr != SYNCML_DM_FORWARD_SLASH )
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return m_pStr;
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return m_pDelimPos+1;
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMURI::getLastSegment()
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_pStr == NULL )
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    reset();
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    char * sPos = DmStrrchr(m_pStr,m_cDelim);
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( sPos == NULL )
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return sPos+1;
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMURI::getParentURI()
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if ( m_pStr == NULL )
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     char * pDelimPosPrev = m_pDelimPos;
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     m_pDelimPos = DmStrrchr(m_pStr, SYNCML_DM_FORWARD_SLASH);
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if ( !m_pDelimPos || m_pDelimPos == m_pStr )
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     {
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pDelimPos = pDelimPosPrev;
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     *m_pDelimPos = SYNCML_DM_NULL;
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if ( pDelimPosPrev != m_pStr )
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        *pDelimPosPrev = SYNCML_DM_FORWARD_SLASH;
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     return m_pStr;
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMParser::DMParser(char delimeter)
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = NULL;
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = NULL;
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_cDelim = delimeter;
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nCurrentSegment = 0;
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nSegmentsCount = 0;
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_aSegments = (DM_URI_SEGMENT_T*)DmAllocMem( dmTreeObj.GetMaxPathDepth() * sizeof(DM_URI_SEGMENT_T));
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMParser::DMParser(CPCHAR szURI, char delimeter)
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = NULL;
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = NULL;
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_cDelim = delimeter;
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nCurrentSegment = 0;
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nSegmentsCount = 0;
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_aSegments = (DM_URI_SEGMENT_T*)DmAllocMem( dmTreeObj.GetMaxPathDepth() * sizeof(DM_URI_SEGMENT_T));
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    assign(szURI);
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDMParser::~DMParser()
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  reset();
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  FreeAndSetNull(m_aSegments);
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMParser::nextSegment()
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_nCurrentSegment == m_nSegmentsCount )
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    char * pStr = m_aSegments[m_nCurrentSegment].m_pStr;
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby//    XPL_LOG_DM_TMN_Debug(("DMParser::nextSegment, pStr:%s, m_nCurrentSegment:%d, m_nLen:%d\n", pStr, m_nCurrentSegment, m_aSegments[m_nCurrentSegment].m_nLen));
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pStr[m_aSegments[m_nCurrentSegment].m_nLen] = SYNCML_DM_NULL;
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby//    XPL_LOG_DM_TMN_Debug(("DMParser::nextSegment, pStr:%s, m_nCurrentSegment:%d, m_nLen:%d\n", pStr, m_nCurrentSegment, m_aSegments[m_nCurrentSegment].m_nLen));
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nCurrentSegment++;
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return pStr;
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyCPCHAR DMParser::assign(CPCHAR szStr)
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DM_URI_SEGMENT_T segment;
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !m_aSegments )
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return NULL;
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pStr = (char*)szStr;
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nCurrentSegment = 0;
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nSegmentsCount = 0;
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !m_pStr )
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return m_pStr;
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pTokenPos = m_pStr;
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_pDelimPos = DmStrchr(m_pTokenPos,m_cDelim);
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    while ( m_pDelimPos )
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        segment.m_pStr = m_pTokenPos;
2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        segment.m_nLen = m_pDelimPos - m_pTokenPos;
2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_aSegments[m_nSegmentsCount++] = segment;
2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pTokenPos = m_pDelimPos + 1;
2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_pDelimPos = DmStrchr(m_pTokenPos,m_cDelim);
2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( *m_pTokenPos == SYNCML_DM_NULL )
2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return m_pStr;
3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    segment.m_pStr = m_pTokenPos;
3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    segment.m_nLen = DmStrlen(m_pTokenPos);
3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_aSegments[m_nSegmentsCount++] = segment;
3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return m_pStr;
3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyvoid DMParser::reset()
3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !m_aSegments )
3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return;
3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( m_nCurrentSegment > 0 )
3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        for (int i=0; i<m_nSegmentsCount-1; i++)
3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            m_aSegments[i].m_pStr[m_aSegments[i].m_nLen] = m_cDelim;
3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    m_nCurrentSegment = 0;
3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyBOOLEAN DMParser::findSegment(CPCHAR szSegment)
3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     for (int i=0; i<m_nSegmentsCount; i++)
3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     {
3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        m_aSegments[i].m_pStr[m_aSegments[i].m_nLen] = SYNCML_DM_NULL;
3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( DmStrcmp(m_aSegments[i].m_pStr,szSegment) == 0)
3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return TRUE;
3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     return FALSE;
3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
335