diff -r 000000000000 -r b497e44ab2fc syncmlfw/ds/dsutils/dbcaps/src/nsmldbcaps.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/ds/dsutils/dbcaps/src/nsmldbcaps.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,522 @@ +/* +* Copyright (c) 2005 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: Sources +* +*/ + + +// ------------------------------------------------------------------------------------------------ +// Includes +// ------------------------------------------------------------------------------------------------ +#include + +#include +#include "nsmldbcaps.h" +#include "smldevinfdtd.h" +#include "smlmetinfdtd.h" +#include "smldevinftags.h" + + +// ------------------------------------------------------------------------------------------------ +// CNSmlDbCaps +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlDbCaps* CNSmlDbCaps::NewL() + { + //_DBG_FILE("CNSmlDbCaps::NewL(): begin"); + CNSmlDbCaps* self = CNSmlDbCaps::NewLC(); + CleanupStack::Pop(); // self + //_DBG_FILE("CNSmlDbCaps::NewL(): end"); + return self; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlDbCaps* CNSmlDbCaps::NewLC() + { + //_DBG_FILE("CNSmlDbCaps::NewLC(): begin"); + CNSmlDbCaps* self = new (ELeave) CNSmlDbCaps(); + CleanupStack::PushL(self); + self->ConstructL(); + //_DBG_FILE("CNSmlDbCaps::NewLC(): end"); + return self; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +CNSmlDbCaps::CNSmlDbCaps() + { + //_DBG_FILE("CNSmlDbCaps::CNSmlDbCaps(): begin"); + //_DBG_FILE("CNSmlDbCaps::CNSmlDbCaps(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +void CNSmlDbCaps::ConstructL() + { + //_DBG_FILE("CNSmlDbCaps::ConstructL(): begin"); + iDatastore = new (ELeave) sml_devinf_datastore_s(); + //_DBG_FILE("CNSmlDbCaps::ConstructL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlDbCaps::~CNSmlDbCaps() + { + //_DBG_FILE("CNSmlDbCaps::~CNSmlDbCaps(): begin"); + delete iDatastore; +// delete iCtCaps; + delete iFilterCaps; + //_DBG_FILE("CNSmlDbCaps::~CNSmlDbCaps(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C SmlDevInfDatastorePtr_t CNSmlDbCaps::DatastoreL() const + { + //_DBG_FILE("CNSmlDbCaps::Datastore(): begin"); + //_DBG_FILE("CNSmlDbCaps::Datastore(): end"); + SmlDevInfDatastorePtr_t temp = iDatastore; + iDatastore = new (ELeave) sml_devinf_datastore_s(); + return temp; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C SmlDevInfCtCapListPtr_t CNSmlDbCaps::CtCaps() const + { + //_DBG_FILE("CNSmlDbCaps::CtCaps(): begin"); + //_DBG_FILE("CNSmlDbCaps::CtCaps(): end"); + SmlDevInfCtCapListPtr_t temp = iDatastore->ctcap; + iDatastore->ctcap = 0; + return temp; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C SmlDevInfFilterCapListPtr_t CNSmlDbCaps::FilterCaps() const + { + SmlDevInfFilterCapListPtr_t temp = iFilterCaps; + iFilterCaps = 0; + return temp; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CNSmlDbCaps::SetRxPrefL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + //_DBG_FILE("CNSmlDbCaps::SetRxPrefL(): begin"); + if( !iDatastore->rxpref ) + { + iDatastore->rxpref = CreateXmitL(aCtType, aVerCt); + } + else + { + iDatastore->rxpref->cttype->SetDataL(aCtType); + iDatastore->rxpref->verct->SetDataL(aVerCt); + } + //_DBG_FILE("CNSmlDbCaps::SetRxPrefL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CNSmlDbCaps::AddRxL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + //_DBG_FILE("CNSmlDbCaps::AddRxL(): begin"); + SmlDevInfXmitListPtr_t node = new (ELeave) SmlDevInfXmitList_t(); + CleanupStack::PushL(node); + node->data = CreateXmitL(aCtType, aVerCt); + GenericListAddL(&iDatastore->rx, node); + CleanupStack::Pop(); // node + //_DBG_FILE("CNSmlDbCaps::AddRxL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CNSmlDbCaps::SetTxPrefL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + //_DBG_FILE("CNSmlDbCaps::SetTxPrefL(): begin"); + if( !iDatastore->txpref ) + { + iDatastore->txpref = CreateXmitL(aCtType, aVerCt); + } + else + { + iDatastore->txpref->cttype->SetDataL(aCtType); + iDatastore->txpref->verct->SetDataL(aVerCt); + } + //_DBG_FILE("CNSmlDbCaps::SetTxPrefL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CNSmlDbCaps::AddTxL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + //_DBG_FILE("CNSmlDbCaps::AddTxL(): begin"); + SmlDevInfXmitListPtr_t node = new (ELeave) SmlDevInfXmitList_t(); + CleanupStack::PushL(node); + node->data = CreateXmitL(aCtType, aVerCt); + GenericListAddL(&iDatastore->tx, node); + CleanupStack::Pop(); // node + //_DBG_FILE("CNSmlDbCaps::AddTxL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CNSmlDbCaps::SetSyncType( ENSmlSyncTypes aType ) + { + //_DBG_FILE("CNSmlDbCaps::SetSyncType(): begin"); + if( aType == EAllTypes ) + { + iSyncTypes = 0xffffffff; + } + else + { + iSyncTypes |= (1<ctcap); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C void CNSmlDbCaps::AddFilterRxL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + SmlDevInfXmitListPtr_t filter = new (ELeave) SmlDevInfXmitList_t(); + CleanupStack::PushL(filter); + filter->data = CreateXmitL(aCtType, aVerCt); + GenericListAddL(&iDatastore->filterrx, filter); + CleanupStack::Pop(); // filter + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C CNSmlFilterCap* CNSmlDbCaps::AddFilterCapLC( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + SmlDevInfFilterCapListPtr_t filtercap = new (ELeave) SmlDevInfFilterCapList_t(); + CleanupStack::PushL(filtercap); + GenericListAddL(&iFilterCaps, filtercap); + CleanupStack::Pop(); // filtercap + + filtercap->data = new (ELeave) SmlDevInfFilterCap_t(); + filtercap->data->cttype = new (ELeave) SmlPcdata_t(); + filtercap->data->cttype->SetDataL(aCtType); + filtercap->data->verct = new (ELeave) SmlPcdata_t(); + filtercap->data->verct->SetDataL(aVerCt); + + CNSmlFilterCap* f = new (ELeave) CNSmlFilterCap(filtercap->data); + CleanupStack::PushL(f); + return f; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C void CNSmlDbCaps::SetSupportHierarchicalSyncL() + { + if ( !iDatastore->supportHierarchicalSync ) + { + iDatastore->supportHierarchicalSync = new (ELeave) SmlPcdata_t(); + } + iDatastore->supportHierarchicalSync->SetDataL(TPtrC8()); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C void CNSmlDbCaps::SetSourceRefL( const TDesC8& aSourceRef ) + { + if ( !iDatastore->sourceref ) + { + iDatastore->sourceref = new (ELeave) SmlPcdata_t(); + } + iDatastore->sourceref->SetDataL(aSourceRef); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C void CNSmlDbCaps::SetDisplayNameL( const TDesC8& aDispName ) + { + if ( !iDatastore->displayname ) + { + iDatastore->displayname = new (ELeave) SmlPcdata_t(); + } + iDatastore->displayname->SetDataL(aDispName); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ + +EXPORT_C void CNSmlDbCaps::SetMaxGuidSizeL( const TDesC8& aMaxGuid ) + { + if ( !iDatastore->maxguidsize ) + { + iDatastore->maxguidsize = new (ELeave) SmlPcdata_t(); + } + iDatastore->maxguidsize->SetDataL(aMaxGuid); + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlCtCap* CNSmlDbCaps::AddCtCapLC() + { + //_DBG_FILE("CNSmlDbCaps::AddCtCapL(): begin"); + SmlDevInfCtCapListPtr_t cpcapptr = new (ELeave) SmlDevInfCtCapList_t(); + CleanupStack::PushL(cpcapptr); + GenericListAddL(&iDatastore->ctcap, cpcapptr); + CleanupStack::Pop(); // cpcapptr + cpcapptr->data = new (ELeave) SmlDevInfCtCap_t(); + CNSmlCtCap* c = new (ELeave) CNSmlCtCap(cpcapptr->data); + CleanupStack::PushL(c); + //_DBG_FILE("CNSmlDbCaps::AddCtCapL(): end"); + return c; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +SmlPcdataPtr_t CNSmlDbCaps::CreatePcdataL( const TDesC8& aData ) + { + //_DBG_FILE("CNSmlDbCaps::CreatePcdataL(): begin"); + SmlPcdataPtr_t temp = new (ELeave) SmlPcdata_t(); + CleanupStack::PushL(temp); + temp->SetDataL(aData); + CleanupStack::Pop(); // temp + //_DBG_FILE("CNSmlDbCaps::CreatePcdataL(): end"); + return temp; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +SmlDevInfXmitPtr_t CNSmlDbCaps::CreateXmitL( const TDesC8& aCtType, const TDesC8& aVerCt ) + { + //_DBG_FILE("CNSmlDbCaps::CreateXmitL(): begin"); + SmlDevInfXmitPtr_t temp = new (ELeave) SmlDevInfXmit_t(); + CleanupStack::PushL(temp); + temp->cttype = CreatePcdataL(aCtType); + temp->verct = CreatePcdataL(aVerCt); + CleanupStack::Pop(); // temp + //_DBG_FILE("CNSmlDbCaps::CreateXmitL(): end"); + return temp; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C TInt CNSmlDbCaps::ConvertDeviceInfoL( sml_devinf_devinf_s* aDeviceInfo) + { + + SmlDevInfCtCapListPtr_t target = new (ELeave) SmlDevInfCtCapList_t(); + CleanupStack::PushL(target); + target =0; + + TPtrC8 ver; + ver.Set(aDeviceInfo->verdtd->Data()); + + if ( ver.FindC(_L8("1.2")) != KErrNone ) + { + CleanupStack::PopAndDestroy(); // target + return KErrNotSupported; + } + + aDeviceInfo->verdtd->SetDataL( _L8("1.1")); + + for ( SmlDevInfDatastoreListPtr_t datastorePtr = aDeviceInfo->datastore; datastorePtr && datastorePtr->data; datastorePtr = datastorePtr->next ) + { + for ( SmlDevInfCtCapListPtr_t ctcapPtr = datastorePtr->data->ctcap; ctcapPtr && ctcapPtr->data; ctcapPtr = ctcapPtr->next ) + { + SmlDevInfCtCapListPtr_t ctcaps = new (ELeave) SmlDevInfCtCapList_t(); + CleanupStack::PushL( ctcaps); + GenericListAddL(&target, ctcaps); + CleanupStack::Pop(); // ctcaps + ctcaps->data = new (ELeave) SmlDevInfCtCap_t(); + ctcaps->data->cttype = new (ELeave) SmlPcdata_t(); + ctcaps->data->cttype->SetDataL ( ctcapPtr->data->cttype->Data() ); + for ( SmlDevInfPropertyListPtr_t propPtr = ctcapPtr->data->property; propPtr && propPtr->data; propPtr = propPtr->next) + { + SmlDevInfCTDataPropListPtr_t props = new (ELeave) SmlDevInfCTDataPropList_t(); + CleanupStack::PushL( props ); + GenericListAddL(&ctcaps->data->prop, props); + CleanupStack::Pop(); // props + props->data = new (ELeave) SmlDevInfCTDataProp_t(); + props->data->prop = new (ELeave) SmlDevInfCTData_t(); + props->data->prop->name = new (ELeave) SmlPcdata_t(); + props->data->prop->name->SetDataL ( propPtr->data->propname->Data() ); + if ( propPtr->data->datatype ) + { + props->data->prop->datatype = new (ELeave) SmlPcdata_t(); + props->data->prop->datatype->SetDataL ( propPtr->data->datatype->Data() ); + } + if ( propPtr->data->displayname) + { + props->data->prop->dname = new (ELeave) SmlPcdata_t(); + props->data->prop->dname->SetDataL ( propPtr->data->displayname->Data() ); + } + if ( propPtr->data->maxsize) + { + props->data->prop->size = new (ELeave) SmlPcdata_t(); + props->data->prop->size->SetDataL ( propPtr->data->maxsize->Data() ); + } + for ( SmlPcdataListPtr_t valenumPtr = propPtr->data->valenum; valenumPtr && valenumPtr->data; valenumPtr = valenumPtr->next) + { + SmlPcdataListPtr_t valenum = new (ELeave) SmlPcdataList_t(); + CleanupStack::PushL(valenum); + GenericListAddL(&props->data->prop->valenum, valenum); + CleanupStack::Pop(); // valenum + valenum->data=new (ELeave) SmlPcdata_t(); + valenum->data->SetDataL ( valenumPtr->data->Data()); + } + for ( SmlDevInfPropParamListPtr_t paramPtr = propPtr->data->propparam; paramPtr && paramPtr->data; paramPtr = paramPtr->next ) + { + SmlDevInfCTDataListPtr_t param = new (ELeave) SmlDevInfCTDataList_t(); + CleanupStack::PushL(param); + GenericListAddL(&props->data->param, param); + CleanupStack::Pop(); // param + param->data = new (ELeave) SmlDevInfCTData_t(); + param->data->name = new (ELeave) SmlPcdata_t(); + param->data->name->SetDataL (paramPtr->data->paramname->Data() ); + if ( paramPtr->data->displayname ) + { + param->data->dname = new (ELeave) SmlPcdata_t(); + param->data->dname->SetDataL (paramPtr->data->displayname->Data() ); + } + if ( paramPtr->data->datatype) + { + param->data->datatype = new (ELeave) SmlPcdata_t(); + param->data->datatype->SetDataL ( paramPtr->data->datatype->Data() ); + } + for (SmlPcdataListPtr_t valenumPtr = paramPtr->data->valenum; valenumPtr && valenumPtr->data; valenumPtr = valenumPtr->next ) + { + SmlPcdataListPtr_t valenum = new (ELeave) SmlPcdataList_t(); + CleanupStack::PushL(valenum); + GenericListAddL(¶m->data->valenum, valenum); + CleanupStack::Pop(); // valenum + valenum->data = new (ELeave) SmlPcdata_t(); + valenum->data->SetDataL ( valenumPtr->data->Data() ); + } + } + } + } + } + aDeviceInfo->ctcap = target; + + CleanupStack::PopAndDestroy(); // target + + return KErrNone; + }; + +// ------------------------------------------------------------------------------------------------ +// CNSmlDbCaps::SetMaxItemsL +// Sets maxitems element. Same as: iDatastore->dsmem->maxid +// ------------------------------------------------------------------------------------------------ +void CNSmlDbCaps::SetMaxItemsL( const TDesC8& aMaxItems ) + { + if ( !iDatastore->dsmem ) + { + iDatastore->dsmem = new (ELeave) SmlDevInfDSMem_t(); + } + if ( !iDatastore->dsmem->maxid ) + { + iDatastore->dsmem->maxid = new (ELeave) SmlPcdata_t(); + } + iDatastore->dsmem->maxid->SetDataL( aMaxItems ); + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlDbCaps::SetMaxSizeL +// sets maxsize element. Same as: iDatastore->dsmem->maxmem +// ------------------------------------------------------------------------------------------------ +void CNSmlDbCaps::SetMaxSizeL( const TDesC8& aMaxSize ) + { + if ( !iDatastore->dsmem ) + { + iDatastore->dsmem = new (ELeave) SmlDevInfDSMem_t(); + } + if ( !iDatastore->dsmem->maxmem ) + { + iDatastore->dsmem->maxmem = new (ELeave) SmlPcdata_t(); + } + iDatastore->dsmem->maxmem->SetDataL( aMaxSize ); + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlDbCaps::Datastore +// Returns datastore structure. +// ------------------------------------------------------------------------------------------------ +const sml_devinf_datastore_s* CNSmlDbCaps::Datastore() const + { + return iDatastore; + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlDbCaps::FilterCapsList +// Returns pointer to filtercap structure. +// ------------------------------------------------------------------------------------------------ +const sml_devinf_filtercaplist_s* CNSmlDbCaps::FilterCapsList() const + { + return iFilterCaps; + } + +// ------------------------------------------------------------------------------------------------ +// +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlFilterCapsHandler* CNSmlDbCaps::CreateFilterCapsHandlerL() const + { + //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): begin"); + //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): end"); + return new (ELeave) CNSmlFilterCapsHandler(iFilterCaps); + } + +// End of File