--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/wbxml/src/syncml/smldtd.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,1799 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: SyncML command struct implementations.
+*
+*/
+
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+
+#include "smldtd.h"
+#include "smlsyncmltags.h"
+#include "smlmetinfdtd.h"
+#include "smldevinfdtd.h"
+#include "WBXMLSyncMLParser.h"
+#include "WBXMLParserError.h"
+
+// ------------------------------------------------------------------------------------------------
+// Macros
+// ------------------------------------------------------------------------------------------------
+#define CHECK_NO_DUPLICATE(a) if( a ) { User::Leave(KErrParserErrorInvalidDocument); }
+
+// ------------------------------------------------------------------------------------------------
+// Helper functions
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddPCDataL( SmlPcdataListPtr_t* aList )
+ {
+ SmlPcdataListPtr_t itemL = new (ELeave) SmlPcdataList_t();
+ CleanupStack::PushL(itemL);
+ itemL->data = new (ELeave) SmlPcdata_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->data;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddItemL( SmlItemListPtr_t* aList )
+ {
+ SmlItemListPtr_t itemL = new (ELeave) SmlItemList_t();
+ CleanupStack::PushL(itemL);
+ itemL->item = new (ELeave) SmlItem_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->item;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddMapItemL( SmlMapItemListPtr_t* aList )
+ {
+ SmlMapItemListPtr_t itemL = new (ELeave) SmlMapItemList_t();
+ CleanupStack::PushL(itemL);
+ itemL->mapItem = new (ELeave) SmlMapItem_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->mapItem;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddSourceListL( SmlSourceListPtr_t* aList )
+ {
+ SmlSourceListPtr_t itemL = new (ELeave) SmlSourceList_t();
+ CleanupStack::PushL(itemL);
+ itemL->source = new (ELeave) SmlSource_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->source;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddTargetRefL( SmlTargetRefListPtr_t* aList )
+ {
+ SmlTargetRefListPtr_t itemL = new (ELeave) SmlTargetRefList_t();
+ CleanupStack::PushL(itemL);
+ itemL->targetRef = new (ELeave) SmlPcdata_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->targetRef;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* AddSourceRefL( SmlSourceRefListPtr_t* aList )
+ {
+ SmlSourceRefListPtr_t itemL = new (ELeave) SmlSourceRefList_t();
+ CleanupStack::PushL(itemL);
+ itemL->sourceRef = new (ELeave) SmlPcdata_t();
+ GenericListAddL(aList, itemL);
+ CleanupStack::Pop(); // itemL
+ return itemL->sourceRef;
+ }
+
+// ------------------------------------------------------------------------------------------------
+LOCAL_D TBool CreateBasicCommandL( CXMLElement*& aElement, TUint8 aTag )
+ {
+ aElement = 0;
+ switch( aTag )
+ {
+ case EMap:
+ aElement = new (ELeave) SmlMap_t();
+ return ETrue;
+
+ case EAlert:
+ aElement = new (ELeave) SmlAlert_t();
+ return ETrue;
+
+ case EAtomic:
+ aElement = new (ELeave) SmlAtomic_t(SML_PE_ATOMIC_START);
+ return ETrue;
+
+ case EAdd:
+ case ECopy:
+ case EDelete:
+ case EReplace:
+ case EMove:
+ aElement = new (ELeave) SmlCopy_t();
+ return ETrue;
+
+ case EGet:
+ case EPut:
+ aElement = new (ELeave) SmlGet_t();
+ return ETrue;
+
+ case EExec:
+ aElement = new (ELeave) SmlExec_t();
+ return ETrue;
+
+ case EResults:
+ aElement = new (ELeave) SmlResults_t();
+ return ETrue;
+
+ case ESearch:
+ aElement = new (ELeave) SmlSearch_t();
+ return ETrue;
+
+ case ESequence:
+ aElement = new (ELeave) SmlSequence_t(SML_PE_SEQUENCE_START);
+ return ETrue;
+
+ case EStatus:
+ aElement = new (ELeave) SmlStatus_t();
+ return ETrue;
+
+ case ESync:
+ aElement = new (ELeave) SmlSync_t();
+ return ETrue;
+
+ default:
+ break;
+ }
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_pcdata_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_pcdata_s::sml_pcdata_s( const SmlPcdataType_t aType, const SmlPcdataExtension_t aExt )
+ : contentType(aType), extension(aExt)
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_pcdata_s::sml_pcdata_s() : contentType(SML_PCDATA_OPAQUE), extension(SML_EXT_UNDEFINED)
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_pcdata_s::~sml_pcdata_s()
+ {
+ FreeContent();
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void sml_pcdata_s::FreeContent()
+ {
+ if( extension == SML_EXT_METINF )
+ {
+ delete SmlMetInfMetInfPtr_t(content);
+ }
+ else if( extension == SML_EXT_DEVINFPROP )
+ {
+ delete SmlDevInfPropertyListPtr_t(content);
+ }
+ else
+ {
+ delete content;
+ }
+ content = 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void sml_pcdata_s::SetDataL( const TDesC8& aData )
+ {
+ FreeContent();
+ length = aData.Length();
+ content = User::AllocL(length);
+ Mem::Copy(content, aData.Ptr(), length);
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C TPtrC8 sml_pcdata_s::Data() const
+ {
+ return TPtrC8((TUint8*)content, length);
+ }
+
+ // ------------------------------------------------------------------------------------------------
+EXPORT_C void sml_pcdata_s::TruncateL( TInt aConsumed )
+ {
+ HBufC8* buffer = TPtrC8((TUint8*)content + aConsumed, length - aConsumed).AllocLC();
+ SetDataL(*buffer);
+ CleanupStack::PopAndDestroy(); // buffer
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_pcdata_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_pcdata_list_s::sml_pcdata_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_pcdata_list_s::~sml_pcdata_list_s()
+ {
+ delete data;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_chal_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_chal_s::sml_chal_s()
+ {
+ delete meta;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_chal_s::~sml_chal_s()
+ {
+ delete meta;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_chal_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t( /*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_cred_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_cred_s::sml_cred_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_cred_s::~sml_cred_s()
+ {
+ delete data;
+ delete meta;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_cred_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EData:
+ CHECK_NO_DUPLICATE(data);
+ data = new (ELeave) SmlPcdata_t();
+ return data;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta)
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// 1.2 CHANGES: new common use elements
+// ------------------------------------------------------------------------------------------------
+// sml_field_or_record_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_field_or_record_s::sml_field_or_record_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_field_or_record_s::~sml_field_or_record_s()
+ {
+ delete item;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_field_or_record_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EItem:
+ CHECK_NO_DUPLICATE(item);
+ item = new (ELeave) SmlItem_t();
+ return item;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+
+// ------------------------------------------------------------------------------------------------
+// sml_filter_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_filter_s::sml_filter_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_filter_s::~sml_filter_s()
+ {
+ delete meta;
+ delete field;
+ delete record;
+ delete filterType;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_filter_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t();
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EField:
+ CHECK_NO_DUPLICATE(field);
+ field = new (ELeave) SmlField_t();
+ return field;
+
+ case ERecord:
+ CHECK_NO_DUPLICATE(record);
+ record = new (ELeave) SmlRecord_t();
+ return record;
+
+ case EFilterType:
+ CHECK_NO_DUPLICATE(filterType);
+ filterType = new (ELeave) SmlPcdata_t();
+ return filterType;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+// Changes end
+
+// 1.2 CHANGES: Source & Target divided to their own structs
+
+// ------------------------------------------------------------------------------------------------
+// sml_source_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_s::sml_source_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_s::~sml_source_s()
+ {
+ delete locURI;
+ delete locName;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_source_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ELocURI:
+ CHECK_NO_DUPLICATE(locURI);
+ locURI = new (ELeave) SmlPcdata_t();
+ return locURI;
+
+ case ELocName:
+ CHECK_NO_DUPLICATE(locName);
+ locName = new (ELeave) SmlPcdata_t();
+ return locName;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_target_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_target_s::sml_target_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_target_s::~sml_target_s()
+ {
+ delete locURI;
+ delete locName;
+ delete filter;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_target_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ELocURI:
+ CHECK_NO_DUPLICATE(locURI);
+ locURI = new (ELeave) SmlPcdata_t();
+ return locURI;
+
+ case ELocName:
+ CHECK_NO_DUPLICATE(locName);
+ locName = new (ELeave) SmlPcdata_t();
+ return locName;
+
+ case EFilter:
+ CHECK_NO_DUPLICATE(filter);
+ filter = new (ELeave) SmlFilter_t();
+ return filter;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+// Changes end
+
+// ------------------------------------------------------------------------------------------------
+// sml_source_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_list_s::sml_source_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_list_s::~sml_source_list_s()
+ {
+ delete source;
+ }
+
+//1.2 CHANGES: Source & Target parent
+// ------------------------------------------------------------------------------------------------
+// sml_source_or_target_parent_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_or_target_parent_s::sml_source_or_target_parent_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_or_target_parent_s::~sml_source_or_target_parent_s()
+ {
+ delete locURI;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_source_or_target_parent_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ELocURI:
+ CHECK_NO_DUPLICATE(locURI);
+ locURI = new (ELeave) SmlPcdata_t();
+ return locURI;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+// Changes end
+
+
+// ------------------------------------------------------------------------------------------------
+// sml_sync_hdr_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_sync_hdr_s::sml_sync_hdr_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_sync_hdr_s::~sml_sync_hdr_s()
+ {
+ delete version;
+ delete proto;
+ delete sessionID;
+ delete msgID;
+ delete target;
+ delete source;
+ delete respURI;
+ delete cred;
+ delete meta;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_sync_hdr_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EVerDTD:
+ CHECK_NO_DUPLICATE(version);
+ version = new (ELeave) SmlPcdata_t();
+ return version;
+
+ case EVerProto:
+ CHECK_NO_DUPLICATE(proto);
+ proto = new (ELeave) SmlPcdata_t();
+ return proto;
+
+ case ESessionID:
+ CHECK_NO_DUPLICATE(sessionID);
+ sessionID = new (ELeave) SmlPcdata_t();
+ return sessionID;
+
+ case EMsgID:
+ CHECK_NO_DUPLICATE(msgID);
+ msgID = new (ELeave) SmlPcdata_t();
+ return msgID;
+
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ CHECK_NO_DUPLICATE(source);
+ source = new (ELeave) SmlSource_t();
+ return source;
+
+ case ERespURI:
+ CHECK_NO_DUPLICATE(respURI);
+ respURI = new (ELeave) SmlPcdata_t();
+ return respURI;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_sync_hdr_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case ESyncHdr:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlStartMessageFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_sync_hdr_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_item_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_item_s::sml_item_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_item_s::~sml_item_s()
+ {
+ delete target;
+ delete source;
+ delete sourceParent;
+ delete targetParent;
+ delete meta;
+ delete data;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_item_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ CHECK_NO_DUPLICATE(source);
+ source = new (ELeave) SmlSource_t();
+ return source;
+
+// 1.2 CHANGES: SourceParent and TargetParent added
+ case ESourceParent:
+ CHECK_NO_DUPLICATE(sourceParent);
+ sourceParent = new (ELeave) SmlSourceParent_t();
+ return sourceParent;
+
+ case ETargetParent:
+ CHECK_NO_DUPLICATE(targetParent);
+ targetParent = new (ELeave) SmlTargetParent_t();
+ return targetParent;
+// End Changes
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EData:
+ CHECK_NO_DUPLICATE(data);
+ data = new (ELeave) SmlPcdata_t();
+ return data;
+
+ case EMoreData:
+ CHECK_NO_DUPLICATE(flags & SmlMoreData_f);
+ flags |= SmlMoreData_f;
+ break;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_item_s::EndElementL( TAny* /*aCallbacks*/, TUint8 aTag )
+ {
+ if( aTag == EMoreData )
+ {
+ return ENone;
+ }
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_item_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_item_list_s::sml_item_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_item_list_s::~sml_item_list_s()
+ {
+ delete item;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_generic_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_generic_s::sml_generic_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_generic_s::~sml_generic_s()
+ {
+ delete cmdID;
+ delete cred;
+ delete meta;
+ GenericListDelete( itemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_generic_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case EArchive:
+ CHECK_NO_DUPLICATE(flags & SmlArchive_f);
+ flags |= SmlArchive_f;
+ break;
+
+ case ESftDel:
+ CHECK_NO_DUPLICATE(flags & SmlSftDel_f);
+ flags |= SmlSftDel_f;
+ break;
+
+ case EItem:
+ return AddItemL(&itemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_generic_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EAdd:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlAddCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ECopy:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlCopyCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case EDelete:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlDeleteCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case EReplace:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlReplaceCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case EMove:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlMoveCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ case EArchive:
+ case ESftDel:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_generic_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_alert_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_alert_s::sml_alert_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_alert_s::~sml_alert_s()
+ {
+ delete cmdID;
+ delete cred;
+ delete data;
+ // FOTA
+ delete correlator;
+ // FOTA end
+ GenericListDelete( itemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_alert_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EData:
+ CHECK_NO_DUPLICATE(data);
+ data = new (ELeave) SmlPcdata_t();
+ return data;
+// FOTA
+ case ECorrelator:
+ CHECK_NO_DUPLICATE(correlator);
+ correlator = new (ELeave) SmlPcdata_t();
+ return correlator;
+// FOTA end
+
+ case EItem:
+ return AddItemL(&itemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_alert_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EAlert:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlAlertCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_alert_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_atomic_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_atomic_s::sml_atomic_s( SmlProtoElement_t aType )
+ {
+ elementType = aType;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_atomic_s::~sml_atomic_s()
+ {
+ delete cmdID;
+ delete meta;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_atomic_s::BeginElementL( TUint8 aTag, const TXMLElementParams& aParams )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ default:
+ CXMLElement* e;
+ if( CreateBasicCommandL(e, aTag) )
+ {
+ if( this->elementType == SML_PE_ATOMIC_START )
+ {
+ this->elementType = SML_PE_ATOMIC_END;
+ ((MWBXMLSyncMLCallbacks*)aParams.Callbacks())->smlStartAtomicFuncL(this);
+ }
+ else if( this->elementType == SML_PE_SEQUENCE_START )
+ {
+ this->elementType = SML_PE_SEQUENCE_END;
+ ((MWBXMLSyncMLCallbacks*)aParams.Callbacks())->smlStartSequenceFuncL(this);
+ }
+ }
+ else
+ {
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return e;
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_atomic_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EAtomic:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlEndAtomicFuncL();
+ return EPopAndDestroy;
+
+ case ESequence:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlEndSequenceFuncL();
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_atomic_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_sync_s
+// ------------------------------------------------------------------------------------------------
+
+
+EXPORT_C sml_sync_s::sml_sync_s()
+ {
+ elementType = SML_PE_SYNC_START;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_sync_s::~sml_sync_s()
+ {
+ delete cmdID;
+ delete cred;
+ delete target;
+ delete source;
+ delete meta;
+ delete noc;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_sync_s::BeginElementL( TUint8 aTag, const TXMLElementParams& aParams )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ CHECK_NO_DUPLICATE(source);
+ source = new (ELeave) SmlSource_t();
+ return source;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case ENumberOfChanges:
+ CHECK_NO_DUPLICATE(noc);
+ noc = new (ELeave) SmlPcdata_t();
+ return noc;
+
+ default:
+ CXMLElement* e;
+ if( CreateBasicCommandL(e, aTag) )
+ {
+ if( this->elementType == SML_PE_SYNC_START )
+ {
+ this->elementType = SML_PE_SYNC_END;
+ ((MWBXMLSyncMLCallbacks*)aParams.Callbacks())->smlStartSyncFuncL(this);
+ }
+ }
+ else
+ {
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return e;
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_sync_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case ESync:
+ // If Sync element did not contain any commands -> call startsync and then end sync
+ if( this->elementType == SML_PE_SYNC_START )
+ {
+ this->elementType = SML_PE_SYNC_END;
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlStartSyncFuncL(this);
+ }
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlEndSyncFuncL();
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_sync_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_exec_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_exec_s::sml_exec_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_exec_s::~sml_exec_s()
+ {
+ delete cmdID;
+ delete cred;
+ delete meta;
+ // FOTA
+ delete correlator;
+ // FOTA end
+ delete item;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_exec_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+// FOTA
+ case ECorrelator:
+ CHECK_NO_DUPLICATE(correlator);
+ correlator = new (ELeave) SmlPcdata_t();
+ return correlator;
+// FOTA end
+
+ case EItem:
+ CHECK_NO_DUPLICATE(item);
+ item = new (ELeave) SmlItem_t();
+ return item;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_exec_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EExec:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlExecCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_exec_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_get_put_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_get_put_s::sml_get_put_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_get_put_s::~sml_get_put_s()
+ {
+ delete cmdID;
+ delete lang;
+ delete cred;
+ delete meta;
+ GenericListDelete( itemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_get_put_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case ELang:
+ CHECK_NO_DUPLICATE(lang);
+ lang = new (ELeave) SmlPcdata_t();
+ return lang;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EItem:
+ return AddItemL(&itemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_get_put_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EGet:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlGetCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case EPut:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlPutCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_get_put_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_map_item_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_item_s::sml_map_item_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_item_s::~sml_map_item_s()
+ {
+ delete source;
+ delete target;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_map_item_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ CHECK_NO_DUPLICATE(source);
+ source = new (ELeave) SmlSource_t();
+ return source;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_map_item_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_item_list_s::sml_map_item_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_item_list_s::~sml_map_item_list_s()
+ {
+ delete mapItem;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_map_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_s::sml_map_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_map_s::~sml_map_s()
+ {
+ delete cmdID;
+ delete target;
+ delete source;
+ delete cred;
+ delete meta;
+ GenericListDelete( mapItemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_map_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ CHECK_NO_DUPLICATE(source);
+ source = new (ELeave) SmlSource_t();
+ return source;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EMapItem:
+ return AddMapItemL(&mapItemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_map_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EMap:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlMapCmdFuncL(this);
+ return EPopAndDestroy;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_map_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_results_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_results_s::sml_results_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_results_s::~sml_results_s()
+ {
+ delete cmdID;
+ delete msgRef;
+ delete cmdRef;
+ delete meta;
+ delete targetRef;
+ delete sourceRef;
+ GenericListDelete( itemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_results_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case EMsgRef:
+ CHECK_NO_DUPLICATE(msgRef);
+ msgRef = new (ELeave) SmlPcdata_t();
+ return msgRef;
+
+ case ECmdRef:
+ CHECK_NO_DUPLICATE(cmdRef);
+ cmdRef = new (ELeave) SmlPcdata_t();
+ return cmdRef;
+
+ case ETargetRef:
+ CHECK_NO_DUPLICATE(targetRef);
+ targetRef = new (ELeave) SmlPcdata_t();
+ return targetRef;
+
+ case ESourceRef:
+ CHECK_NO_DUPLICATE(sourceRef);
+ sourceRef = new (ELeave) SmlPcdata_t();
+ return sourceRef;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EItem:
+ return AddItemL(&itemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_results_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EResults:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlResultsCmdFuncL(this);
+ return EPopAndDestroy;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_results_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_search_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_search_s::sml_search_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_search_s::~sml_search_s()
+ {
+ delete cmdID;
+ delete cred;
+ delete target;
+ GenericListDelete( sourceList );
+ delete lang;
+ delete meta;
+ delete data;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_search_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case ENoResp:
+ CHECK_NO_DUPLICATE(flags & SmlNoResp_f);
+ flags |= SmlNoResp_f;
+ break;
+
+ case ENoResults:
+ CHECK_NO_DUPLICATE(flags & SmlNoResults_f);
+ flags |= SmlNoResults_f;
+ break;
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case ETarget:
+ CHECK_NO_DUPLICATE(target);
+ target = new (ELeave) SmlTarget_t();
+ return target;
+
+ case ESource:
+ return AddSourceListL(&sourceList);
+
+ case ELang:
+ CHECK_NO_DUPLICATE(lang);
+ lang = new (ELeave) SmlPcdata_t();
+ return lang;
+
+ case EMeta:
+ CHECK_NO_DUPLICATE(meta);
+ meta = new (ELeave) SmlPcdata_t(/*SML_PCDATA_EXTENSION, SML_EXT_METINF*/);
+ meta->contentType = SML_PCDATA_EXTENSION;
+ meta->extension = SML_EXT_METINF;
+ return meta;
+
+ case EData:
+ CHECK_NO_DUPLICATE(data);
+ data = new (ELeave) SmlPcdata_t();
+ return data;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_search_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case ESearch:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlSearchCmdFuncL(this);
+ return EPopAndDestroy;
+
+ case ENoResp:
+ case ENoResults:
+ return ENone;
+
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_search_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_target_ref_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_target_ref_list_s::sml_target_ref_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_target_ref_list_s::~sml_target_ref_list_s()
+ {
+ delete targetRef;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_source_ref_list_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_ref_list_s::sml_source_ref_list_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_source_ref_list_s::~sml_source_ref_list_s()
+ {
+ delete sourceRef;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_status_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_status_s::sml_status_s()
+ {
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C sml_status_s::~sml_status_s()
+ {
+ delete cmdID;
+ delete msgRef;
+ delete cmdRef;
+ delete cmd;
+ GenericListDelete( targetRefList );
+ GenericListDelete( sourceRefList );
+ delete cred;
+ delete chal;
+ delete data;
+
+ GenericListDelete( itemList );
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_status_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ECmdID:
+ CHECK_NO_DUPLICATE(cmdID);
+ cmdID = new (ELeave) SmlPcdata_t();
+ return cmdID;
+
+ case EMsgRef:
+ CHECK_NO_DUPLICATE(msgRef);
+ msgRef = new (ELeave) SmlPcdata_t();
+ return msgRef;
+
+ case ECmdRef:
+ CHECK_NO_DUPLICATE(cmdRef);
+ cmdRef = new (ELeave) SmlPcdata_t();
+ return cmdRef;
+
+ case ECmd:
+ CHECK_NO_DUPLICATE(cmd);
+ cmd = new (ELeave) SmlPcdata_t();
+ return cmd;
+
+ case ETargetRef:
+ return AddTargetRefL(&targetRefList);
+
+ case ESourceRef:
+ return AddSourceRefL(&sourceRefList);
+
+ case ECred:
+ CHECK_NO_DUPLICATE(cred);
+ cred = new (ELeave) SmlCred_t();
+ return cred;
+
+ case EChal:
+ CHECK_NO_DUPLICATE(chal);
+ chal = new (ELeave) SmlChal_t();
+ return chal;
+
+ case EData:
+ CHECK_NO_DUPLICATE(data);
+ data = new (ELeave) SmlPcdata_t();
+ return data;
+
+ case EItem:
+ return AddItemL(&itemList);
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_status_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case EStatus:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlStatusCmdFuncL(this);
+ return EPopAndDestroy;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_status_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_syncml_s
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CXMLElement* sml_syncml_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case ESyncHdr:
+ return new (ELeave) SmlSyncHdr_t();
+
+ case ESyncBody:
+ return new (ELeave) SmlSyncBody_t();
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CXMLElement::TAction sml_syncml_s::EndElementL( TAny* /*aCallbacks*/, TUint8 /*aTag*/ )
+ {
+ return EPopAndDestroy;
+ }
+
+// ------------------------------------------------------------------------------------------------
+EXPORT_C TBool sml_syncml_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// sml_syncml_body_s
+// ------------------------------------------------------------------------------------------------
+CXMLElement* sml_syncml_body_s::BeginElementL( TUint8 aTag, const TXMLElementParams& /*aParams*/ )
+ {
+ switch( aTag )
+ {
+ case EFinal:
+ CHECK_NO_DUPLICATE(flags & SmlFinal_f);
+ flags |= SmlFinal_f;
+ break;
+
+ default:
+ CXMLElement* e;
+ if( !CreateBasicCommandL(e, aTag) )
+ {
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+ return e;
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------------------------
+CXMLElement::TAction sml_syncml_body_s::EndElementL( TAny* aCallbacks, TUint8 aTag )
+ {
+ switch( aTag )
+ {
+ case ESyncBody:
+ ((MWBXMLSyncMLCallbacks*)aCallbacks)->smlEndMessageFuncL((this->flags & SmlFinal_f) != 0);
+ return EPopAndDestroy;
+
+ case EFinal:
+ return ENone;
+
+ default:
+ User::Leave(KWBXMLParserErrorInvalidTag);
+ }
+
+ return EPop;
+ }
+
+// ------------------------------------------------------------------------------------------------
+TBool sml_syncml_body_s::NeedsCleanup() const
+ {
+ return ETrue;
+ }