remotemgmt_plat/syncml_ds_customization_api/tsrc/synchconfigvalidator/customdatasynchconfigvalidatorengine_p.cpp
branchRCL_3
changeset 26 19bba8228ff0
parent 25 b183ec05bd8c
child 27 5cc2995847ea
--- 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