/*
* 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
{
User::Free(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;
}