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    Header Name: dm_ua_handlecommand.cc
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    General Description: Implementation of SyncML toolkit callback functions.
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmstring.h"
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmStringUtil.h"
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_tree_util.h"
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xpl_dm_Manager.h"
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_ua_handlecommand.h"
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmProcessScriptSession.h"
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmServerSession.h"
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dm_security.h"
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmLockingHelper.h"
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SYNCML_DM_DisplayAlert.H"
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SYNCML_DM_ConfirmAlert.H"
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SYNCML_DM_TextInputAlert.H"
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SYNCML_DM_SingleChoiceAlert.H"
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "SYNCML_DM_MultipleChoiceAlert.H"
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xpl_Logger.h"
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xlttags.h"
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyextern "C" {
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "smlerr.h"
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "xpt-b64.h"
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 TYPEDEFS
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Note that the order of this table MUST match the order of the SYNCML_DM_COMMAND_T enum in
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * syncml_dm_data_types.h
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic const CPCHAR dm_command_name_table[] = {
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "", //SYNCML_DM_NO_COMMAND
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Add",  //SYNCML_DM_ADD
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Delete", //SYNCML_DM_DELETE
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Replace",  //SYNCML_DM_REPLACE
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Get",  //SYNCML_DM_GET
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Rename", //SYNCML_DM_RENAME
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Exec", //SYNCML_DM_EXEC
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Copy", //SYNCML_DM_COPY
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Alert",  //SYNCML_DM_ALERT
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "SyncHdr",  //SYNCML_DM_HEADER
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Status", //SYNCML_DM_STATUS
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Atomic", //SYNCML_DM_ATOMIC
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  "Sequence" //SYNCML_DM_SEQUENCE
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby};
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_BuildPackage *pDmBuildPackage;
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic DMProcessScriptSession *pDmMgmtSessionObj;
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* Since SyncHdr STATUS doesn't get constructed until the receiving package's STATUS command is
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * handled, we need to save synchdr_dm_stat when the starting message is handled. Keep it until
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * SyncHdr STATUS is constructed. */
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T synchdr_dm_stat = SYNCML_DM_SUCCESS;
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_CHAL_TYPE_T s_nSrvSecLevel = SYNCML_DM_CHAL_UNDEFINED;
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 LOCAL FUNCTION PROTOTYPES
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                     LOCAL FUNCTIONS
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic inline SYNCML_DM_RET_STATUS_T SyncML2DMCode( const char* szSyncMLCode )
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T  nRet = DmAtoi( szSyncMLCode );
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( nRet == 200 )
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_SUCCESS;
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return nRet;
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 FUNCTIONS
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : SetMetaData
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : The utility function to set up the meta data.
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : p_meta_info
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER: pp_type
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_format
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T SetMetaData(SmlPcdataPtr_t p_meta_data,
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    DMBuffer& pp_type,
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    SYNCML_DM_FORMAT_T *p_format)
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlMetInfMetInfPtr_t p_meta_info;
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CPCHAR p_temp_content;
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Setup OUTPUT parameter type and format. If p_meta_data is not set, assign default value
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       to OUTPUT parameters, type as "text/plain", format as "chr". */
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (p_meta_data != NULL)
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (p_meta_data->content != NULL)
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( SML_PCDATA_EXTENSION != p_meta_data->contentType &&
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 SML_EXT_METINF != p_meta_data->extension )
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                *p_format = SYNCML_DM_FORMAT_CHR;
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pp_type.assign("text/plain");
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                p_meta_info = (SmlMetInfMetInfPtr_t)p_meta_data->content;
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ((p_meta_info->format != NULL) &&
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   (p_meta_info->format->length != 0))
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    p_temp_content = (CPCHAR)p_meta_info->format->content;
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    *p_format = DMTree::ConvertFormatStr(p_temp_content);
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* If there is no format information, set p_format as default format "chr" */
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    *p_format = SYNCML_DM_FORMAT_CHR;
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Set p_temp_type to the passed in type */
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if((p_meta_info->type != NULL) && (p_meta_info->type->length != 0))
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    pp_type.assign((UINT8*)p_meta_info->type->content,p_meta_info->type->length);
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* If there is no type information, set the type as 'text/plain' */
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    pp_type.assign("text/plain");
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        *p_format = SYNCML_DM_FORMAT_CHR;
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pp_type.assign("text/plain");
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pp_type.getBuffer() == NULL )
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_DEVICE_FULL;
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_SUCCESS;
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : SetExecResultsData
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : The utility function to set up the results data for Exec command.
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : p_passedin_result_item. p_target_uri
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_exec_ret_data
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER: p_passedin_result_item
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySetExecResultsData(SmlItemPtr_t  p_passedin_result_item,
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               CPCHAR pURI,
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               const DMString & execResults)
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t sml_ret_stat = SML_ERR_OK;
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    char data_size_str[UINT32_TYPE_STR_SIZE_10];
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_passedin_result_item->source = smlAllocSource();
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( p_passedin_result_item->source == NULL )
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_FAIL;
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmBuildPackage->BuildPcData(p_passedin_result_item->source->locURI, SML_PCDATA_STRING,
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       SML_EXT_UNDEFINED,DmStrlen(pURI),(UINT8*)pURI);
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Convert the dwRetDataSize to a string */
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DmSprintf(data_size_str, "%d", execResults.length());
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_passedin_result_item->meta = smlAllocPcdata();
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( p_passedin_result_item->meta == NULL )
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_FAIL;
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pDmBuildPackage->BuildMetaInfo(
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            p_passedin_result_item->meta,
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            NULL, NULL, NULL,
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            (UINT8*)data_size_str,
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            NULL, NULL, NULL, NULL);
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Set the p_passedin_result_item->data */
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Client construct <Data> element no matter there are data from GET command or not. */
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_passedin_result_item->data = smlAllocPcdata();
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( p_passedin_result_item->data == NULL )
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SYNCML_DM_FAIL;
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pDmBuildPackage->BuildPcData(p_passedin_result_item->data, SML_PCDATA_STRING,
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           SML_EXT_UNDEFINED,execResults.length(),(UINT8*)execResults.c_str());
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T SaveStatus(UINT8          *p_CmdRefData,
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    UINT8          *p_CmdName,
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    UINT8          *p_SourceRefData,
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    UINT8          *p_TargetRefData,
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    UINT16          status_Code,
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    const DMStringVector*           responses,
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    SYNCML_DM_USER_DATA_T   *pUserData )
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlStatusPtr_t pStatus = pDmBuildPackage->AllocateStatus(
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_CmdRefData, p_CmdName, p_SourceRefData, p_TargetRefData, NULL,
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        status_Code, responses );
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !pStatus )
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FAIL;
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pUserData->aStatuses.push_back((UINT32)pStatus);
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SYNCML_DM_SUCCESS;
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySaveCommandRefStatus(UINT8  *p_CmdRefData,
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    UINT8          *p_CmdName,
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    SmlItemPtr_t  pCommandItem,
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    SYNCML_DM_RET_STATUS_T   status_Code,
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    SYNCML_DM_USER_DATA_T   *pUserData )
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  UINT8  *p_SourceRefData = NULL;
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  UINT8  *p_TargetRefData = NULL;
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlStatusPtr_t pStatus = NULL;
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if(pCommandItem->target != NULL && pCommandItem->target->locURI != NULL)
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_TargetRefData = (UINT8 *)pCommandItem->target->locURI->content;
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if ( status_Code == SYNCML_DM_SUCCESS )
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  status_Code = SYNCML_DM_BAD_REQUEST;
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pCommandItem->source != NULL &&  pCommandItem->source->locURI != NULL)
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       p_SourceRefData = (UINT8*)pCommandItem->source->locURI->content;
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SaveStatus(p_CmdRefData,
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 p_CmdName,
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 p_SourceRefData,
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 p_TargetRefData,
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 status_Code,
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 NULL,
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 pUserData);
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !pStatus )
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SYNCML_DM_FAIL;
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pUserData->aStatuses.push_back((UINT32)pStatus);
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SYNCML_DM_SUCCESS;
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T SaveResult(CPCHAR pStrTargetUri,
2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          CPCHAR p_CmdIdRef,
2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          DMGetData *p_get_ret_data,
2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          BOOLEAN is_ThisGetStructResult,
2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          BOOLEAN isFirstGetStruct,
2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          BOOLEAN isThisGetPropResult,
2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          SYNCML_DM_USER_DATA_T   *pUserData,
3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          UINT8 type, // exec/get/getstruct
3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          const SYNCML_DM_GET_ON_LIST_RET_DATA_T& oGetStructData )
3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlResultsPtr_t  p_results = NULL;
3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlPcdataPtr_t  p_data = NULL;
3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T nRes = SYNCML_DM_SUCCESS;
3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  CPCHAR p_target_uri = pStrTargetUri;
3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef TNDS_SUPPORT
3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlPcdata_t  pcData;
3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( type == SYNCML_DM_RESULT_VALUE::Enum_Result_GetTnds )
3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     p_target_uri = oGetStructData._pbURI;
3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     nRes = pDmBuildPackage->AllocateTndsResult(pStrTargetUri, p_get_ret_data, oGetStructData, &pcData);
3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if ( nRes == SYNCML_DM_SUCCESS )
3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     {
3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_data = &pcData;
3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  nRes = pDmBuildPackage->AllocateResult( p_results, p_target_uri,
3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          p_CmdIdRef, p_get_ret_data,
3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          is_ThisGetStructResult, isFirstGetStruct,
3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                          isThisGetPropResult, NULL, p_data);
3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( nRes != SYNCML_DM_SUCCESS )
3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( NULL != p_results )
3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       smlFreeResults(p_results);
3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       p_results = NULL;
3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return nRes;
3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pUserData->aResults.push_back( SYNCML_DM_RESULT_VALUE( type, p_results,
3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         oGetStructData, p_CmdIdRef,
3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         (CPCHAR)pDmBuildPackage->GetMsgRef()) );
3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return nRes;
3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T AtomicRollback (VoidPtr_t    userData)
3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T retStatus=SYNCML_DM_FAIL;
3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if( !pUserData->rollback )
3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       retStatus = dmTreeObj.GetLockContextManager().ReleaseIDInternal( SYNCML_DM_LOCKID_CURRENT, SYNCML_DM_ROLLBACK);
3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pUserData->pAtomicStatus.status = SYNCML_DM_ATOMIC_FAILED;
3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (retStatus != SYNCML_DM_SUCCESS)
3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          retStatus = SYNCML_DM_ATOMIC_ROLLBACK_FAILED;
3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        else
3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          retStatus = SYNCML_DM_ATOMIC_ROLLBACK_OK;
3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        for ( int i = 0; i <pUserData->oStatus.size(); i++ )
3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pUserData->oStatus[i].status = retStatus;
3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pUserData->rollback = TRUE;
3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return retStatus;
3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic void SequenceStatus(VoidPtr_t userData, SYNCML_DM_RET_STATUS_T status)
3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T  *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pUserData->IsSequence() )
3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( status != SYNCML_DM_SUCCESS )
3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pUserData->sequenceFailed = TRUE;
3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic void  CheckAuthorization( SmlCredPtr_t pCred )
3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMClientServerCreds *pClientServerCreds = pDmMgmtSessionObj->GetClientServerCreds();
3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SmlMetInfMetInfPtr_t pMeta = NULL;
3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // check default required level
3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( s_nSrvSecLevel == SYNCML_DM_CHAL_UNDEFINED )
3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CPCHAR szStr = XPL_DM_GetEnv(SYNCML_DM_SECURITY_LEVEL);
3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !szStr )
3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      s_nSrvSecLevel = SYNCML_DM_CHAL_BASIC;
3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else {
3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      s_nSrvSecLevel = DmAtoi(szStr);
3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if ( s_nSrvSecLevel < SYNCML_DM_CHAL_NONE ||
3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        s_nSrvSecLevel > SYNCML_DM_CHAL_HMAC )
3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        s_nSrvSecLevel = SYNCML_DM_CHAL_BASIC;
3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( pClientServerCreds->ServerChalType <= SYNCML_DM_CHAL_NONE )
3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pClientServerCreds->SetPrefServerAuth(s_nSrvSecLevel);  // use default only  if it's not set yet
4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( pClientServerCreds->ServerChalType == SYNCML_DM_CHAL_HMAC )
4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return; // authorization performed in onStatus handler
4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // if none - just authorize at once, but if server provides credentials - verify it
4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( pClientServerCreds->ServerChalType == SYNCML_DM_CHAL_NONE )
4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->SetSecStateSrv( TRUE );
4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !pCred || !pCred->data || !pCred->meta)
4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return; // no credentials
4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  const char* szType = NULL;
4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  const char* szData = NULL;
4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  szData = (const char*)pCred->data->content;
4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( pCred->meta->contentType == SML_PCDATA_EXTENSION &&
4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pCred->meta->extension == SML_EXT_METINF ){
4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pMeta = (SmlMetInfMetInfPtr_t)pCred->meta->content;
4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pMeta && pMeta->type && pMeta->type->contentType == SML_PCDATA_STRING )
4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      szType =  (const char*)pMeta->type->content;
4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !szType || !szData )
4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return;
4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCMLDM_SEC_CREDENTIALS_T  *pGenCred = NULL;
4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( DmStrcmp(szType, SYNCML_AUTH_BASIC) == 0 )
4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( pClientServerCreds->ServerChalType > SYNCML_DM_CHAL_BASIC)
4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          return; // basic is not allowed
4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pClientServerCreds->SetPrefServerAuth(SYNCML_DM_CHAL_BASIC);  // use basic after that for this session
4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        SYNCMLDM_BASIC_SEC_INFO_T   basicSecInfo;
4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        basicSecInfo.pb_password = (UINT8*)pClientServerCreds->pServerPW.c_str();
4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        basicSecInfo.pb_user_name_or_server_id = (UINT8*)pClientServerCreds->pServerId.c_str();
4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pGenCred = syncmldm_sec_build_basic_cred(&basicSecInfo);
4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if ( DmStrcmp(szType, SYNCML_AUTH_MD5) == 0 )
4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( pClientServerCreds->ServerChalType > SYNCML_DM_CHAL_MD5)
4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              return; // MD5 digest is not allowed
4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientServerCreds->SetPrefServerAuth( SYNCML_DM_CHAL_MD5 );  // use MD5 after that for this session
4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            SYNCMLDM_MD5_SEC_INFO_T     md5SecInfo;
4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            UINT8                       decodedNonce[MAX_BIN_NONCE_LEN];
4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            UINT32                      encodedNonceLen;
4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            UINT32                      decodedNonceLen;
4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* The ClientNonce string is b64 encoded and must be decoded now.*/
4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            encodedNonceLen = DmStrlen((const char *)pClientServerCreds->pServerNonce);
4583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            decodedNonceLen = base64Decode((unsigned char *)decodedNonce,
4593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    MAX_BIN_NONCE_LEN,
4603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    (unsigned char*)pClientServerCreds->pServerNonce.c_str(),
4613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                    (unsigned long*)&encodedNonceLen);
4623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            md5SecInfo.pb_user_name_or_server_id = (UINT8*)pClientServerCreds->pServerId.c_str();
4633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            md5SecInfo.pb_password = (UINT8*)pClientServerCreds->pServerPW.c_str();
4643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            md5SecInfo.pb_nonce = decodedNonce;
4653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            md5SecInfo.o_encode_base64 = FALSE;
4663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( pMeta->format )
4673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                md5SecInfo.o_encode_base64 = TRUE;
4683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            md5SecInfo.w_nonce_length = decodedNonceLen;
4693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pGenCred = syncmldm_sec_build_md5_cred(&md5SecInfo);
4713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( !pGenCred )
4743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return;
4753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if ( memcmp(szData, (const char*)pGenCred->ab_credential_string, pGenCred->w_credential_string_length) == 0 )
4773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->SetSecStateSrv( TRUE );
4783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
4793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->SetSecStateSrv( FALSE );
4803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DmFreeMem(pGenCred);
4823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
4833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
4853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleEndMessage
4863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : This method calls SyncML Toolkit smlEndMessage to add the Final element in the
4883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  SyncBody for the sending message.
4893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
4903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
4913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  final
4923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
4933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
4943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
4953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
4983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
4993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
5003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleEndMessage (InstanceID_t id,
5013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  VoidPtr_t    userData,
5023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  Boolean_t    final)
5033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
5043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
5053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T  ret_stat = SYNCML_DM_SUCCESS;
5063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  BOOLEAN isLastChunk = FALSE;
5073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Is session aborted?
5093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if( pDmMgmtSessionObj->IsSessionAborted())
5103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         return SYNCML_DM_SUCCESS;
5113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // put cahced statuses (if any)
5133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  while ( ret_stat == SYNCML_DM_SUCCESS && pUserData->aStatuses.size() > 0 ) {
5143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = pDmBuildPackage->BuildStatus( (SmlStatusPtr_t)pUserData->aStatuses[0] );
5153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( ret_stat == SYNCML_DM_SUCCESS ){
5163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      smlFreeStatus((SmlStatusPtr_t)pUserData->aStatuses[0]);
5173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pUserData->aStatuses.remove(0);
5183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
5193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
5203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Large Object delivery
5213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
5223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyif( !pDmBuildPackage->LargeObjectSendNextChunk(ret_stat, isLastChunk))
5233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
5243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby {
5253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
5263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if(ret_stat != SYNCML_DM_SUCCESS)
5273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {        pUserData->aResults.remove(0);
5283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        isLastChunk = FALSE;
5293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
5303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
5313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  // pur cached results
5333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  while ( ret_stat == SYNCML_DM_SUCCESS && pUserData->aResults.size() > 0 ) {
5343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // Large Object delivery
5353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
5363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if(!isLastChunk)
5373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                ret_stat =  pDmBuildPackage->LargeObjectSendFirstChunk(pUserData->aResults[0]);
5383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        isLastChunk = FALSE;
5393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else
5403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // try to insert result first
5413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = pDmBuildPackage->BuildResultsCommand(pUserData->aResults[0]._pGetExecResult);
5423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
5433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( ret_stat == SYNCML_DM_RESULTS_TOO_LARGE )
5443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      break;
5453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef LOB_SUPPORT
5463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeResults( pUserData->aResults[0]._pGetExecResult ); pUserData->aResults[0]._pGetExecResult= NULL;
5473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
5483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pUserData->aResults[0]._type == SYNCML_DM_RESULT_VALUE::Enum_Result_GetStruct ||
5503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pUserData->aResults[0]._type == SYNCML_DM_RESULT_VALUE::Enum_Result_GetStructData )
5513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
5523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = dmTreeObj.GetListNextItem(pUserData->aResults[0]._oGetStructPos);
5533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (ret_stat == SYNCML_DM_SUCCESS && pUserData->aResults[0]._oGetStructPos.psRetData ) {
5553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = pDmBuildPackage->AllocateResult(
5563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._pGetExecResult,
5573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._oGetStructPos._pbURI,
5583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._cmdRef,
5593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._oGetStructPos.psRetData,
5603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._type == SYNCML_DM_RESULT_VALUE::Enum_Result_GetStruct,
5613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              FALSE, FALSE,
5623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->aResults[0]._msgID, NULL );
5633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          delete pUserData->aResults[0]._oGetStructPos.psRetData;
5663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pUserData->aResults[0]._oGetStructPos.psRetData = NULL;
5673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if(ret_stat != SYNCML_DM_SUCCESS)
5683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      pUserData->aResults.remove(0);
5693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          continue; // write more data
5713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
5723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
5733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->aResults.remove(0);
5743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
5753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
5763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pDmBuildPackage->EndSyncmlDoc( ret_stat != SYNCML_DM_RESULTS_TOO_LARGE );
5773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pDmBuildPackage->Cleanup();
5783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return SML_ERR_OK;
5803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
5813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
5843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : VerifyProtocolVersion
5853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     :
5873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : pContent
5883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
5893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SYNCML_DM_SUCCESS or SYNCML_DM_FAIL code
5903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
5913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
5933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
5943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T
5953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyVerifyProtocolVersion( SmlSyncHdrPtr_t pContent)
5963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
5973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( dmTreeObj.IsVersion_12()  )
5983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
5993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           /* Verify that the presentation protocol is what we support. */
6003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (DmStrcmp((const char *)pContent->version->content, SYNCML_REP_PROTOCOL_VERSION_1_2) != 0)
6013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        return SYNCML_DM_FAIL;
6023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* Verify that the DM protocol is what we support. */
6033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  if (DmStrcmp((const char *)pContent->proto->content, SYNCML_DM_PROTOCOL_VERSION_1_2) != 0)
6043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         return SYNCML_DM_FAIL;
6053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
6063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else
6073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
6083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      /* Verify that the presentation protocol is what we support. */
6093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    if (DmStrcmp((const char *)pContent->version->content, SYNCML_REP_PROTOCOL_VERSION_1_1) != 0)
6103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        return SYNCML_DM_FAIL;
6113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Verify that the DM protocol is what we support. */
6123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  if (DmStrcmp((const char *)pContent->proto->content, SYNCML_DM_PROTOCOL_VERSION_1_1) != 0)
6133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        return SYNCML_DM_FAIL;
6143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
6153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       return SYNCML_DM_SUCCESS;
6163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
6193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
6213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleStartMessage
6223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : This function should analyze SyncHeader data from received DM document, and build
6243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  responding SyncML header.
6253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
6263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
6273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
6283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
6293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
6303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
6313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
6343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
6353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleStartMessage (InstanceID_t    id,
6363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    VoidPtr_t       userData,
6373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    SmlSyncHdrPtr_t pContent)
6383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
6393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat;
6413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT32             temp_max_msg_size;
6423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlMetInfMetInfPtr_t p_temp_meta_info;
6433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString           strRespUri;
6443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT16             server_session_id;
6453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
6463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Reset the synchdr_dm_stat for this message.*/
6483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    synchdr_dm_stat = SYNCML_DM_SUCCESS;
6493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Get the Session Object.*/
6513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj = pUserData->pSessionMng;
6523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmBuildPackage = pUserData->pPkgBuilder;
6533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // ignore session ID when processing XML script
6543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(pDmMgmtSessionObj->IsProcessScript() == FALSE)
6553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
6563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // Verify that this is the same session, hex string
6573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if(pDmBuildPackage->IsSessionId() == TRUE)
6583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
6593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Verify that this is the same session, hex string
6603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         server_session_id = DmStrtol((const char *)pContent->sessionID->content, NULL, 16 );
6613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
6623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       else
6633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
6643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Verify that this is the same session, dec string
6653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         server_session_id = DmStrtol((const char *)pContent->sessionID->content, NULL, 10 );
6663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
6673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (server_session_id != pDmMgmtSessionObj->GetServerSessionId())
6693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
6703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            smlFreeSyncHdr(pContent);
6713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SML_ERR_XLT_INVAL_SYNCML_DOC;
6723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
6733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
6743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = VerifyProtocolVersion(pContent);
6763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( ret_stat != SYNCML_DM_SUCCESS )
6773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
6783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            smlFreeSyncHdr(pContent);
6793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             return SML_ERR_XLT_INVAL_SYNCML_DOC;
6803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
6813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Create the BuildPackage object instance. */
6833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmBuildPackage->Init(pUserData->pSessionMng);
6843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* If respURI exists, call transport API to set the URI. */
6863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ((pContent->respURI != NULL) && (pContent->respURI->length != 0))
6873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
6883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Copy over the response URI */
6893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       strRespUri.assign((const char *)pContent->respURI->content,  pContent->respURI->length);
6903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if(strRespUri.Encode() == FALSE)
6913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            synchdr_dm_stat = SYNCML_DM_PROCESSING_ERROR;
6923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
6933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Call the MgmtSessionObj to set the response URI */
6943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       ret_stat = pDmMgmtSessionObj->SetURI(strRespUri.c_str() );
6953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if (ret_stat != SYNCML_DM_SUCCESS)
6963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
6973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            synchdr_dm_stat = SYNCML_DM_PROCESSING_ERROR;
6983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
6993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
7003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* If the MaxMsgSize is sent by the server, when it's greater than our MaxMsgSize, don't need
7023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       to do anything; if it's smaller than our MaxMsgSize, set our MaxMsgSize to the new value. */
7033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ((pContent->meta != NULL) && (pContent->meta->content != NULL))
7043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
7053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_temp_meta_info = (SmlMetInfMetInfPtr_t)pContent->meta->content;
7063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ((p_temp_meta_info->maxmsgsize != NULL) &&
7073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            (p_temp_meta_info->maxmsgsize->length != 0))
7083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
7093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            temp_max_msg_size = DmAtoi((const char *)p_temp_meta_info->maxmsgsize->content);
7103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* If the Server MaxMsgSize is smaller than what we have, reset our MaxMessageSize */
7113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (temp_max_msg_size < pDmBuildPackage->GetMaxMessageSize())
7123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
7133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pDmBuildPackage->SetMaxMessageSize(temp_max_msg_size);
7143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
7153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
7163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
7173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ((p_temp_meta_info->maxobjsize != NULL) &&
7183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                (p_temp_meta_info->maxobjsize->length != 0))
7193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
7203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                temp_max_msg_size = DmAtoi((const char *)p_temp_meta_info->maxobjsize->content);
7213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* If the Server MaxObjSize is smaller than what we have, reset our MaxObjectSize */
7223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (pDmBuildPackage->GetMaxObjectSize()==0 || temp_max_msg_size < pDmBuildPackage->GetMaxObjectSize())
7233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
7243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        pDmBuildPackage->SetMaxObjectSize(temp_max_msg_size);
7253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
7263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
7273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
7283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
7293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Build up the SyncML document header */
7313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = pDmBuildPackage->BuildStartSyncHdr(pContent,FALSE);
7323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
7333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
7343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        synchdr_dm_stat = SYNCML_DM_BAD_REQUEST;
7353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        smlFreeSyncHdr(pContent);
7363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_UNSPECIFIC;
7373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
7383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    CheckAuthorization( pContent->cred );
7403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pDmMgmtSessionObj->IsServerAuthorized())
7433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pDmMgmtSessionObj->ResetServerRetryCount();
7443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if( pDmMgmtSessionObj->IsProcessScript() )
7463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
7473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       ret_stat = pDmBuildPackage->BuildFinishSyncHdr(SYNCML_DM_CHAL_NONE);
7483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if (ret_stat != SYNCML_DM_SUCCESS)
7493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
7503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         synchdr_dm_stat = SYNCML_DM_BAD_REQUEST;
7513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         smlFreeSyncHdr(pContent);
7523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         return SML_ERR_UNSPECIFIC;
7533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
7543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
7553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* We need to check the source and target URI and set the dm_stat to the correct status before
7563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       we free the pContent.*/
7573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ((pContent->target->locURI == NULL) || (pContent->source->locURI == NULL) ||
7583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (pContent->target->locURI->length == 0) || (pContent->source->locURI->length == 0))
7593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
7603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        synchdr_dm_stat = SYNCML_DM_PERMISSION_FAILED;
7613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
7623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory */
7643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeSyncHdr(pContent);
7653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_OK;
7673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
7683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
7723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : PrepareCommandItem
7733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : Check if command should be skipped and decode item URI
7753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED :
7773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
7783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
7793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  command
7803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
7813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
7823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
7833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
7863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T
7873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyPrepareCommandItem (SmlItemPtr_t  pCommandItem,
7883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                              SYNCML_DM_USER_DATA_T   *pUserData,
7893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                              DMString & strCommandUri )
7903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
7913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        BOOLEAN res;
7933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( pUserData->IsCommandSkipped() )
7953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             return SYNCML_DM_NOT_EXECUTED;
7963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
7973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if ((pCommandItem->target == NULL) || (pCommandItem->target->locURI == NULL))
7983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              return SYNCML_DM_BAD_REQUEST;
7993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        res = strCommandUri.assign((CPCHAR)pCommandItem->target->locURI->content,
8013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                    pCommandItem->target->locURI->length);
8023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( res == FALSE )
8033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return SYNCML_DM_DEVICE_FULL;
8043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if(strCommandUri.Decode() == FALSE)
8063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              return SYNCML_DM_BAD_REQUEST;
8073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_SUCCESS;
8093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
8113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
8133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : ProcessStatus
8143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : Process status of operationd
8163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED :
8183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
8193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
8203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  command
8213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
8223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
8233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
8243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
8273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T
8293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyProcessStatus (SYNCML_DM_RET_STATUS_T dm_stat,
8303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              VoidPtr_t  userData,
8313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              UINT8  * p_CmdRefData,
8323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              SmlItemPtr_t  pCommandItem,
8333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              SYNCML_DM_COMMAND_T command)
8343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
8353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
8373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        SYNCML_DM_RET_STATUS_T ret_stat = SYNCML_DM_SUCCESS;
8383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if ( pCommandItem == NULL )
8403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   return SYNCML_DM_FAIL;
8413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        UINT8 *pTargetURL = NULL;
8443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    //Fix for Upmerge CR# LIBoo12975
8453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     if((pCommandItem->target != NULL) && (pCommandItem->target->locURI != NULL))
8463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     {
8473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if(command == SYNCML_DM_GET)
8483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
8493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        DMString strTargetEncode;
8503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        strTargetEncode = DMString((const char *)pCommandItem->target->locURI->content, (int)pCommandItem->target->locURI->length);
8513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           if(strTargetEncode.Encode() == FALSE)
8523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
8533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SYNCML_DM_FAIL;
8543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
8553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         pTargetURL  = (UINT8 *)strTargetEncode.c_str();
8563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
8573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      else
8583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
8593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pTargetURL = (UINT8 *)pCommandItem->target->locURI->content;
8603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
8613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
8623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        UINT8* pSourceURL = NULL;
8643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pSourceURL = (UINT8*)(pCommandItem->source != NULL ? pCommandItem->source->locURI->content : NULL);
8653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if( pDmMgmtSessionObj->GetInAtomicCommand() )
8673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
8683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef DM_ATOMIC_SUPPORTED
8693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             // Save the data for the status and results
8703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             if(dm_stat != SYNCML_DM_SUCCESS &&  !pUserData->rollback)
8713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  AtomicRollback(userData);
8723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
8733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData->oStatus.push_back( SYNCML_DM_STATUS_DATA_T(
8743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                     (CPCHAR)p_CmdRefData,
8753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                     dm_command_name_table[command],
8763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                     (CPCHAR)pSourceURL,
8773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                     (CPCHAR)pTargetURL,
8783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                      dm_stat) );
8793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
8813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       else
8823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
8833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              ret_stat = SaveCommandRefStatus((UINT8 *)p_CmdRefData,
8843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8 *)dm_command_name_table[command],
8853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                    pCommandItem,
8863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                    dm_stat,
8873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                    pUserData );
8883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
8903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return ret_stat;
8923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
8943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
8953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef TNDS_SUPPORT
8963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T ProcessTndsNode( SYNCML_DM_COMMAND_T command,
8973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        SmlDmTndNodeListPtr_t p_nodelist,
8983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        const DMString &parentURI,
8993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        const DMString &targetURI)
9003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
9013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T ret = SYNCML_DM_SUCCESS;
9023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMAddData oCommandData;
9033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   while ( NULL != p_nodelist && ret == SYNCML_DM_SUCCESS)
9043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
9053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      SmlDmTndNodePtr_t p_tnd_node = p_nodelist->node;
9063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if ( p_tnd_node != NULL )
9073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
9083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // node name
9093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         DMString nodeName;
9103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         nodeName = (CPCHAR)p_tnd_node->nodename->content;
9113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         KCDBG("ProcessTndsNode: node name = %s", nodeName.c_str());
9123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // node format and type
9143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         SYNCML_DM_FORMAT_T nodeFormat = SYNCML_DM_FORMAT_NODE;
9153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         DMString nodeType = "text/plain", nodeValue = "";
9163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( p_tnd_node->rtprops != NULL )
9173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             if ( p_tnd_node->rtprops->format != NULL )
9193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             {
9203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 nodeFormat = DMTree::ConvertFormatStr((CPCHAR)p_tnd_node->rtprops->format->value->content);
9213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 if ( (nodeFormat == SYNCML_DM_FORMAT_BIN) && (nodeName == DM_AAUTHDATA) )
9223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 {
9233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     nodeFormat = SYNCML_DM_FORMAT_CHR;
9243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 }
9253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             }
9263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             if ( p_tnd_node->rtprops->type != NULL )
9273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             {
9283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 if ( p_tnd_node->rtprops->type->mime != NULL )
9293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 {
9303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     nodeType = (CPCHAR)p_tnd_node->rtprops->type->mime->content;
9313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 }
9323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 else if ( p_tnd_node->rtprops->type->ddfname != NULL )
9333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 {
9343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     nodeType = (CPCHAR)p_tnd_node->rtprops->type->ddfname->content;
9353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 }
9363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             }
9373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         KCDBG("ProcessTndsNode: nodeType = %s", nodeType.c_str());
9393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         DMString nodeTargetURI;
9413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( ( nodeType == MNG_OBJID_DMACC1 ) || (nodeType == MNG_OBJID_DMACC2) )
9423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             KCDBG("ProcessTndsNode: modified Target URI");
9443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             nodeTargetURI = DM_DMACC_1_2_URI;   // TNDS is defined for 1.2 only
9453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // calculate node path
9483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         DMString nodePath;
9493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if (!nodeTargetURI.empty())
9503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nodePath = nodeTargetURI + "/";
9523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         else
9543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nodePath = parentURI + "/";
9563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( p_tnd_node->path != NULL )
9593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            DMString path = (CPCHAR)p_tnd_node->path->content;
9613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nodePath = nodeTargetURI + "/" + path + "/";
9623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         nodePath += nodeName;
9643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         KCDBG("ProcessTndsNode: node path = %s", nodePath.c_str());
9653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // node value
9673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( p_tnd_node->value != NULL )
9683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( DmStrncmp((CPCHAR)p_tnd_node->value->content, DM_INBOX, strlen(DM_INBOX)) == 0 )
9703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
9713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               nodeValue = (CPCHAR)p_tnd_node->value->content + strlen(DM_INBOX) + 1;
9723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
9733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else
9743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
9753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               nodeValue = (CPCHAR)p_tnd_node->value->content;
9763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
9773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Construct Add/Replace Data
9803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         oCommandData.clear();
9813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         oCommandData.m_oURI.assign(nodePath.c_str());
9823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         oCommandData.m_nFormat = nodeFormat;
9833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         oCommandData.m_oMimeType.assign(nodeType.c_str());
9843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         oCommandData.m_oData.assign(nodeValue.c_str());
9853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
9863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Add/Replace node in DMT
9873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( command == SYNCML_DM_ADD )
9883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            KCDBG("ProcessTndsNode: command == ADD");
9903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret = dmTreeObj.Add(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
9913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // Interior node exist
9923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( nodeFormat == SYNCML_DM_FORMAT_NODE  && ret == SYNCML_DM_TARGET_ALREADY_EXISTS )
9933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
9943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               ret = SYNCML_DM_SUCCESS;
9953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
9963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
9973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             else
9983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
9993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            KCDBG("ProcessTndsNode: command == REPLACE");
10003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret = dmTreeObj.Replace(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
10013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
10023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Process children node
10043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( ret == SYNCML_DM_SUCCESS )
10053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
10063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (nodeTargetURI.empty())
10073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
10083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                ret = ProcessTndsNode(command, p_tnd_node->nodelist, nodePath, targetURI);
10093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
10103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else
10113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
10123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                ret = ProcessTndsNode(command, p_tnd_node->nodelist, nodePath, nodeTargetURI);
10133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
10143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
10153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         else
10163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
10173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            KCDBG("Failed to handle TNDS node: %s, format: %d, value: %s, status:%d\n", nodePath.c_str(), nodeFormat, nodeValue.c_str(), ret);
10183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
10193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
10203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // Process sibling node
10223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      p_nodelist = p_nodelist->next;
10233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return ret;
10263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
10273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T ProcessTndsCommand(
10293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        SYNCML_DM_COMMAND_T command,
10303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        VoidPtr_t    userData,
10313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        DMAddData & oCommand,
10323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        DMCommandType cmdType,
10333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                        SmlItemPtr_t p_command_item)
10343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
10353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMString dataStr;
10363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( NULL == p_command_item->data || NULL == p_command_item->data->content )
10373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_UNSPECIFIC;
10393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( SML_PCDATA_EXTENSION !=  p_command_item->data->contentType &&
10413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        SML_EXT_DMTND !=  p_command_item->data->extension )
10423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_UNSPECIFIC;
10443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SmlDmTndPtr_t p_tnd_info = NULL;
10473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_tnd_info = (SmlDmTndPtr_t)p_command_item->data->content;
10483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( oCommand.m_oURI.compare(DM_INBOX) )
10493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       oCommand.m_oURI.assign(".");
10513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SYNCML_DM_RET_STATUS_T dm_stat=dmTreeObj.GetLockContextManager().ReleaseIDInternal(SYNCML_DM_LOCKID_CURRENT, SYNCML_DM_ATOMIC);
10543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( dm_stat != SYNCML_DM_SUCCESS && dm_stat != SYNCML_DM_FEATURE_NOT_SUPPORTED )
10563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     return SML_ERR_UNSPECIFIC;
10583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   /* Remember that we are in an Atomic command.*/
10613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   bool bIsInAtomic = pDmMgmtSessionObj->GetInAtomicCommand();
10623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   pDmMgmtSessionObj->SetInAtomicCommand(TRUE);
10643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SmlDmTndNodeListPtr_t p_nodelist = p_tnd_info->nodelist;
10663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   DMString path = (CPCHAR)oCommand.m_oURI.getBuffer();
10673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( oCommand.m_oURI.getBuffer()[0] == '/' )
10683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      DMString tmpPath = ".";
10703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      path = tmpPath + path;
10713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   dm_stat = ProcessTndsNode(command, p_nodelist, path.c_str(), path.c_str());
10733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( dm_stat != SYNCML_DM_SUCCESS && dm_stat != SYNCML_DM_FEATURE_NOT_SUPPORTED )
10743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
10753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      // Roll back TNDS objects
10763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      AtomicRollback(userData);
10773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
10783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   pDmMgmtSessionObj->SetInAtomicCommand(bIsInAtomic);
10803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return dm_stat;
10813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
10823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif // TNDS_SUPPORT
10833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
10853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : ProcessCommand
10863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : Process ADD?REPLACE command
10883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
10893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
10903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Add() or DMTree::Replace() function to perform ADD command on the DM tree.
10913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
10923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each ADD command performed.
10933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
10943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
10953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
10963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  command
10973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
10983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
10993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
11003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
11033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t ProcessCommand (InstanceID_t id,
11043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                              VoidPtr_t    userData,
11053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                              SmlAddPtr_t  pContent,
11063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                              SYNCML_DM_COMMAND_T command)
11073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
11083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t       sml_ret_stat = SML_ERR_OK;
11093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T dm_stat = SYNCML_DM_SUCCESS;
11103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat = SYNCML_DM_SUCCESS;
11113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemListPtr_t    p_command_list_item;
11123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemPtr_t        p_command_item;
11133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMBuffer            oCommandType;
11143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_FORMAT_T  commandFormat;
11153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMAddData oCommandData;
11173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
11183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Get the data we need to work on */
11203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_command_list_item = pContent->itemList;
11213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_command_item      = p_command_list_item->item;
11223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::ProcessCommand command=%d", command));
11243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( command == SYNCML_DM_ADD )
11263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           dm_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_ADD);
11273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   else
11283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           dm_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_REPLACE);
11293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (dm_stat != SYNCML_DM_SUCCESS)
11313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
11323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = ProcessStatus (dm_stat,
11333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
11343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
11353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_command_item,
11363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   command);
11373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memeory we allocated (p_plugin_add), and passed in (pContent). */
11383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
11393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           return SML_ERR_OK;
11403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
11413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
11433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           * any management commands */
11443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Fill in meta data when meta data info is defined outside of the ITEM in the receiving
11463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       package.
11473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if meta data is not set, default format "chr" and type "text/plain" will be filled. */
11483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    dm_stat = SetMetaData(pContent->meta, oCommandType, &commandFormat);
11493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( dm_stat != SYNCML_DM_SUCCESS )
11503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
11513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
11523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_UNSPECIFIC;
11533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
11543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Make sure we are not in an atomic and the Server is authenticated before performing any
11563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * DM commands.*/
11573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pDmMgmtSessionObj->IsAuthorized())
11583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
11593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Loop on every ADD ITEM */
11603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        while (p_command_item != NULL)
11613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
11623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            oCommandData.clear();
11633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // perform operation
11653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            while ( TRUE )
11673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
11683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    DMString tempURI;
11693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                dm_stat = PrepareCommandItem (p_command_item,
11703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                    pUserData,
11713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                    tempURI);
11723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( dm_stat != SYNCML_DM_SUCCESS )
11733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          break;
11743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              oCommandData.m_oURI.assign(tempURI);
11763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if(oCommandData.m_oURI.getBuffer() == NULL)
11783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
11793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    dm_stat = SYNCML_DM_DEVICE_FULL;
11803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    break;
11813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
11823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              /* Set the meta data for ADD/REPLACE command if it's defined for each ITEM */
11843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
11853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if (p_command_item->meta != NULL)
11863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
11873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 dm_stat = SetMetaData(p_command_item->meta, oCommandData.m_oMimeType, &oCommandData.m_nFormat);
11883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 if ( dm_stat != SYNCML_DM_SUCCESS )
11893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      break;
11903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
11913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              else
11923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
11933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* This particular item does not have meta data, so we need to use the meta data
11943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 * from outside the command.
11953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 */
11963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                oCommandData.m_oMimeType = oCommandType;
11973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( oCommandData.getType() == NULL )
11983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
11993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     dm_stat = SYNCML_DM_DEVICE_FULL;
12003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     break;
12013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
12023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                oCommandData.m_nFormat = commandFormat;
12033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
12043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef TNDS_SUPPORT
12063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              /* Handle TNDS object */
12073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if ( oCommandData.m_oMimeType.compare(SYNCML_CONTENT_TYPE_DM_TNDS_XML, strlen(SYNCML_CONTENT_TYPE_DM_TNDS_XML)) ||
12083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   oCommandData.m_oMimeType.compare(SYNCML_CONTENT_TYPE_DM_TNDS_WBXML, strlen(SYNCML_CONTENT_TYPE_DM_TNDS_WBXML)) )
12093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
12103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  dm_stat = ProcessTndsCommand( command,
12113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                userData,
12123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                oCommandData,
12133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                command == SYNCML_DM_ADD ?
12143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                           DM_COMMAND_ADD :
12153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                           DM_COMMAND_REPLACE,
12163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                p_command_item);
12173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
12183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              else
12193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
12203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif // TNDS_SUPPORT
12213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef LOB_SUPPORT
12233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if(pDmBuildPackage->IsProcessingLargeObject())
12253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        {
12263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::ProcessCommand processing lob\n"));
12273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   if ( command == SYNCML_DM_ADD )
12283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat = pDmBuildPackage->LargeObjectRecvNextChunk(oCommandData,
12293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                   DM_COMMAND_ADD,
12303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                   p_command_item);
12313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                            else
12323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                   dm_stat = pDmBuildPackage->LargeObjectRecvNextChunk(oCommandData,
12333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                   DM_COMMAND_REPLACE,
12343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                   p_command_item);
12353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        }
12383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else
12393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        {
12403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     XPL_LOG_DM_TMN_Debug(("not processing large obj\n"));
12413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       if ( command == SYNCML_DM_ADD )
12423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat = pDmBuildPackage->LargeObjectRecvFirstChunk(oCommandData,
12433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                           DM_COMMAND_ADD,
12443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                           p_command_item);
12453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 else
12463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat = pDmBuildPackage->LargeObjectRecvFirstChunk(oCommandData,
12473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                           DM_COMMAND_REPLACE,
12483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                                                                           p_command_item);
12493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        }
12513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else // LOB_SUPPORT
12523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               /* Call TNM module to perform ADD command */
12543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef DM_ATOMIC_SUPPORTED
12553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               if ( command == SYNCML_DM_ADD ) {
12563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                XPL_LOG_DM_TMN_Debug(("about to add atomic supported\n"));
12573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       dm_stat = dmTreeObj.Add(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
12583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                XPL_LOG_DM_TMN_Debug(("add atomic supported dm_stat=%d\n", dm_stat));
12593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
12603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else
12613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        dm_stat = dmTreeObj.Replace(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
12623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else // DM_ATOMIC_SUPPORTED
12633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               if ( pDmMgmtSessionObj->GetInAtomicCommand() )
12643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    dm_stat =  SYNCML_DM_COMMAND_FAILED;
12653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               else
12663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               {
12673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     if ( command == SYNCML_DM_ADD ) {
12683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     XPL_LOG_DM_TMN_Debug(("about to add atomic not supported\n"));
12693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat = dmTreeObj.Add(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
12703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         XPL_LOG_DM_TMN_Debug(("add atomic not supported dm_stat=%d\n", dm_stat));
12713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               }
12723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        else
12733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat = dmTreeObj.Replace(oCommandData,SYNCML_DM_REQUEST_TYPE_SERVER);
12743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               }
12753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif // DM_ATOMIC_SUPPORTED
12763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif // LOB_SUPPORT
12773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef TNDS_SUPPORT
12793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
12803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif // TNDS_SUPPORT
12813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               SequenceStatus(userData, dm_stat);
12833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               break;
12853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
12863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::ProcessCommand dm_stat=%d, command=%d\n",dm_stat, command));
12883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
12893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = ProcessStatus (dm_stat,
12903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
12913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
12923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_command_item,
12933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   command);
12943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           if (ret_stat != SYNCML_DM_SUCCESS)
12953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
12963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
12973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  break;
12983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
12993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           if (p_command_list_item->next != NULL)
13013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
13023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       p_command_list_item = p_command_list_item->next;
13033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_command_item = p_command_list_item->item;
13043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
13053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           else
13063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 p_command_item = NULL;
13073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } /* End of while */
13083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    } /* !inAtomicCommand && dmSecState */
13093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else /*  dmSecState not authenticated */
13103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
13113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Call the toolkit to construct the STATUS for ADD command */
13123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        ret_stat = SaveCommandRefStatus((UINT8 *)pContent->cmdID->content,
13133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 (UINT8 *)dm_command_name_table[command],
13143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 p_command_item,
13153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 pDmMgmtSessionObj->GetNotAuthorizedStatus(),
13163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                 pUserData );
13173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if (ret_stat != SYNCML_DM_SUCCESS)
13183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               sml_ret_stat = SML_ERR_UNSPECIFIC;
13193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
13203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memeory we allocated (p_plugin_add), and passed in (pContent). */
13213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
13223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
13243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
13253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
13293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleAddCommand
13303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the ADD element is processed from the received message, this callback
13323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
13333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
13353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Add() function to perform ADD command on the DM tree.
13363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
13373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each ADD command performed.
13383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
13393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
13403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
13413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
13423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
13433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
13443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
13473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t HandleAddCommand (InstanceID_t id, VoidPtr_t    userData, SmlAddPtr_t  pContent)
13483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
13493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleAdd enter"));
13503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return ProcessCommand(id, userData, pContent,SYNCML_DM_ADD);
13513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
13523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
13543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleCopyCommand
13553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the COPY element is processed from the received message, this callback
13573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
13583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
13603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Set DM status as SYNCML_DM_FEATURE_NOT_SUPPORTED.
13613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
13623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each COPY command performed.
13633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
13643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
13653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
13663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
13673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
13683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
13693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
13723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
13733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleCopyCommand (InstanceID_t  id,
13743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   VoidPtr_t     userData,
13753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   SmlCopyPtr_t  pContent)
13763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
13773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t                  sml_ret_stat = SML_ERR_OK;
13783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat;
13793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
13803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
13823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           * any management commands */
13833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Call the toolkit to construct the STATUS for COPY command */
13853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = SaveStatus(
13863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (UINT8 *)pContent->cmdID->content,
13873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        (UINT8 *)dm_command_name_table[SYNCML_DM_COPY],
13883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        NULL,
13893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        NULL,
13903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        SYNCML_DM_FEATURE_NOT_SUPPORTED,
13913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        NULL,
13923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pUserData);
13933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
13953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
13963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        sml_ret_stat = SML_ERR_UNSPECIFIC;
13973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
13983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
13993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory of pContent. */
14003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
14013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
14033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
14043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
14073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleDeleteCommand
14083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the DELETE element is processed from the received message, this callback
14103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
14113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
14133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Delete() function to perform DELETE command on the DM tree.
14143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
14153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each DELETE command performed.
14163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
14173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
14183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
14193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
14203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
14213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
14223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
14253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
14263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleDeleteCommand (InstanceID_t   id,
14273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     VoidPtr_t      userData,
14283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     SmlDeletePtr_t pContent)
14293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
14303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t   sml_ret_stat = SML_ERR_OK;
14313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T     dm_stat = 0;
14323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat = 0;
14333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
14343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemListPtr_t p_delete_list_item;
14363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemPtr_t     p_delete_item;
14373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_delete_list_item = pContent->itemList;
14393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_delete_item      = p_delete_list_item->item;
14403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleDelete enter"));
14423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           ret_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_REPLACE);
14443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
14463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
14473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          ret_stat = ProcessStatus (dm_stat,
14483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
14493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
14503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_delete_item,
14513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   SYNCML_DM_DELETE);
14523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory of pContent and p_target_uri. */
14533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
14543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return SML_ERR_OK;
14553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
14563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
14583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           * any management commands */
14593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Make sure we are not in an atomic and the Server is authenticated before performing any
14613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * DM commands.*/
14623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pDmMgmtSessionObj->IsAuthorized())
14633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
14643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Loop on each DELETE item */
14653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        while (p_delete_item != NULL) {
14663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          // perform operation
14693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          while ( true )
14703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
14713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              DMString strDeleteUri;
14723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                dm_stat = PrepareCommandItem (p_delete_item,
14733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                    pUserData,
14743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                    strDeleteUri);
14753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( dm_stat != SYNCML_DM_SUCCESS )
14763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          break;
14773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleDelete uri=%s\n", strDeleteUri.c_str()));
14793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef DM_ATOMIC_SUPPORTED
14813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = dmTreeObj.Delete (strDeleteUri.c_str(),SYNCML_DM_REQUEST_TYPE_SERVER );
14823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#else
14833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               if ( pDmMgmtSessionObj->GetInAtomicCommand() )
14843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    dm_stat =  SYNCML_DM_COMMAND_FAILED;
14853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               else
14863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    dm_stat = dmTreeObj.Delete (strDeleteUri.c_str(),SYNCML_DM_REQUEST_TYPE_SERVER );
14873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
14883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               SequenceStatus(userData, dm_stat);
14893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               break;
14903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
14913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
14923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          ret_stat = ProcessStatus (dm_stat,
14933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
14943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
14953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_delete_item,
14963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   SYNCML_DM_DELETE);
14973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if (ret_stat != SYNCML_DM_SUCCESS)
14983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
14993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
15003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  break;
15013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
15023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Move to the next item on the list */
15043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (p_delete_list_item->next != NULL) {
15053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_delete_list_item = p_delete_list_item->next;
15063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_delete_item = p_delete_list_item->item;
15073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
15083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else
15093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  p_delete_item = NULL;
15103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } /* End of while */
15113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    } /* !inAtomicCommand && dmSecState */
15123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else /* dmSecState not authenticated */
15133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
15143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat =  SaveCommandRefStatus(
15153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      (UINT8 *)pContent->cmdID->content,
15163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      (UINT8 *)dm_command_name_table[SYNCML_DM_DELETE],
15173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      p_delete_item,
15183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      pDmMgmtSessionObj->GetNotAuthorizedStatus(),
15193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      pUserData );
15203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (ret_stat != SYNCML_DM_SUCCESS)
15213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
15223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                sml_ret_stat = SML_ERR_UNSPECIFIC;
15233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
15243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
15253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory of pContent and p_target_uri. */
15273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeGeneric((SmlGenericCmdPtr_t)pContent);
15283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
15303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
15313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
15343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : ProcessAlertCommand
15353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the ALERT element is processed from the received message, this callback
15373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
15383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
15403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Process alert via XPL.
15413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each ALERT command performed.
15423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
15433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
15443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
15453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
15463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
15473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
15483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
15513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambystatic SYNCML_DM_RET_STATUS_T
15523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyProcessAlertCommand (VoidPtr_t   userData,
15533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    SmlAlertPtr_t  pContent,
15543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    SYNCML_DM_Alert * pAlert,
15553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    DMStringVector   &  responses)
15563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
15573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T  *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
15583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T dm_stat = SYNCML_DM_SUCCESS;
15593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pAlert == NULL )
15613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SYNCML_DM_FAIL;
15623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( pUserData->IsCommandSkipped() || pDmMgmtSessionObj->IsSessionAborted() )
15643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         return SYNCML_DM_NOT_EXECUTED;
15653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pAlert->parse(pContent);
15673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    dm_stat = pAlert->show();
15683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    switch ( dm_stat )
15693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
15703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case SYNCML_DM_SESSION_CANCELED:
15713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pDmMgmtSessionObj->SetSessionAborted();
15723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SYNCML_DM_SUCCESS;
15733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case SYNCML_DM_SUCCESS:
15753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             dm_stat = pAlert->processResponse(responses,&pUserData->alertState);
15763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             break;
15773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        default:
15793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pUserData->alertState =  SYNCML_DM_ALERT_CANCEL;
15803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            break;
15813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
15823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return dm_stat;
15843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
15863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
15893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleAlertCommand
15903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the ALERT element is processed from the received message, this callback
15923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
15933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
15943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
15953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Check the ALERT value, set the DM status accordingly.
15963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
15973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each ALERT command performed.
15983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
15993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
16003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
16013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
16023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
16033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
16043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
16073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
16083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleAlertCommand (InstanceID_t   id,
16093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    VoidPtr_t      userData,
16103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    SmlAlertPtr_t  pContent)
16113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
16123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  Ret_t              sml_ret_stat = SML_ERR_OK;
16133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T  ret_stat = 0;
16143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T dm_stat = 0;
16153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
16163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  DMStringVector    responses;         // holds all the user responses
16173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
16193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         * any management commands */
16203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pDmMgmtSessionObj->IsAuthorized())
16223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
16233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT32  alert_code_value;
16253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Get the data we need to work on */
16273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    alert_code_value = DmAtoi((const char *)pContent->data->content);
16293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Please refer syncml_dm_represent_v111_20021002.pdf section 8 */
16313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    switch (alert_code_value)
16323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
16333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_SERVER_INITIATED_MGMT:
16343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_CLIENT_INITIATED_MGMT:
16353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_NEXT_MESSAGE:
16363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dm_stat = SYNCML_DM_SUCCESS;
16373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            break;
16383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_SESSION_ABORT:
16403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pDmMgmtSessionObj->SetSessionAborted();
16413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dm_stat = SYNCML_DM_SUCCESS;
16423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            break;
16433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // handle user interaction alerts
16453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_DISPLAY:
16463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
16473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( !VerifyAlertItems(pContent) )
16483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
16493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               XPL_LOG_DM_TMN_Debug(("HandleAlertCommand, alert command items incorrect."));
16503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = SYNCML_DM_INCOMPLETE_COMMAND;
16513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else  {
16533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               SYNCML_DM_DisplayAlert displayAlert;
16543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = ProcessAlertCommand(userData,pContent,&displayAlert,responses);
16553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
16573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        break;
16583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_CONTINUE_OR_ABORT:
16603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
16613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( !VerifyAlertItems(pContent) )
16623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
16633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               XPL_LOG_DM_TMN_Debug(("HandleAlertCommand, alert command items incorrect."));
16643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = SYNCML_DM_INCOMPLETE_COMMAND;
16653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else  {
16673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               SYNCML_DM_ConfirmAlert confirmAlert;
16683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = ProcessAlertCommand(userData,pContent,&confirmAlert,responses);
16693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
16713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        break;
16723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_TEXT_INPUT:
16743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
16753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( !VerifyAlertItems(pContent) )
16763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
16773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               XPL_LOG_DM_TMN_Debug(("HandleAlertCommand, alert command items incorrect."));
16783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = SYNCML_DM_INCOMPLETE_COMMAND;
16793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            else  {
16813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               SYNCML_DM_TextInputAlert textInputAlert;
16823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               dm_stat = ProcessAlertCommand(userData,pContent,&textInputAlert,responses);
16833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
16843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
16853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        break;
16863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_SINGLE_CHOICE:
16883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
16893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            SYNCML_DM_SingleChoiceAlert singleChoiceAlert;
16903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dm_stat = ProcessAlertCommand(userData,pContent,&singleChoiceAlert,responses);
16913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
16923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        break;
16933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
16943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        case DM_ALERT_MULTIPLE_CHOICE:
16953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
16963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            SYNCML_DM_MultipleChoiceAlert multipleChoiceAlert;
16973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dm_stat = ProcessAlertCommand(userData,pContent,&multipleChoiceAlert,responses);
16983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
16993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        break;
17003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        default:
17023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dm_stat = SYNCML_DM_FEATURE_NOT_SUPPORTED; /* Optional feature not supported */
17033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            break;
17043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
17053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(pDmMgmtSessionObj->GetInAtomicCommand())
17073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
17083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifdef DM_ATOMIC_SUPPORTED
17093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // Save the data for the status and results
17103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if ( dm_stat != SYNCML_DM_SUCCESS && dm_stat != SYNCML_DM_FEATURE_NOT_SUPPORTED )
17113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          AtomicRollback(userData);
17123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif
17133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      pUserData->oStatus.push_back(
17143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      SYNCML_DM_STATUS_DATA_T((const char*)pContent->cmdID->content,
17153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         dm_command_name_table[SYNCML_DM_ALERT],
17163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         NULL,
17173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         NULL,
17183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         dm_stat,
17193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                         &responses) );
17203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
17213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
17223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
17233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      ret_stat = SaveStatus((UINT8 *)pContent->cmdID->content,
17243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               (UINT8 *)dm_command_name_table[SYNCML_DM_ALERT],
17253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                NULL,
17263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                NULL,
17273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                dm_stat,
17283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                &responses,
17293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                pUserData );
17303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (ret_stat != SYNCML_DM_SUCCESS)
17313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
17323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        sml_ret_stat = SML_ERR_UNSPECIFIC;
17333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
17343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
17353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
17363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
17373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
17383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = SaveStatus(
17403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              (UINT8 *)pContent->cmdID->content,
17413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              (UINT8 *)dm_command_name_table[SYNCML_DM_ALERT],
17423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              NULL,
17433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              NULL,
17443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pDmMgmtSessionObj->GetNotAuthorizedStatus(),
17453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              &responses,
17463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              pUserData );
17473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
17483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      sml_ret_stat = SML_ERR_UNSPECIFIC;
17493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
17503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  /* Free the memory of the pContent */
17523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlFreeAlert(pContent);
17533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return sml_ret_stat;
17553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
17563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
17593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleExecCommand
17603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the EXEC element is processed from the received message, this callback
17623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
17633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
17653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Exec() function to perform EXEC command on the DM tree.
17663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
17673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each EXEC command performed.
17683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
17693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
17703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
17713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
17723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
17733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
17743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
17773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
17783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleExecCommand (InstanceID_t  id,
17793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   VoidPtr_t     userData,
17803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   SmlExecPtr_t  pContent)
17813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
17823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T dm_stat=SYNCML_DM_SUCCESS;
17833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T  *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
17843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat = 0;
17863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_URI_RESULT_T dm_uri_result = 0;
17873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemPtr_t p_exec_item;
17883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString strExecUri;
17893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString strOriExecUri;
17903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString execResults;
17923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString execData;
17933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_exec_item = pContent->item;
17953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           ret_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_EXEC);
17973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
17983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
17993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
18003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       smlFreeExec((SmlExecPtr_t)pContent);
18013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_OK;
18023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
18033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
18053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           * any management commands */
18063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Make sure we are not in an atomic and the Server is authenticated before performing any
18083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * DM commands.*/
18093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pDmMgmtSessionObj->GetInAtomicCommand() == FALSE &&
18103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pDmMgmtSessionObj->IsAuthorized())
18113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
18123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if ((p_exec_item->target == NULL) || (p_exec_item->target->locURI == NULL))
18143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
18153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           smlFreeExec((SmlExecPtr_t)pContent);
18163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SML_ERR_UNSPECIFIC;
18173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
18183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       strExecUri.assign((CPCHAR)p_exec_item->target->locURI->content,p_exec_item->target->locURI->length);
18203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       strOriExecUri = strExecUri;
18223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if(strExecUri.Decode() == FALSE)
18233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
18243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         smlFreeExec((SmlExecPtr_t)pContent);
18253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          return SML_ERR_UNSPECIFIC;
18263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
18273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Fill the data for p_exec_data */
18283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if (p_exec_item->data != NULL && p_exec_item->data->length > 0)
18293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
18303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            execData.assign((CPCHAR)p_exec_item->data->content,p_exec_item->data->length);
18313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( execData == NULL )
18323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
18333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               smlFreeExec((SmlExecPtr_t)pContent);
18343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby               return SML_ERR_UNSPECIFIC;
18353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
18363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
18373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       const char* szCorrelator = NULL;
18393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( pContent->correlator && pContent->correlator->contentType == SML_PCDATA_STRING )
18413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            szCorrelator = (const char*)pContent->correlator->content;
18423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       /* Validate the URI */
18453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       dm_uri_result = dmTreeObj.URIValidateAndParse(strExecUri);
18463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       switch (dm_uri_result)
18473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       {
18483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           case SYNCML_DM_COMMAND_ON_UNKNOWN_PROPERTY:
18493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           case SYNCML_DM_COMMAND_INVALID_URI:
18503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           case SYNCML_DM_COMMAND_URI_TOO_LONG:
18513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             dm_stat = SYNCML_DM_BAD_REQUEST;
18523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             break;
18533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           default:
18553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             // schen link error, code is not there
18573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             // dm_stat = SYNCML_DM_FEATURE_NOT_SUPPORTED;
18583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             dm_stat = dmTreeObj.Exec(strExecUri.c_str(), execData, execResults, szCorrelator);
18593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             SequenceStatus(userData, dm_stat);
18603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             break;
18613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       }
18623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
18643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
18653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           if (pDmMgmtSessionObj->GetInAtomicCommand())
18663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
18673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                AtomicRollback(userData);
18683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* We don't apply commands within the Atomic.*/
18693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                dm_stat = SYNCML_DM_COMMAND_FAILED;
18703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
18713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          else
18723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                dm_stat = pDmMgmtSessionObj->GetNotAuthorizedStatus();
18733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8  *p_TargetRefData = NULL;
18753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(p_exec_item->target != NULL && p_exec_item->target->locURI != NULL){
18763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       p_TargetRefData = (UINT8 *)p_exec_item->target->locURI->content;
18773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
18783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
18793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (0 == DmStrcmp((char *)p_TargetRefData, FDR_URI))
18803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
18813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       /* Build tha status with item tag for the EXEC command for FDR*/
18823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       ret_stat = SaveStatus((UINT8 *)pContent->cmdID->content,
18833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      (UINT8 *)dm_command_name_table[SYNCML_DM_EXEC],
18843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      NULL,
18853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      p_TargetRefData,
18863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      dm_stat,
18873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      NULL,
18883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      pUserData );
18893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
18903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else
18913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
18923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       /* Build tha status for the EXEC command */
18933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       ret_stat = SaveStatus((UINT8 *)pContent->cmdID->content,
18943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      (UINT8 *)dm_command_name_table[SYNCML_DM_EXEC],
18953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      NULL,
18963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      NULL,
18973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      dm_stat,
18983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      NULL,
18993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      pUserData );
19003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
19023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (dm_stat == SYNCML_DM_SUCCESS && execResults.length() )
19043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
19053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleExecCommand, inside success chk\n"));
19063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         SmlResultsPtr_t  p_results=NULL;      /* To hold RESULTS structure */
19073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         SmlItemPtr_t     p_results_item;      /* To hold GET results item */
19083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         SmlItemListPtr_t p_results_list_item; /* To hold GET results list */
19093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         // Allocate the memory for p_results
19113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         p_results = smlAllocResults();
19123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         if ( !p_results )
19143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         {
19153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            smlFreeExec((SmlExecPtr_t)pContent);
19163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            return SML_ERR_UNSPECIFIC;
19173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         }
19183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleExecCommand, before buildpcdata\n"));
19203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         pDmBuildPackage->BuildPcData(p_results->cmdRef,
19213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            SML_PCDATA_STRING,
19223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            SML_EXT_UNDEFINED,
19233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            DmStrlen((char *)pContent->cmdID->content),
19243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            (UINT8*)pContent->cmdID->content);
19253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         /* Fill in item fileds */
19283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         p_results_list_item = p_results->itemList;
19293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         p_results_item = p_results_list_item->item;
19313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         ret_stat = SetExecResultsData(  p_results_item, strOriExecUri, execResults);
19323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         pUserData->aResults.push_back(
19333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            SYNCML_DM_RESULT_VALUE( SYNCML_DM_RESULT_VALUE::Enum_Result_Exec, p_results,
19343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            SYNCML_DM_GET_ON_LIST_RET_DATA_T(), (CPCHAR)pContent->cmdID->content,
19353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            (const char*)pDmBuildPackage->GetMsgRef()) );
19363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
19373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
19403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
19413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        smlFreeExec((SmlExecPtr_t)pContent);
19423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_UNSPECIFIC;
19433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
19443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeExec((SmlExecPtr_t)pContent);
19463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    XPL_LOG_DM_TMN_Debug(("dm_ua_handlecommand::HandleExecCommand leaving\n"));
19483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_OK;
19493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
19503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
19533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleGetCommand
19543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the GET element is processed from the received message, this callback
19563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
19573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
19593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Get() function to perform GET command on the DM tree.
19603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call BuildResultsCommand() to build the results from GET command.
19613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  3) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
19623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each GET command performed.
19633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
19643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
19653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
19663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
19673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
19683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
19693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
19723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
19733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleGetCommand (InstanceID_t id,
19743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  VoidPtr_t    userData,
19753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  SmlGetPtr_t  pContent)
19763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
19773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMString strTargetUri;
19783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t sml_ret_stat = SML_ERR_OK;
19793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T dm_stat = 0;
19803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat = 0;
19813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMGetData getData;
19823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* p_get_struct_data is OUTPUT parameter of dmTreeObj.InitListAndGetListFirstItem call. We
19843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       need to initialize it as NULL before we pass it to the call, p_get_struct_data could not
19853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       be set if the return is not SUCCESS. */
19863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_GET_ON_LIST_RET_DATA_T p_get_struct_data;
19883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_URI_RESULT_T dm_uri_result = 0;
19893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
19903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemPtr_t     p_get_item;
19923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlItemListPtr_t p_get_list_item;
19933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount();
19953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
19963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Point the GET item to the correct spot */
19973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_get_list_item = pContent->itemList;
19983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    p_get_item      = p_get_list_item->item;
19993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   dm_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_GET);
20013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (dm_stat != SYNCML_DM_SUCCESS)
20023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
20033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = ProcessStatus (dm_stat,
20043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
20053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
20063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_get_item,
20073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   SYNCML_DM_GET);
20083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory */
20093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          smlFreeGetPut(pContent);
20103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_OK;
20113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
20123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Make sure we are not in an atomic and the Server is authenticated before performing any
20143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     * DM commands.*/
20153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (pDmMgmtSessionObj->GetInAtomicCommand() == FALSE &&
20163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         pDmMgmtSessionObj->IsAuthorized())
20173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
20183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      while (p_get_item != NULL)
20203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {                              /* Loop through each GET ITEM */
20213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          getData.clear();
20233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          while ( true )
20243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
20253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              DMString strTargetUri;
20263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::HandleGet, uri=%s\n", strTargetUri.c_str()));
20273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                dm_stat = PrepareCommandItem (p_get_item,
20283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                       pUserData,
20293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                       strTargetUri);
20303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( dm_stat != SYNCML_DM_SUCCESS )
20313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          break;
20323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  /* Validete the URI */
20343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              dm_uri_result = dmTreeObj.URIValidateAndParse((char*)strTargetUri.c_str());
20353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              switch (dm_uri_result) {
20363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_INVALID_URI:
20373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_UNKNOWN_PROPERTY:
20383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_URI_TOO_LONG:
20393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       dm_stat = SYNCML_DM_BAD_REQUEST;
20403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       break;
20413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_NODE:
20433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_ACL_PROPERTY:
20443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_FORMAT_PROPERTY:
20453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_NAME_PROPERTY:
20463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_SIZE_PROPERTY:
20473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_TYPE_PROPERTY:
20483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_TITLE_PROPERTY:
20493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_TSTAMP_PROPERTY:
20503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_ON_VERNO_PROPERTY:
20513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       dm_stat = dmTreeObj.Get(strTargetUri.c_str(), getData,SYNCML_DM_REQUEST_TYPE_SERVER);
20523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::HandleGet, dmTreeObj.Get=%d", dm_stat));
20533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    if (dm_stat == SYNCML_DM_SUCCESS)
20543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       {
20553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         dm_stat = SaveResult( strTargetUri, (const char *)pContent->cmdID->content,
20563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               &getData, FALSE, FALSE,
20573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               (dm_uri_result == SYNCML_DM_COMMAND_ON_NODE ? FALSE : TRUE),
20583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               pUserData, SYNCML_DM_RESULT_VALUE::Enum_Result_Get,
20593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               p_get_struct_data );
20603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       }
20613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       break;
20623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_LIST_STRUCT:
20643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_LIST_STRUCTDATA:
20653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    case SYNCML_DM_COMMAND_LIST_TNDS:
20663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       /* Call TNM to get the first item on the Get Struct results list */
20673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      {
20683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       DMGetData * pGetData = NULL;
20693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       DMString strTargetUriNoQuery(strTargetUri);
20703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       // remove query from URI
20723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       char *psQPos = DmStrstr(strTargetUri, SYNCML_DM_LIST);
20733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       if (psQPos != NULL)
20743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       {
20753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           strTargetUriNoQuery.assign(strTargetUri.c_str(), psQPos - strTargetUri.c_str());
20763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       }
20773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       dm_stat = dmTreeObj.InitListAndGetListFirstItem(strTargetUriNoQuery,
20793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                SYNCML_DM_GET_ON_LIST_STRUCT,
20803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                                p_get_struct_data);
20813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
20823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       if (dm_stat == SYNCML_DM_SUCCESS)
20833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       {
20843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           UINT8 type = 0;
20853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           if ( dm_uri_result == SYNCML_DM_COMMAND_LIST_STRUCT )
20863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           {
20873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               type = SYNCML_DM_RESULT_VALUE::Enum_Result_GetStruct;
20883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           }
20893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           else if ( dm_uri_result == SYNCML_DM_COMMAND_LIST_STRUCTDATA )
20903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           {
20913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               type = SYNCML_DM_RESULT_VALUE::Enum_Result_GetStructData;
20923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           }
20933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           else if ( dm_uri_result == SYNCML_DM_COMMAND_LIST_TNDS )
20943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           {
20953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               type = SYNCML_DM_RESULT_VALUE::Enum_Result_GetTnds;
20963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           }
20973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           else
20983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           {
20993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               dm_stat = SYNCML_DM_BAD_REQUEST;
21003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                               break;
21013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           }
21023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           pGetData = p_get_struct_data.psRetData; p_get_struct_data.psRetData = NULL;
21033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           dm_stat = SaveResult( strTargetUriNoQuery.c_str(), (CPCHAR)pContent->cmdID->content,
21043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 pGetData,
21053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 dm_uri_result == SYNCML_DM_COMMAND_LIST_STRUCT,
21063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 type != SYNCML_DM_RESULT_VALUE::Enum_Result_GetTnds,
21073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 FALSE,
21083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 pUserData,
21093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 type,
21103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                 p_get_struct_data);
21113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           if ( pGetData )
21123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              delete pGetData;
21133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       }
21143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       else
21153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           /* Free the memory of p_passedin_get_struct_data */
21163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           pDmBuildPackage->FreeGetStructData(p_get_struct_data);
21173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       }
21183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       break;
21193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    default:
21203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       dm_stat = SYNCML_DM_FEATURE_NOT_SUPPORTED;
21213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       break;
21223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }  // end switch
21243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              break;
21253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
21273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           ret_stat = ProcessStatus (dm_stat,
21283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   userData,
21293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   (UINT8*)pContent->cmdID->content,
21303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   p_get_item,
21313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                   SYNCML_DM_GET);
21323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           if (ret_stat != SYNCML_DM_SUCCESS)
21333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
21343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
21353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  break;
21363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           }
21373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* Move to the next item */
21393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if (p_get_list_item->next != NULL)
21403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           {
21413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      p_get_list_item = p_get_list_item->next;
21423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                p_get_item = p_get_list_item->item;
21433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
21443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          else
21453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                p_get_item = NULL;
21463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      } /* End of while */
21473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
21493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   else
21503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   { /* !inAtomicCommand && dmSecState */  /* inAtomicCommand == TRUE || dmSecState not authenticated */
21513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (pDmMgmtSessionObj->GetInAtomicCommand() == TRUE)
21533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      {
21543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         AtomicRollback(userData);
21553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         dm_stat = SYNCML_DM_COMMAND_FAILED; /* We don't apply commands within the Atomic.*/
21563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
21573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      else
21583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          dm_stat = pDmMgmtSessionObj->GetNotAuthorizedStatus();
21593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      ret_stat = SaveCommandRefStatus(
21613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                               (UINT8 *)pContent->cmdID->content,
21623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           (UINT8 *)dm_command_name_table[SYNCML_DM_GET],
21633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            p_get_item,
21643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            dm_stat,
21653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                            pUserData);
21663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if (ret_stat != SYNCML_DM_SUCCESS)
21673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             sml_ret_stat = SML_ERR_UNSPECIFIC;
21683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
21693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory */
21713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlFreeGetPut(pContent);
21723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pContent = NULL;
21733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return (sml_ret_stat);
21753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
21763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
21793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleReplaceCommand
21803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the REPLACE element is processed from the received message, this callback
21823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
21833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
21853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Call DMTree::Replace() function to perform REPLACE command on the DM
21863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     tree.
21873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call SYNCML_DM_BuildPackage::BuildStatus() to build up the staus command with
21883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     return status for each REPLACE command performed.
21893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
21903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
21913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
21923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
21933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
21943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
21953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
21973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
21983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
21993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleReplaceCommand (InstanceID_t    id,
22003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      VoidPtr_t       userData,
22013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                      SmlReplacePtr_t pContent)
22023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
22033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return ProcessCommand(id, userData, pContent,SYNCML_DM_REPLACE);
22043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
22053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
22083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleStartSequenceCommand
22093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the SEQUENCE element is processed from the received message, this callback
22113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
22123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
22143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
22163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
22173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
22183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
22193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
22203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
22213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
22243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
22253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleStartSequenceCommand(InstanceID_t id,
22263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           VoidPtr_t    userData,
22273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           SmlSequencePtr_t  pContent)
22283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
22293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t                  sml_ret_stat = SML_ERR_OK;
22303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T ret_stat;
22313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
22323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T     dm_stat = SYNCML_DM_SUCCESS;
22333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          ret_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_SEQUENCE_START);
22353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
22373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
22383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory of pContent. Toolkit use same API to free the memory for atomic and
22393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       sequence */
22403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeAtomic((SmlAtomicPtr_t)pContent);
22413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_OK;
22423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
22433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  pUserData->StartSequence();
22443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pDmMgmtSessionObj->IsAuthorized())
22463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        dm_stat = SYNCML_DM_SUCCESS;
22473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
22483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        dm_stat = pDmMgmtSessionObj->GetNotAuthorizedStatus();
22493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->IncCommandCount(); /* This variable is used to check if syncml document has
22513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                           * any management commands */
22523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Call the toolkit to construct the STATUS for SEQUENCE command */
22543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ret_stat = SaveStatus(
22553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          (UINT8 *)pContent->cmdID->content,
22563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          (UINT8 *)dm_command_name_table[SYNCML_DM_SEQUENCE],
22573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
22583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
22593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           dm_stat,
22603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
22613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           pUserData );
22623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (ret_stat != SYNCML_DM_SUCCESS)
22643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
22653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        sml_ret_stat = SML_ERR_UNSPECIFIC;
22663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
22673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory of pContent. Toolkit use same API to free the memory for atomic and
22693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       sequence */
22703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeAtomic((SmlAtomicPtr_t)pContent);
22713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
22733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
22743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
22763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleEndSequenceCommand
22773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the SEQUENCE element is processed from the received message, this callback
22793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
22803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
22823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
22843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
22853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
22863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
22873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
22883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
22913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
22923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleEndSequenceCommand(InstanceID_t id,
22933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         VoidPtr_t    userData)
22943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
22953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* We don't need to do anything special for the End Sequence.*/
22963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
22973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
22983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(pUserData)
22993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pUserData->EndSequence();
23003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return SML_ERR_OK;
23013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
23023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
23063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleStartAtomicCommand
23073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the ATOMIC element is processed from the received message, this callback
23093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
23103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
23123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
23143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
23153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
23163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
23173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
23183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
23193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
23223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
23233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleStartAtomicCommand(InstanceID_t id,
23243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         VoidPtr_t    userData,
23253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                         SmlAtomicPtr_t  pContent)
23263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
23273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  Ret_t                  sml_ret_stat = SML_ERR_OK;
23283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T dm_stat = SYNCML_DM_SUCCESS;
23293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
23303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  dm_stat = pDmBuildPackage->GenerateAlertForLOB(DM_COMMAND_ATOMIC_START);
23323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (dm_stat != SYNCML_DM_SUCCESS)
23343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
23353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         smlFreeAtomic(pContent  );
23363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_OK;
23373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
23383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pDmMgmtSessionObj->IsAuthorized())
23403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
23413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if(pDmMgmtSessionObj->GetInAtomicCommand())
23423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    { // nested atomics are not allowed
23433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      SaveStatus((UINT8 *)pContent->cmdID->content,
23443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          (UINT8 *)dm_command_name_table[SYNCML_DM_ATOMIC],
23453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
23463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
23473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           SYNCML_DM_COMMAND_FAILED,
23483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           NULL,
23493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                           pUserData);
23503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      smlFreeAtomic(pContent  );
23513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return sml_ret_stat;
23523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
23533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    dm_stat=dmTreeObj.GetLockContextManager().ReleaseIDInternal(SYNCML_DM_LOCKID_CURRENT, SYNCML_DM_ATOMIC);
23553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( dm_stat != SYNCML_DM_SUCCESS && dm_stat != SYNCML_DM_FEATURE_NOT_SUPPORTED )
23573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
23583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      smlFreeAtomic(pContent  );
23593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return SML_ERR_UNSPECIFIC;
23603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
23613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Remember that we are in an Atomic command.*/
23633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pDmMgmtSessionObj->SetInAtomicCommand(TRUE);
23643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // Save the data for the status
23663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->pAtomicStatus.bValueSet = TRUE;
23673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->pAtomicStatus.pCmdId = (CPCHAR)pContent->cmdID->content;
23683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->pAtomicStatus.pCmdName = dm_command_name_table[SYNCML_DM_ATOMIC];
23693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->pAtomicStatus.status = dm_stat;
23703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
23713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  else
23723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
23733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    dm_stat = SaveStatus((UINT8 *)pContent->cmdID->content,
23743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                      (UINT8 *)dm_command_name_table[SYNCML_DM_ATOMIC],
23753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       NULL,
23763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       NULL,
23773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       pDmMgmtSessionObj->GetNotAuthorizedStatus(),
23783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       NULL,
23793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       pUserData);
23803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (dm_stat != SYNCML_DM_SUCCESS)
23813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      sml_ret_stat = SML_ERR_UNSPECIFIC;
23823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
23833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  smlFreeAtomic(pContent  );
23843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return sml_ret_stat;
23853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
23863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
23893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleEndAtomicCommand
23903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the End ATOMIC element is processed from the received message, this callback
23923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
23933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
23953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
23963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
23973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
23983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
23993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
24003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
24013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
24043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
24053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleEndAtomicCommand(InstanceID_t id,
24063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       VoidPtr_t    userData)
24073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
24083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  Ret_t                  sml_ret_stat = SML_ERR_OK;
24093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_USER_DATA_T   *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
24103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  SYNCML_DM_RET_STATUS_T retStatus=SYNCML_DM_SUCCESS;
24113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  if (pDmMgmtSessionObj->IsAuthorized())
24133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  {
24143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     pDmMgmtSessionObj->SetInAtomicCommand(FALSE);
24153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if ( !pUserData->rollback )
24173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
24183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      retStatus=dmTreeObj.GetLockContextManager().ReleaseIDInternal(SYNCML_DM_LOCKID_CURRENT, SYNCML_DM_COMMIT);
24193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if ( retStatus != SYNCML_DM_SUCCESS && retStatus != SYNCML_DM_FEATURE_NOT_SUPPORTED)
24213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        return SML_ERR_UNSPECIFIC;
24223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     }
24233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* We are now out of the Atomic command.*/
24253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8 *p_SourceRefData = !pUserData->pAtomicStatus.pSource.empty() ?
24263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                     (UINT8 *)(pUserData->pAtomicStatus.pSource.c_str()) : NULL;
24273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8 *p_TargetRefData = !pUserData->pAtomicStatus.pTarget.empty() ?
24283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                     (UINT8 *)pUserData->pAtomicStatus.pTarget.c_str() : NULL;
24293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    retStatus = SaveStatus((UINT8 *)pUserData->pAtomicStatus.pCmdId.c_str(),
24313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         (UINT8 *)pUserData->pAtomicStatus.pCmdName.c_str(),
24323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         p_SourceRefData,
24333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         p_TargetRefData,
24343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         pUserData->pAtomicStatus.status,
24353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         NULL,
24363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                         pUserData);
24373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (retStatus != SYNCML_DM_SUCCESS)
24393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       sml_ret_stat = SML_ERR_UNSPECIFIC;
24403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    for ( int i = 0; i <pUserData->oStatus.size(); i++ )
24423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
24433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       const SYNCML_DM_STATUS_DATA_T& ptrStatus = pUserData->oStatus[i];
24443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         UINT8 *p_SourceRefData = !ptrStatus.pSource.empty() ?
24463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                                     (UINT8 *)(ptrStatus.pSource.c_str()) : NULL;
24473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       retStatus = SaveStatus((UINT8 *)ptrStatus.pCmdId.c_str(),
24483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              (UINT8 *)ptrStatus.pCmdName.c_str(),
24493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              p_SourceRefData,
24503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              (UINT8 *)ptrStatus.pTarget.c_str(),
24513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              ptrStatus.status,
24523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              &ptrStatus.responses,
24533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                              pUserData);
24543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby       if (retStatus != SYNCML_DM_SUCCESS)
24563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          sml_ret_stat = SML_ERR_UNSPECIFIC;
24573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
24583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    pUserData->EndAtomic();
24603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
24613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  return sml_ret_stat;
24633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
24643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*==================================================================================================
24673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyFUNCTION        : HandleStatusCommand
24683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDESCRIPTION     : When the STATUS element is processed from the received message, this callback
24703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  function will be called.
24713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  This function will perform the following operations:
24733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  1) Check the status code.
24743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  2) Call TNMTree::Replace() to replace the nonce value.
24753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  3) Update the UserAgent's Security state based on the client authentication
24763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     status received from the server.
24773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  4) Call SYNCML_DM_BuildPackage::BuildFinishSyncHdr() to finish our SyncHdr
24783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  5) Determine if we need to Challenge the server
24793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  6) Call SYNCML_DM_BuildPackage::BuildStatus() to build up our first status
24803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     which contains our server authentication disposition.
24813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyARGUMENT PASSED : id
24833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  userData
24843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  pContent
24853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyOUTPUT PARAMETER:
24863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRETURN VALUE    : SML_ERR_OK or ERR code
24873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyIMPORTANT NOTES :
24883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
24903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/
24913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyRet_t
24923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHandleStatusCommand (InstanceID_t   id,
24933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     VoidPtr_t      userData,
24943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                     SmlStatusPtr_t pContent)
24953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
24963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_USER_DATA_T  *pUserData = (SYNCML_DM_USER_DATA_T *)userData;
24973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Ret_t                   sml_ret_stat = SML_ERR_OK;
24983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T  ret_stat;
24993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T      local_dm_stat = SYNCML_DM_SUCCESS;
25003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8                   *pClientNonce = NULL;
25013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8                   *pServerNonce = NULL;
25023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8                   *p_auth = NULL;
25033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T      clientAuthStatus;
25043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_RET_STATUS_T      serverStatus;
25053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_CHAL_TYPE_T   serverChalType = SYNCML_DM_CHAL_NONE;
25063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    UINT8                   command_id_str[UINT16_TYPE_STR_SIZE_5] = "0";
25073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* command_id_str reference should be "0" for header */
25083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DM_CHALLENGE_T                  *pClientChal = NULL;
25093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    DMClientServerCreds     *pClientServerCreds;
25103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCML_DM_SEC_STATE_FLAG_T   currSecState;
25113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCMLDM_NONCE_STRING_INFO_T    *pNonceStruct = NULL;
25123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SYNCMLDM_NONCE_GENERATE_PARAMETER_INFO_T    nonceInfo;
25133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    SmlMetInfMetInfPtr_t p_meta_info = NULL;
25143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* First check if this status is for the "SyncHdr".*/
25163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (DmStrncmp((char *)pContent->cmd->content, SYNCML_SYNCHDR, pContent->cmd->length) == 0)
25173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
2518c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::handleStatusCommand, synchdr command ref:%s\n\n", (char*)pContent->cmdRef->content));
25193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Get the Client and Server Cred info and current Security state.*/
25203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pClientServerCreds = pDmMgmtSessionObj->GetClientServerCreds();
25213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        currSecState = pDmMgmtSessionObj->GetSecState();
25223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        // DP: if we have postponed nonce - save it
25243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( pUserData->bNonceGenerated )
25253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
25263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pUserData->bNonceGenerated = FALSE;
25273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if ( pClientServerCreds && pClientServerCreds->pServerNonce )
25283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
25293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( dmTreeObj.IsVersion_12()  )
25303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                            pClientServerCreds->SaveServerAttribute(DM_AAUTHDATA, pClientServerCreds->pServerNonce);
25313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  else
25323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          pClientServerCreds->SaveServerAttribute(DM_SERVERNONCE, pClientServerCreds->pServerNonce);
25333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
25343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
25353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* We must check the new Status value from the Server in case our Security State changed.*/
25373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_auth = (UINT8 *)DmAllocMem(pContent->data->length+1);
25383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( p_auth == NULL )
25393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby           return SYNCML_DM_DEVICE_FULL;
25403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        DmStrncpy((char *)p_auth,
25413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                (const char *)pContent->data->content,
25423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pContent->data->length);
25433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p_auth[pContent->data->length] = '\0';
25443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* We always need to check the clientAuthStatus since we send creds on every message.*/
25463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        clientAuthStatus = SyncML2DMCode((char *)p_auth);
2547c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        DmFreeMem(p_auth);
2548c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan
2549c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::handleStatusCommand, synchdr command clientAuthStatus: %d\n\n", clientAuthStatus));
2550c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan
2551c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        if (clientAuthStatus == SYNCML_DM_AUTHENTICATION_REQUIRED)
2552c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        {
2553c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan            return clientAuthStatus;
2554c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan        }
25553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Update the client retry count */
25573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (clientAuthStatus  == SYNCML_DM_AUTHENTICATION_ACCEPTED ||
25583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            clientAuthStatus == SYNCML_DM_SUCCESS)
25593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
25603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Reset client retry count when client is authenticated */
25613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pDmMgmtSessionObj->SetClientRetryCount(0);
25623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // Save authPref value if needed
25643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientServerCreds->SaveAuthPref();
25653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
25663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        else
25673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
25683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Increment the retry count when client is not authenticated.*/
25693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pDmMgmtSessionObj->IncClientRetryCount();
25703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
25713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Update the security state with the client authentication status. Note that we only
25733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         * check for cases that cause a change in the SecurityState.
25743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         */
25753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        switch (currSecState)
25763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
25773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_CLIENT_NO_SERVER_NO_AUTH:
25783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (clientAuthStatus == SYNCML_DM_AUTHENTICATION_ACCEPTED ||
25793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    clientAuthStatus == SYNCML_DM_SUCCESS)
25803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
25813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    currSecState = DM_CLIENT_Y_SERVER_NO_AUTH;
25823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
25833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
25843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_CLIENT_NO_SERVER_Y_AUTH:
25863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (clientAuthStatus == SYNCML_DM_AUTHENTICATION_ACCEPTED ||
25873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    clientAuthStatus == SYNCML_DM_SUCCESS)
25883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
25893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    currSecState = DM_BOTH_CLIENT_SERVER_AUTH;
25903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
25913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
25923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
25933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_CLIENT_Y_SERVER_NO_AUTH:
25943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (clientAuthStatus != SYNCML_DM_AUTHENTICATION_ACCEPTED &&
25953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    clientAuthStatus != SYNCML_DM_SUCCESS)
25963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
25973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    currSecState = DM_CLIENT_NO_SERVER_NO_AUTH;
25983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
25993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
26003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            case DM_BOTH_CLIENT_SERVER_AUTH:
26023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (clientAuthStatus != SYNCML_DM_AUTHENTICATION_ACCEPTED &&
26033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    clientAuthStatus != SYNCML_DM_SUCCESS)
26043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
26053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    currSecState = DM_CLIENT_NO_SERVER_Y_AUTH;
26063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
26073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                break;
26083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
26093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Update the UserAgent Security state in case it changed.*/
26113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        pDmMgmtSessionObj->SetSecState(currSecState);
26123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ((pContent->chal != NULL) && (pContent->chal->meta != NULL))
26143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
26153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* We were challenged in the SyncHdr, so we need to build our creditials in the package.*/
26163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (currSecState == DM_CLIENT_NO_SERVER_NO_AUTH ||
26173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                currSecState == DM_CLIENT_NO_SERVER_Y_AUTH)
26183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
26193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* If the client has not been authenticated yet, increment the commandCount so
26203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 * we'll still respond even if there are no other operational commmands.
26213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 * But if the client has already been authenticated, then we won't increment since
26223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 * this may be the end of the session.  In that case, the nonce will be used
26233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 * in the next session.
26243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                 */
26253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pDmMgmtSessionObj->IncCommandCount();
26263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
26273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            p_meta_info = (sml_metinf_metinf_s *)pContent->chal->meta->content;
26293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Check the Type.*/
26313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (p_meta_info->type != NULL)
26323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
26333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Check which type of challenge was sent.*/
26343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if (smlLibStrncmp((char *)p_meta_info->type->content, SYNCML_AUTH_MAC,
26353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                  p_meta_info->type->length) == 0)
26363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
26373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* We received a challenge for HMAC-MD5.*/
26383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    serverChalType = SYNCML_DM_CHAL_HMAC;
26393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
26403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else if (smlLibStrncmp((char *)p_meta_info->type->content, SYNCML_AUTH_MD5,
26413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                                       p_meta_info->type->length) == 0)
26423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
26433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* We received a challenge for MD5.*/
26443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    serverChalType = SYNCML_DM_CHAL_MD5;
26453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
26463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                else
26473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
26483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    /* We received a challenge for Basic security.*/
26493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                    serverChalType = SYNCML_DM_CHAL_BASIC;
26503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
26513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
26523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // DP switch to new auth type if needed
26543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( dmTreeObj.IsVersion_12()  )
26553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
26563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                local_dm_stat = pClientServerCreds->SetPrefClientAuth(serverChalType);
26573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( local_dm_stat != SYNCML_DM_SUCCESS )
26583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                {
26593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        pDmMgmtSessionObj->SetClientRetryCount(MAX_AUTH_RETRY+1);
26603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                }
26613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
26623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Get the nextnonce sent to us from the server.*/
26633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (p_meta_info->nextnonce != NULL)
26643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
26653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientNonce = (UINT8 *)DmAllocMem(p_meta_info->nextnonce->length + 1);
26663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                if ( pClientNonce == NULL )
26673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   return SYNCML_DM_DEVICE_FULL;
26683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                memcpy(pClientNonce,
26693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       p_meta_info->nextnonce->content,
26703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                       p_meta_info->nextnonce->length);
26713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientNonce[p_meta_info->nextnonce->length] = '\0';
26723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Save the new ClientNonce in the Tree.*/
26743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  if ( dmTreeObj.IsVersion_12()  )
26753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                        local_dm_stat = pClientServerCreds->SaveClientAttribute(DM_AAUTHDATA, (CPCHAR)pClientNonce);
26763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  else
26773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                          local_dm_stat = pClientServerCreds->SaveClientAttribute(DM_CLIENTNONCE, (CPCHAR)pClientNonce);
26783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Note that we continue even if we failed to store the clientNonce.*/
26793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientServerCreds->pClientNonce = (const char*)pClientNonce;
26803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                DmFreeMem(pClientNonce);
26813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                /* Note that we continue even if we failed to store the clientNonce.*/
26833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
26843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        } /* If chal != NULL */
26853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Call the method to finish our SyncHdr and start the toolkit message.*/
26873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        ret_stat = pDmBuildPackage->BuildFinishSyncHdr(serverChalType);
26883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (ret_stat != SYNCML_DM_SUCCESS)
26893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
26903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            sml_ret_stat = SML_ERR_UNSPECIFIC;
26913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            synchdr_dm_stat = SYNCML_DM_BAD_REQUEST;
26923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
26933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
26943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Determine if we need to challenge the server. Note that we will challange
26953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         * the Server even if it has already been authenticated (hmac/md5 only).*/
26963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( (currSecState == DM_CLIENT_NO_SERVER_NO_AUTH ||
26973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            currSecState == DM_CLIENT_Y_SERVER_NO_AUTH) &&
26983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientServerCreds->ServerChalType > SYNCML_DM_CHAL_BASIC )
26993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        { // generate new nonce if required
27003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            DMGetData devID;
27013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* First we need to generate a new nextNonce for the server.*/
27023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nonceInfo.pb_user_name = (UINT8*)pClientServerCreds->pClientUserName.c_str();
27033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nonceInfo.pb_password = (UINT8*)pClientServerCreds->pServerPW.c_str();
27043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            nonceInfo.pb_server_id = (UINT8*)pClientServerCreds->pServerId.c_str();
27053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            dmTreeObj.Get(DM_DEV_INFO_DEVID_URI, devID,SYNCML_DM_REQUEST_TYPE_INTERNAL);
27073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pNonceStruct = syncmldm_sec_generate_nonce(&nonceInfo,devID.getCharData());
27093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( pNonceStruct == NULL )
27103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
27113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return SYNCML_DM_COMMAND_FAILED;
27123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
27133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Copy the new Server Nonce.*/
27153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pServerNonce = (UINT8 *)DmAllocMem(pNonceStruct->w_nonce_string_length + 1);
27163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if ( pServerNonce == NULL )
27173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            {
27183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                DmFreeMem(pNonceStruct);
27193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                return SYNCML_DM_DEVICE_FULL;
27203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
27213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            memcpy(pServerNonce, pNonceStruct->ab_nonce_string,
27223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                   pNonceStruct->w_nonce_string_length);
27233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pServerNonce[pNonceStruct->w_nonce_string_length] = '\0';
27243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Store the new ServerNonce in the Tree.*/
27263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // DP: don't save nonce in the tree yet, since server answer can be empty packet and
27273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            // we can end session without sending it to the server
27283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pUserData->bNonceGenerated = TRUE;
27293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            DmFreeMem(pNonceStruct);
27303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            /* Note we continue even if we failed to store the serverNonce.*/
27323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientServerCreds->pServerNonce = (const char*)pServerNonce;
27333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            DmFreeMem(pServerNonce);
27343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
27353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (currSecState == DM_CLIENT_NO_SERVER_NO_AUTH ||
27373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            currSecState == DM_CLIENT_Y_SERVER_NO_AUTH ||
27383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientServerCreds->ServerChalType >= SYNCML_DM_CHAL_MD5 ) { // no authenticated or needs chal
27393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* Setup the Client Challenge information.*/
27403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pClientChal = (DM_CHALLENGE_T *)DmAllocMem(sizeof(DM_CHALLENGE_T));
27413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if ( pClientChal == NULL )
27423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
27433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             return SYNCML_DM_DEVICE_FULL;
27443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
27453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if ( pClientServerCreds->ServerChalType == SYNCML_DM_CHAL_HMAC )
27473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientChal->pChalType = (UINT8 *) SYNCML_AUTH_MAC;
27483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          else if ( pClientServerCreds->ServerChalType == SYNCML_DM_CHAL_MD5 )
27493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientChal->pChalType = (UINT8 *) SYNCML_AUTH_MD5;
27503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          else
27513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                pClientChal->pChalType = (UINT8 *) SYNCML_AUTH_BASIC;
27523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pClientChal->pChalFormat = (UINT8 *)SYNCML_B64;
27543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          pClientChal->pChalNonce = pClientServerCreds->ServerChalType >= SYNCML_DM_CHAL_MD5 ?
27553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            (UINT8*)pClientServerCreds->pServerNonce.c_str() : NULL;
27563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
27573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Set the Server's authentication status.*/
27593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (currSecState == DM_CLIENT_NO_SERVER_NO_AUTH ||
27603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            currSecState == DM_CLIENT_Y_SERVER_NO_AUTH)
27613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          synchdr_dm_stat = pDmMgmtSessionObj->GetNotAuthorizedStatus();
27623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        /* Now that our SyncHdr is header is closed, we need to create our first status.
27643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby         * Call the toolkit to construct STATUS for SyncHdr */
27653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        SmlStatusPtr_t pStatus = pDmBuildPackage->AllocateStatus(
27663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            command_id_str,
27673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            (UINT8 *)dm_command_name_table[SYNCML_DM_HEADER],
27683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            NULL,   /* Source URI, it's not needed for SyncHdr STATUS */
27693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            NULL,   /* Target URI, it's not needed for SyncHdr STATUS */
27703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            pClientChal,
27713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            synchdr_dm_stat, NULL );
27723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if ( pStatus ) {
27733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            ret_stat = pDmBuildPackage->BuildStatus( pStatus );
27743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            smlFreeStatus(pStatus);
27753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
27763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        else
27773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          ret_stat = SYNCML_DM_FAIL;
27783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        DmFreeMem(pClientChal);
27803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (ret_stat != SYNCML_DM_SUCCESS)
27823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        {
27833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            sml_ret_stat = SML_ERR_UNSPECIFIC;
27843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
27853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    } /* SyncHdr check */
27863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
27873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Check if this Status is for our "Replace" command (Our DevInfo) */
27883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else if (DmStrncmp((char *)pContent->cmd->content, SYNCML_REPLACE, pContent->cmd->length) == 0)
27893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
2790c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::handleStatusCommand, replace command ref:%s\n\n", (char*)pContent->cmdRef->content));
27913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* Determine the serverStatus for our DevInfo.*/
27923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          p_auth = (UINT8 *)DmAllocMem(pContent->data->length+1);
27933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if ( p_auth == NULL )
27943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
27953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             return SYNCML_DM_DEVICE_FULL;
27963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
27973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          DmStrncpy((char *)p_auth,
2798c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan                    (const char *)pContent->data->content,
2799c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan                    pContent->data->length);
28003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          p_auth[pContent->data->length] = '\0';
28013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          serverStatus = SyncML2DMCode((char *)p_auth);
28023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          DmFreeMem(p_auth);
28033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* We only resend the DevInfo in the case of Authentication failure.*/
2805c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          if (serverStatus == SYNCML_DM_UNAUTHORIZED)
28063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
28073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              /* Call the method to build our DevInfo into the REPLACE command for this package. */
28083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              ret_stat = pDmBuildPackage->BuildReplaceCommand();
28093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if (ret_stat != SYNCML_DM_SUCCESS)
28103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
28113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
28123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
28133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
2814c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          else if (serverStatus == SYNCML_DM_AUTHENTICATION_REQUIRED)
2815c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          {
2816c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan              return serverStatus;
2817c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          }
28183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    } /* Replace check */
28193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Check if this Status is for our "Alert" command (Our SessionDirection) */
28213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else if (DmStrncmp((char *)pContent->cmd->content, SYNCML_ALERT, pContent->cmd->length) == 0 &&
28223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby             DmStrncmp((char *)pContent->cmdRef->content, "1", pContent->cmdRef->length) == 0)
28233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
2824c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          XPL_LOG_DM_TMN_Debug(("\ninside dm_ua_handlecommand::handleStatusCommand, alert command ref:%s\n\n", (char*)pContent->cmdRef->content));
28253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* Determine the serverStatus for our Alert (Session Direction).*/
28263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          p_auth = (UINT8 *)DmAllocMem(pContent->data->length+1);
28273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if ( p_auth == NULL )
28283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
28293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              return SYNCML_DM_DEVICE_FULL;
28303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
28313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          DmStrncpy((char *)p_auth,
2832c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan                    (const char *)pContent->data->content,
2833c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan                    pContent->data->length);
28343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          p_auth[pContent->data->length] = '\0';
28353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          serverStatus = SyncML2DMCode((char *)p_auth);
2836c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          DmFreeMem(p_auth);
28373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          /* We only resend the DevInfo in the case of Authentication failure.*/
2839c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          if (serverStatus == SYNCML_DM_UNAUTHORIZED)
28403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          {
28413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              /* Call the method to build our DevInfo into the REPLACE command for this package. */
28423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              ret_stat = pDmBuildPackage->BuildAlertCommand(pDmBuildPackage->getDirection(), NULL, NULL);
28433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if (ret_stat != SYNCML_DM_SUCCESS)
28443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
28453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
28463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
28473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              /* Call the method to build 1226 command for this package. */
28483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              ret_stat = pDmBuildPackage->BuildAlert1226Command();
28493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              if (ret_stat != SYNCML_DM_SUCCESS)
28503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              {
28513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby                  sml_ret_stat = SML_ERR_UNSPECIFIC;
28523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              }
28533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
2854c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          else if (serverStatus == SYNCML_DM_AUTHENTICATION_REQUIRED)
2855c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          {
2856c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan              return serverStatus;
2857c38807b6c8dcea4aaf15dc8cb4712b0daf92796aAmit Mahajan          }
28583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    } /* Replace check */
28593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    /* Free the memory we allocated. */
28613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    smlFreeStatus(pContent);
28623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return sml_ret_stat;
28643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
28653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambybool VerifyAlertItems(SmlAlertPtr_t  pContent)
28673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{
28683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if ( pContent == NULL )
28693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
28703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby     return false;
28713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
28723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   // Verify first alert item is not NULL.
28743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SmlItemListPtr_t  p_alert_list_item;
28753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_alert_list_item = pContent->itemList;
28763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (p_alert_list_item == NULL)
28773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
28783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return false;
28793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
28803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   SmlItemPtr_t         p_alert_item;
28823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_alert_item = p_alert_list_item->item;
28833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (p_alert_item == NULL)
28843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
28853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return false;
28863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
28873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   // Verify second alert item is not NULL.
28893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_alert_list_item = p_alert_list_item->next;
28903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (p_alert_list_item == NULL)
28913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
28923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return false;
28933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
28943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
28953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_alert_item = p_alert_list_item->item;
28963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (p_alert_item == NULL)
28973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
28983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return false;
28993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
29003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
29013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   // Verify no more than 2 items are specified in alert.
29023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   p_alert_list_item = p_alert_list_item->next;
29033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   if (p_alert_list_item != NULL)
29043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   {
29053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return false;
29063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   }
29073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
29083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   return true;
29093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
2910