diff -r b183ec05bd8c -r 19bba8228ff0 remotemgmt_plat/syncml_ds_customization_api/tsrc/synchconfigvalidator/customdatasynchconfigvalidatorengine_p.cpp --- a/remotemgmt_plat/syncml_ds_customization_api/tsrc/synchconfigvalidator/customdatasynchconfigvalidatorengine_p.cpp Tue Aug 31 16:04:06 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,463 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - -// CLASS HEADER -#include "customdatasynchconfigvalidatorengine_p.h" - -// INTERNAL INCLUDES -#include "customdatasynchconfigvalidatorenginewrapper.h" -#include "customdatasynchdeviceinfo.h" - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -const TUid KCRUidDatasyncKeys = { 0x2000CF7E }; -const TUint32 KDataSynchCustomProfileKey = 0x0; -const QString SERVERID_DB_COLUMN_NAME = "ServerId"; -const QString PROFILEID_DB_COLUMN_NAME = "Id"; - -// Utility clean up function -void CleanupEComArray(TAny* aArray); - -// ---------------------------------------------------------------------------- -CustomDataSynchConfigValidatorEngine::CustomDataSynchConfigValidatorEngine( - CustomDataSynchConfigValidatorEngineWrapper *parent) : - q(parent) -{ -} - -// ---------------------------------------------------------------------------- -CustomDataSynchConfigValidatorEngine::~CustomDataSynchConfigValidatorEngine() -{ -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::dataSynchCenrepExists() -{ - int initError = KErrGeneral; - TRAP(initError, - CRepository* dataSynchCenrep = CRepository::NewL(KCRUidDatasyncKeys); - delete dataSynchCenrep; - ) - return (initError == KErrNone ? true : false); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::operatordataSynchCenrepExists() -{ - int initError = KErrGeneral; - TRAP(initError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - delete operatordataSynchCenrep; - ) - return (initError == KErrNone ? true : false); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::operatordataSynchErrorCenrepExists() -{ - int initError = KErrGeneral; - TRAP(initError, - CRepository* operatordataSynchErrorCenrep = CRepository::NewL(KCRUidOperatorDatasyncErrorKeys); - delete operatordataSynchErrorCenrep; - ) - return (initError == KErrNone ? true : false); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::customSynchProfilesAllowed() -{ - int initError = KErrGeneral;//CRepository::Get or CRepository::NewL - int customProfileKeyValue = 0;//value 1 means allowed - TRAP(initError, - CRepository* dataSynchCenrep = CRepository::NewL(KCRUidDatasyncKeys); - initError = dataSynchCenrep->Get(KDataSynchCustomProfileKey,customProfileKeyValue); - delete dataSynchCenrep; - ) - return (initError == KErrNone && customProfileKeyValue == 1 ? true : false); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::configuredContactsAdapterExists( - QString & errorMsg) -{ - int initError = KErrGeneral;//CRepository::Get or CRepository::NewL - int pluginloadError = KErrGeneral; - - TUid adapterUid = {0x101F6DDD};//platformcontactadapter Uid - - TRAP(initError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - int adapterUidInt = 0; - int errorCode = operatordataSynchCenrep->Get(KNsmlOpDsOperatorAdapterUid,adapterUidInt); - delete operatordataSynchCenrep; - if( adapterUidInt > 0 ) - {//if greater than 0 custom contact adapter is 'likely' to be used - adapterUid = TUid::Uid(adapterUidInt); - } - ) - TRAP(pluginloadError, - TAny* any = REComSession::CreateImplementationL(adapterUid, _FOFF(CustomDataSynchConfigValidatorEngine, iEComDtorKey)); - REComSession::DestroyedImplementation(iEComDtorKey); - ) - bool success = (initError == KErrNone && pluginloadError == KErrNone) ? true : false; - if(!success) - { - errorMsg = "Problems loading adapter UID: 0x"; - errorMsg = errorMsg+QString::number(adapterUid.iUid,16).toUpper(); - } - - return success; -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::configuredCustomSynchProfileExists(QString & errorMsg) -{ - int cenrepError = KErrGeneral;//CRepository::Get or CRepository::NewL - bool serverIdmatchFound = false; - bool dbOk = false; - - QString cenrepServerIdString; - QString profileServerId; - - TRAP(cenrepError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - TBuf8<50> cenrepServerIdBuf; - cenrepError = operatordataSynchCenrep->Get(KNsmlOpDsOperatorSyncServerId,cenrepServerIdBuf); - delete operatordataSynchCenrep; - HBufC* cenrepServerIdHBufC; - cenrepServerIdHBufC = CnvUtfConverter::ConvertToUnicodeFromUtf8L(cenrepServerIdBuf); - cenrepServerIdString = QString::fromUtf16(cenrepServerIdHBufC->Ptr(), cenrepServerIdHBufC->Length()); - delete cenrepServerIdHBufC; - ) - dbOk = getStringValueFromSyncProfileSettingsDb(profileServerId,SERVERID_DB_COLUMN_NAME); - serverIdmatchFound = cenrepServerIdString.compare(profileServerId)==0 ? true : false; - - bool success = (cenrepError == KErrNone && dbOk) ? serverIdmatchFound : false; - if(!success){ - errorMsg = "Problems with Cenrep defined ServerId:["+cenrepServerIdString+"]"; - } - return success; -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::contactAdapterCenrepValueToProfileMatches(QString & errorMsg) -{ - int cenrepError = KErrGeneral;//CRepository::Get or CRepository::NewL - - TUid cenrepAdapterUid = { 0x101F6DDD };//platformcontactadapter Uid - int adapterUidInt = 0; - TRAP(cenrepError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - cenrepError = operatordataSynchCenrep->Get(KNsmlOpDsOperatorAdapterUid,adapterUidInt); - delete operatordataSynchCenrep; - ) - if( adapterUidInt > 0 ) - {//if greater than 0 custom contact adapter is 'likely' to be used - cenrepAdapterUid = TUid::Uid(adapterUidInt); - } - return adapterCenrepValueToProfileMatches(errorMsg, cenrepAdapterUid); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::myprofileAdapterCenrepValueToProfileMatches(QString & errorMsg) -{ - int cenrepError = KErrGeneral;//CRepository::Get or CRepository::NewL - TUid cenrepAdapterUid = { 0x0 }; - int adapterUidInt = 0; - TRAP(cenrepError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - cenrepError = operatordataSynchCenrep->Get(KNsmlOpDsProfileAdapterUid,adapterUidInt); - delete operatordataSynchCenrep; - ) - if( adapterUidInt > 0 ) - {//if greater than 0 custom contact adapter is 'likely' to be used - cenrepAdapterUid = TUid::Uid(adapterUidInt); - } - return adapterCenrepValueToProfileMatches(errorMsg, cenrepAdapterUid); -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::devInfoExtensionPluginAvailable() -{ - TUid devInfoExtensionPluginUid = { 0x2002DC7C }; - int err = KErrGeneral; - bool pluginExists = false; - RImplInfoPtrArray implInfoArray; - TCleanupItem cleanup( CleanupEComArray, &implInfoArray ); - TRAP(err, - CleanupStack::PushL( cleanup ); - REComSession::ListImplementationsL( - devInfoExtensionPluginUid, implInfoArray ); - if( err == KErrNone && implInfoArray.Count() > 0 ) - { - pluginExists = true; - } - - CleanupStack::PopAndDestroy(); // implInfoArray - ) - return pluginExists; -} - -// -// Helper functions -// -// -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::adapterCenrepValueToProfileMatches(QString & errorMsg, TUid adapterUid) -{ - int profileOpenError = KErrGeneral; - bool adapterMatchFound = false; - - int dbProfileId = operatorProfileIdFromProfilesDB(); - if(dbProfileId<0) - {//No profile Id or cenrep server Id could not found - errorMsg = "Test cannot proceed. No profile id was acquired or cenrepServerId was not configured."; - return false;//RSyncMLDataSyncProfile.OpenL panics - } - //Get Contact Adapter UID from synch profile - TRAP(profileOpenError, - RSyncMLSession syncMLSession; - RArray profiles; - syncMLSession.OpenL(); - CleanupClosePushL(syncMLSession); - // Get the list of available profiles into an array - syncMLSession.ListProfilesL(profiles, ESmlDataSync); - QString dataProviderString = NULL; - QString serverDataSourceName; - - for(int i=0; i < profiles.Count(); i++) - { - RSyncMLDataSyncProfile profile; - profile.OpenL(syncMLSession,profiles[i],ESmlOpenRead); - if (!profileOpenError) {//-42 PermissionDenied -> Capabilities problem - CleanupClosePushL(profile); - RArray profileTasks; - CleanupClosePushL(profileTasks); - profile.ListTasksL(profileTasks); - for (int j = 0; j < profileTasks.Count(); j++) { - RSyncMLTask task; - task.OpenL(profile, profileTasks[j]); - CleanupClosePushL(task); - if(task.Profile() == dbProfileId) - { - int taskProviderInt = task.DataProvider(); - int cenrepProviderInt = adapterUid.iUid; - if(task.DataProvider()==adapterUid.iUid) - { - serverDataSourceName = QString((QChar*) task.ServerDataSource().Ptr(), - task.ServerDataSource().Length()); - adapterMatchFound = true; - } - } - CleanupStack::PopAndDestroy(&task); - } - CleanupStack::PopAndDestroy(&profileTasks); - CleanupStack::PopAndDestroy(&profile); - } - } - if(profileOpenError==KErrNone) - { - profiles.Close(); - } - CleanupStack::PopAndDestroy(&syncMLSession); - ) - bool success = (profileOpenError == KErrNone) ? adapterMatchFound : false; - if(!success) - { - errorMsg = "No match found."; - errorMsg = errorMsg + "\n\n [dbProfileId]=("+QString::number(dbProfileId)+")"; - errorMsg = errorMsg + "\n [cenrepAdapterUid]=\n("+"0x"+QString::number(adapterUid.iUid,16).toUpper()+")"; - errorMsg = errorMsg + "\n\n [profileOpenError]=("+QString::number(profileOpenError)+")"; - } - return success; -} - -// ---------------------------------------------------------------------------- -bool CustomDataSynchConfigValidatorEngine::getStringValueFromSyncProfileSettingsDb(QString& value,QString columnName,QString whereTypeConditionForSql) -{ - //profileDbOpenError can be caused by RFs,RDbs,RDbNamedDatabase,RDbTable or RDbView startup sequences - int profileDbOpenError = KErrGeneral; - bool resultsFromDbWithQuery = false; - - TPtrC columnNamePtr (static_cast(columnName.utf16()), columnName.length()); - - QString syncSettingsDbName = "\\private\\100012a5\\DBS_101F99FB_nsmldssettings.db"; - QString syncSettingsDbTableProfiles = "Profiles"; - TPtrC syncSettingsDbNamePtr (static_cast(syncSettingsDbName.utf16()), syncSettingsDbName.length()); - TPtrC syncSettingsDbTableProfilesPtr (static_cast(syncSettingsDbTableProfiles.utf16()), syncSettingsDbTableProfiles.length()); - - //Query & where condition handling - QString sqlGetProfileQuery = "SELECT * FROM Profiles"; - if(whereTypeConditionForSql.length()>0) - { - sqlGetProfileQuery = sqlGetProfileQuery+" WHERE "+whereTypeConditionForSql; - } - TPtrC sqlQueryPtr (static_cast(sqlGetProfileQuery.utf16()), sqlGetProfileQuery.length()); - - //DB INIT - RDbNamedDatabase database; - RFs fsSession; - RDbs rdbSession; - RDbTable dbTableProfiles; - CDbColSet* dbColSet; - RDbView dbView; - TRAP(profileDbOpenError, - //DB CONNECT - profileDbOpenError = fsSession.Connect(); - CleanupClosePushL(fsSession); - profileDbOpenError = rdbSession.Connect(); - CleanupClosePushL(rdbSession); - int i = 0; - profileDbOpenError = KErrGeneral;//else DBMS 2 panic is rised in dbTableProfiles.Open - while (i < 10 && profileDbOpenError != KErrNone) - {//100ms synchronous waits max. 1sec - profileDbOpenError = database.Open(fsSession,syncSettingsDbNamePtr); - User::After(100000); - i++; - } - CleanupClosePushL(database); - profileDbOpenError = dbTableProfiles.Open( database, syncSettingsDbTableProfilesPtr ); - CleanupClosePushL(dbTableProfiles); - - //DB QUERY - profileDbOpenError = dbView.Prepare( database, TDbQuery( sqlQueryPtr ), dbView.EReadOnly ); - CleanupClosePushL(dbView); - dbColSet = dbTableProfiles.ColSetL(); - CleanupStack::PushL(dbColSet); - - while(profileDbOpenError!=KErrArgument&&dbView.NextL()) - {//if results and no db error - resultsFromDbWithQuery = true; - dbView.GetL(); - if(columnName.compare(PROFILEID_DB_COLUMN_NAME)==0) - {//Uint - TUint valueFromDb = dbView.ColUint( dbColSet->ColNo( columnNamePtr )); - value.setNum(valueFromDb); - } - else if(columnName.compare(SERVERID_DB_COLUMN_NAME)==0) - {//String types - QString valueFromDb ((QChar*)dbView.ColDes( dbColSet->ColNo( columnNamePtr )).Ptr(), - dbView.ColDes(dbColSet->ColNo( columnNamePtr )).Length()); - value=valueFromDb; - } - } - //DB CLOSE - CleanupStack::PopAndDestroy(dbColSet); - CleanupStack::PopAndDestroy(5,&fsSession); - ) - - return profileDbOpenError == KErrNone ? resultsFromDbWithQuery : false; -} - -// ---------------------------------------------------------------------------- -int CustomDataSynchConfigValidatorEngine::operatorProfileIdFromProfilesDB() -{ - int profileId = -1;//Return this value if problems during fetch - int cenrepError = KErrGeneral; //CRepository::Get or CRepository::NewL - bool dbOk = false; - - //Find right Synch profile based on trusted cenrep configured Server Id - QString profileIdString; - QString cenrepServerIdString; - - TRAP(cenrepError, - CRepository* operatordataSynchCenrep = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys); - TBuf8<50> cenrepServerIdBuf; - cenrepError = operatordataSynchCenrep->Get(KNsmlOpDsOperatorSyncServerId,cenrepServerIdBuf); - delete operatordataSynchCenrep; - HBufC* cenrepServerIdHBufC; - cenrepServerIdHBufC = CnvUtfConverter::ConvertToUnicodeFromUtf8L(cenrepServerIdBuf); - cenrepServerIdString = QString::fromUtf16(cenrepServerIdHBufC->Ptr(), cenrepServerIdHBufC->Length()); - delete cenrepServerIdHBufC; - ) - if(cenrepServerIdString.compare("")==0) - {//protect against DBMS panic 2 - return profileId;//-1 - } - QString whereCondition = SERVERID_DB_COLUMN_NAME+"='"+cenrepServerIdString+"'"; - dbOk = getStringValueFromSyncProfileSettingsDb(profileIdString,PROFILEID_DB_COLUMN_NAME,whereCondition); - if(dbOk) - { - profileId = profileIdString.toInt(); - } - return profileId;//error handling needs to be done in calling code -} - -// ---------------------------------------------------------------------------- -QString CustomDataSynchConfigValidatorEngine::imei() const -{ - QScopedPointer deviceInfo(CDeviceInfo::NewL()); - TBuf imei(deviceInfo->imei()); - return QString::fromUtf16(imei.Ptr(), imei.Length()); -} - -// ---------------------------------------------------------------------------- -QString CustomDataSynchConfigValidatorEngine::model() const -{ - QScopedPointer deviceInfo(CDeviceInfo::NewL()); - TBuf model(deviceInfo->model()); - return QString::fromUtf16(model.Ptr(), model.Length()); -} - -// ---------------------------------------------------------------------------- -QString CustomDataSynchConfigValidatorEngine::manufacturer() const -{ - QScopedPointer deviceInfo(CDeviceInfo::NewL()); - TBuf manufacturer(deviceInfo->manufacturer()); - return QString::fromUtf16(manufacturer.Ptr(), manufacturer.Length()); -} - -// ---------------------------------------------------------------------------- -QString CustomDataSynchConfigValidatorEngine::imsi() const -{ - QScopedPointer deviceInfo(CDeviceInfo::NewL()); - TBuf imsi(deviceInfo->imsi()); - return QString::fromUtf16(imsi.Ptr(), imsi.Length()); -} - -// ---------------------------------------------------------------------------- -QString CustomDataSynchConfigValidatorEngine::softwareVersion() const -{ - QString version; - TBuf versionBuf; - if (SysUtil::GetSWVersion(versionBuf) == KErrNone) { - version = QString::fromUtf16(versionBuf.Ptr(), versionBuf.Length()); - } - return version; -} - -// ---------------------------------------------------------------------------- -// CleanupEComArray function is used for cleanup support of locally declared arrays -void CleanupEComArray(TAny* aArray) -{ - (static_cast (aArray))->ResetAndDestroy(); - (static_cast (aArray))->Close(); -} - -// End of file