--- 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 <etel3rdparty.h>
-#include <sysutil.h>
-#include <centralrepository.h>
-#include <ecom/ecom.h>
-#include <e32def.h>
-#include <utf.h>
-#include <nsmloperatordatacrkeys.h>
-#include <nsmloperatorerrorcrkeys.h>
-#include <syncmlclientds.h>
-
-#include <d32dbms.h>
-#include <f32file.h>
-
-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<TSmlProfileId> 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<TSmlTaskId> 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<const TUint16*>(columnName.utf16()), columnName.length());
-
- QString syncSettingsDbName = "\\private\\100012a5\\DBS_101F99FB_nsmldssettings.db";
- QString syncSettingsDbTableProfiles = "Profiles";
- TPtrC syncSettingsDbNamePtr (static_cast<const TUint16*>(syncSettingsDbName.utf16()), syncSettingsDbName.length());
- TPtrC syncSettingsDbTableProfilesPtr (static_cast<const TUint16*>(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<const TUint16*>(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<CDeviceInfo> deviceInfo(CDeviceInfo::NewL());
- TBuf<CTelephony::KPhoneSerialNumberSize> imei(deviceInfo->imei());
- return QString::fromUtf16(imei.Ptr(), imei.Length());
-}
-
-// ----------------------------------------------------------------------------
-QString CustomDataSynchConfigValidatorEngine::model() const
-{
- QScopedPointer<CDeviceInfo> deviceInfo(CDeviceInfo::NewL());
- TBuf<CTelephony::KPhoneModelIdSize> model(deviceInfo->model());
- return QString::fromUtf16(model.Ptr(), model.Length());
-}
-
-// ----------------------------------------------------------------------------
-QString CustomDataSynchConfigValidatorEngine::manufacturer() const
-{
- QScopedPointer<CDeviceInfo> deviceInfo(CDeviceInfo::NewL());
- TBuf<CTelephony::KPhoneModelIdSize> manufacturer(deviceInfo->manufacturer());
- return QString::fromUtf16(manufacturer.Ptr(), manufacturer.Length());
-}
-
-// ----------------------------------------------------------------------------
-QString CustomDataSynchConfigValidatorEngine::imsi() const
-{
- QScopedPointer<CDeviceInfo> deviceInfo(CDeviceInfo::NewL());
- TBuf<CTelephony::KIMSISize> imsi(deviceInfo->imsi());
- return QString::fromUtf16(imsi.Ptr(), imsi.Length());
-}
-
-// ----------------------------------------------------------------------------
-QString CustomDataSynchConfigValidatorEngine::softwareVersion() const
-{
- QString version;
- TBuf<KSysUtilVersionTextLength> 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<RImplInfoPtrArray*> (aArray))->ResetAndDestroy();
- (static_cast<RImplInfoPtrArray*> (aArray))->Close();
-}
-
-// End of file