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