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