--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/dm/settings/src/NSmlDMSettings.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,917 @@
+/*
+* Copyright (c) 2002-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: DM-settings
+*
+*/
+
+
+#include <NSmlDMProfileRes.rsg>
+#include <SyncMLDef.h>
+#include <utf.h>
+
+#include <nsmlconstants.h>
+#include <nsmldebug.h>
+#include <nsmldmconstants.h>
+#include <nsmldmtreedbclient.h>
+#include "nsmldmsettings.h"
+#include "barsc.h"
+#include "bautils.h"
+#include "NSmlDMResourceProfile.h"
+#include "DMprofileContentHandler.h"
+#include "RXMLReader.h"
+#include <centralrepository.h>
+#include "DevManInternalCRKeys.h"
+
+//------------------------------------------------------------------------------
+//
+// CNSmlDMSettings
+//
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::NewL()
+// Creates a new instance of CNSmlDMSettings object.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMSettings* CNSmlDMSettings::NewL()
+ {
+ CNSmlDMSettings* self = CNSmlDMSettings::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::NewLC()
+// Creates a new instance of CNSmlDMSettings object.
+// Pushes and leaves new instance into CleanupStack.
+// Opens/creates settings database.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMSettings* CNSmlDMSettings::NewLC()
+ {
+
+ CNSmlDMSettings* self = new( ELeave ) CNSmlDMSettings;
+ CleanupStack::PushL( self );
+
+ User::LeaveIfError( self->iFsSession.Connect() );
+ User::LeaveIfError( self->iRdbSession.Connect() );
+
+ TParse name;
+
+#ifdef SYMBIAN_SECURE_DBMS
+ name.Set( KNSmlDMSettingsDbName(), NULL, NULL );
+#else
+ name.Set( KNSmlDMSettingsDbName(), KNSmlDatabasesNonSecurePath, NULL );
+#endif
+
+ TInt err = self->iDatabase.Open( self->iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureSOSServerID );
+ if ( err == KErrNotFound )
+ {
+ self->CreateDatabaseL( name.FullName() );
+ self->iDatabase.Open( self->iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureSOSServerID );
+ }
+ else
+ {
+ if ( (err == KErrEof) || (err == KErrCorrupt) ||
+ (err == KErrArgument) || (err == KErrNotSupported))
+ {
+ self->iRdbSession.DeleteDatabase( name.FullName(),
+ KNSmlSOSServerPolicyUID );
+
+ }
+ User::LeaveIfError( err );
+ }
+ User::LeaveIfError( self->iTableProfiles.Open( self->iDatabase, KNSmlDMTableProfiles ) );
+ self->iColSet = self->iTableProfiles.ColSetL();
+ //Upgrade from older releases
+ if( self->iColSet->Count() != KNSmlDMProfileTableColCount )
+ {
+ self->ScanAndRepairRestoredProfilesL();
+ }
+
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::~CNSmlDMSettings()
+// Destructor.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMSettings::~CNSmlDMSettings()
+ {
+ iView.Close();
+ delete iColSet;
+ iTableProfiles.Close();
+ iDatabase.Close();
+ iFsSession.Close();
+ iRdbSession.Close();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ScanAndRepairRestoredProfilesL()
+// Scan And Repair RestoredProfiles in database.
+//------------------------------------------------------------------------------
+EXPORT_C void CNSmlDMSettings::ScanAndRepairRestoredProfilesL()
+{
+ if( iColSet->Count() != KNSmlDMProfileTableColCount )
+ {
+ TBool hiddenMissing = EFalse;
+ TBool lastSyncMissing = EFalse;
+ TBool profilelockMissing = EFalse;
+ if(iColSet->ColNo( KNSmlDMProfileHidden ) == KDbNullColNo)
+ {
+ hiddenMissing = ETrue;
+ iMissingCols.AppendL(TPtrC (KNSmlDMProfileHidden)) ;
+ }
+ if(iColSet->ColNo( KNSmlDMLastSync ) == KDbNullColNo)
+ {
+ lastSyncMissing= ETrue;
+ iMissingCols.AppendL(TPtrC(KNSmlDMLastSync));
+ }
+
+ if(iColSet->ColNo( KNSmlDMProfileLock ) == KDbNullColNo)
+ {
+ profilelockMissing= ETrue;
+ iMissingCols.AppendL(TPtrC(KNSmlDMProfileLock));
+ }
+ //Check for missing column
+ if ( hiddenMissing || lastSyncMissing || profilelockMissing )
+ {
+ CNSmlDMProfileList* oldProfiles = new( ELeave ) CArrayPtrFlat<CNSmlDMProfileListItem>(1);
+ CleanupStack::PushL( PtrArrCleanupItem( CNSmlDMProfileListItem, oldProfiles ) );
+ GetProfileListL(oldProfiles);
+ for ( TInt i = 0; i < oldProfiles->Count(); i++)
+ {
+ TInt profileID = (*oldProfiles)[i]->IntValue( TNSmlDMProfileData( EDMProfileId ) );
+ CNSmlDMProfile* profile = OldProfileL( profileID );
+ profile->CloseDbHandles();
+ iOldProfiles.AppendL(profile);
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLDeleteProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+ TInt err( KErrNone );
+ iDatabase.Begin();
+ sqlStatementPtr.Format( KDMSQLDeleteProfile, profileID );
+ err = iDatabase.Execute( sqlStatementPtr );
+ CleanupStack::PopAndDestroy(); // sqlStatement
+ if ( err < KErrNone )
+ {
+ iDatabase.Rollback();
+ }
+ iDatabase.Commit();
+ iDatabase.Compact();
+ }
+
+ iView.Close();
+ delete iColSet;
+ iColSet = NULL;
+ iTableProfiles.Close();
+ iDatabase.Begin();
+ iDatabase.DropTable(KNSmlDMTableProfiles);
+ iDatabase.DropTable(KDMCreateCommSetTable);
+ iDatabase.DropTable(KNSmlTableVersion);
+ iDatabase.Commit();
+ iDatabase.Compact();
+ CreateDMTablesL();
+ User::LeaveIfError( iTableProfiles.Open( iDatabase, KNSmlDMTableProfiles ) );
+ iColSet = iTableProfiles.ColSetL();
+ CreateHiddenProfilesL();
+ CreateDMProfilesFromXmlL();
+ // Get the server ID if found in resource do not save it
+ RArray<TPtrC> serverIDList;
+ CNSmlDMProfileList* newProfiles = new( ELeave ) CArrayPtrFlat<CNSmlDMProfileListItem>(1);
+ CleanupStack::PushL( PtrArrCleanupItem( CNSmlDMProfileListItem, newProfiles ) );
+ GetProfileListL(newProfiles);
+ for ( TInt i = 0; i < newProfiles->Count(); i++)
+ {
+ // (*newProfiles)[i]->StrValue( TNSmlDMProfileData( EDMProfileServerId );
+ TInt profileID = (*newProfiles)[i]->IntValue( TNSmlDMProfileData( EDMProfileId ) );
+ CNSmlDMProfile* profile = ProfileL( profileID );
+ CleanupStack::PushL( profile );
+
+ serverIDList.AppendL(profile->StrValue( EDMProfileServerId));
+ CleanupStack::PopAndDestroy(profile);
+ }
+
+ newProfiles->ResetAndDestroy();
+ CleanupStack::PopAndDestroy(); //newProfiles
+ // now save the profiles .
+ for( TInt i = 0 ; i<iOldProfiles.Count(); i++ )
+ {
+ CNSmlDMProfile *profile = iOldProfiles[i];
+ profile->ResetID();
+ profile->ResetDatabaseL(&(iDatabase));
+ if( serverIDList.Find(profile->StrValue( TNSmlDMProfileData( EDMProfileServerId ))) == KErrNotFound)
+ {
+ profile->SaveL();
+ }
+ }
+ oldProfiles->ResetAndDestroy();
+ CleanupStack::PopAndDestroy(); //oldProfiles
+ }
+ else // Corrupt case
+
+ {
+ iTableProfiles.Close();
+ iDatabase.Close();
+ TParse name;
+
+#ifdef SYMBIAN_SECURE_DBMS
+ name.Set( KNSmlDMSettingsDbName(), NULL, NULL );
+#else
+ name.Set( KNSmlDMSettingsDbName(), KNSmlDatabasesNonSecurePath, NULL );
+#endif
+ TInt err = iRdbSession.DeleteDatabase( name.FullName(),
+ KNSmlSOSServerPolicyUID );
+ CreateDatabaseL( name.FullName() );
+ err = iDatabase.Open( iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureSOSServerID );
+ }
+ User::LeaveIfError( iTableProfiles.Open( iDatabase, KNSmlDMTableProfiles ) );
+ iColSet = iTableProfiles.ColSetL();
+
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::CreateDMTablesL()
+// Creates settings database.
+//------------------------------------------------------------------------------
+
+void CNSmlDMSettings::CreateDMTablesL()
+ {
+
+ HBufC* createProfileTable = HBufC::NewLC( KDMCreateDMProfilesTable().Length() + KNSmlDmCreateDB);
+ TPtr profileTablePtr = createProfileTable->Des();
+
+ profileTablePtr.Format(KDMCreateDMProfilesTable, KNSmlDmMaxProfileNameLength,
+ KNSmlDmMaxUsernameLength,
+ KNSmlDmMaxPasswordLength,
+ KNSmlDmSharedSecretMaxLength,
+ KNSmlDmMaxURLLength,
+ KNSmlDmServerIdMaxLength,
+ KNSmlDmMaxHttpAuthUsernameLength,
+ KNSmlDmMaxHttpAuthPasswordLength);
+
+ iDatabase.Begin();
+
+ iDatabase.Execute( *createProfileTable );
+ iDatabase.Execute( KDMCreateCommSetTable );
+
+
+ CDbColSet* colSet = CDbColSet::NewLC();
+ colSet->AddL(TDbCol(KNSmlVersionColumnMajor(), EDbColUint16));
+ colSet->AddL(TDbCol(KNSmlVersionColumnMinor(), EDbColUint16));
+ User::LeaveIfError(iDatabase.CreateTable(KNSmlTableVersion(), *colSet));
+ CleanupStack::PopAndDestroy( ); //colset
+
+ RDbTable table;
+ User::LeaveIfError(table.Open(iDatabase, KNSmlTableVersion()));
+ CleanupClosePushL(table);
+ colSet = table.ColSetL();
+ CleanupStack::PushL(colSet);
+ table.InsertL();
+ table.SetColL(colSet->ColNo(KNSmlVersionColumnMajor), KNSmlSettingsCurrentVersionMajor);
+ table.SetColL(colSet->ColNo(KNSmlVersionColumnMinor), KNSmlSettingsCurrentVersionMinor);
+ table.PutL();
+
+
+ iDatabase.Commit();
+
+// iDatabase.Close();
+ CleanupStack::PopAndDestroy( 3 ); // createProfileTable, colSet, table
+
+ }
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::CreateDatabaseL()
+// Creates settings database.
+//------------------------------------------------------------------------------
+void CNSmlDMSettings::CreateDatabaseL(const TDesC& aFullName)
+ {
+ HBufC* createProfileTable = HBufC::NewLC( KDMCreateDMProfilesTable().Length() + KNSmlDmCreateDB);
+ TPtr profileTablePtr = createProfileTable->Des();
+
+ profileTablePtr.Format(KDMCreateDMProfilesTable, KNSmlDmMaxProfileNameLength,
+ KNSmlDmMaxUsernameLength,
+ KNSmlDmMaxPasswordLength,
+ KNSmlDmSharedSecretMaxLength,
+ KNSmlDmMaxURLLength,
+ KNSmlDmServerIdMaxLength,
+ KNSmlDmMaxHttpAuthUsernameLength,
+ KNSmlDmMaxHttpAuthPasswordLength);
+
+ User::LeaveIfError( iDatabase.Create( this->iRdbSession,
+ aFullName,
+ KNSmlDBMSSecureSOSServerID ) );
+
+ iDatabase.Begin();
+
+ iDatabase.Execute( *createProfileTable );
+ iDatabase.Execute( KDMCreateCommSetTable );
+
+ CDbColSet* colSet = CDbColSet::NewLC();
+ colSet->AddL(TDbCol(KNSmlVersionColumnMajor(), EDbColUint16));
+ colSet->AddL(TDbCol(KNSmlVersionColumnMinor(), EDbColUint16));
+ User::LeaveIfError(iDatabase.CreateTable(KNSmlTableVersion(), *colSet));
+ CleanupStack::PopAndDestroy( ); //colset
+
+ RDbTable table;
+ User::LeaveIfError(table.Open(iDatabase, KNSmlTableVersion()));
+ CleanupClosePushL(table);
+ colSet = table.ColSetL();
+ CleanupStack::PushL(colSet);
+ table.InsertL();
+ table.SetColL(colSet->ColNo(KNSmlVersionColumnMajor), KNSmlSettingsCurrentVersionMajor);
+ table.SetColL(colSet->ColNo(KNSmlVersionColumnMinor), KNSmlSettingsCurrentVersionMinor);
+ table.PutL();
+
+ iDatabase.Commit();
+ CreateHiddenProfilesL();
+ CreateDMProfilesFromXmlL();
+ iDatabase.Close();
+ CleanupStack::PopAndDestroy( 3 ); // createProfileTable, colSet, table
+ }
+
+//=============================================
+// CNSmlDMSettings::CreateHiddenProfilesL()
+// Create new profiles reading data from
+// resource file
+//=============================================
+
+void CNSmlDMSettings::CreateHiddenProfilesL()
+ {
+ TFileName fileName;
+ Dll::FileName( fileName );
+ TParse parse;
+
+ parse.Set( KNSmlDMProfilesRsc, &fileName, NULL );
+ fileName = parse.FullName();
+
+ RResourceFile resourceFile;
+ BaflUtils::NearestLanguageFile( iFsSession, fileName );
+
+ TRAPD(leavecode,resourceFile.OpenL( iFsSession,fileName));
+ if(leavecode != KErrNone )
+ {
+ return;
+ }
+ CleanupClosePushL(resourceFile);
+
+ HBufC8* profileRes = resourceFile.AllocReadLC( NSML_DM_PROFILES );
+ TResourceReader reader;
+ reader.SetBuffer( profileRes );
+
+ CNSmlDMResourceProfiles* profileResReader = CNSmlDMResourceProfiles::NewLC( reader, this );
+ profileResReader->SaveProfilesL();
+ CleanupStack::PopAndDestroy(3); // profileResReader, profileRes, resourceFile
+ }
+
+//=============================================
+// CNSmlDMSettings::CreateDMProfilesFromXmlL()
+// Create new profiles reading data from
+// XML file
+//=============================================
+
+void CNSmlDMSettings::CreateDMProfilesFromXmlL()
+ {
+ _DBG_FILE("CNSmlDMSettings::CreateDMProfilesFromXmlL(): begin");
+
+ TBuf<KMaxXmlPathLength> xmlPath;
+
+ CRepository* cenrep = NULL;
+ cenrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys );
+ TInt result = cenrep->Get( KDevManProfilesXMLFile, xmlPath );
+ delete cenrep;
+ cenrep = NULL;
+
+ if((xmlPath.Length()) && (result == KErrNone))
+ {
+ TInt error = KErrNone;
+ RFile wFile;
+ if(wFile.Open(iFsSession, xmlPath, EFileRead | EFileShareReadersOnly) != KErrNone)
+ {
+ return;
+ }
+ CleanupClosePushL(wFile);
+ RXMLReader DMProfileParser;
+ DMProfileParser.CreateL();
+ CleanupClosePushL(DMProfileParser);
+
+ CDMProfileContentHandler* contentHandler = CDMProfileContentHandler::NewL(this);
+ CleanupStack::PushL(contentHandler);
+ DMProfileParser.SetContentHandler(contentHandler);
+
+ //parse xml file
+ TRAP(error, DMProfileParser.ParseL(wFile));
+ if(error == KErrNone )
+ {
+ contentHandler->SaveProfilesL();
+ }
+ else
+ {
+ DBG_FILE_CODE(error, _S8("CNSmlDMSettings::CreateDMProfilesFromXmlL() : XML parser status"));
+ }
+
+ CleanupStack::PopAndDestroy(3); // contentHandler, DMProfileParser, wFile
+ }
+ _DBG_FILE("CNSmlDMSettings::CreateDMProfilesFromXmlL(): end");
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::CreateProfileL()
+// Returns a pointer to newly created CNSmlDMProfile object.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMProfile* CNSmlDMSettings::CreateProfileL()
+ {
+ CNSmlDMProfile* profile = CNSmlDMProfile::NewL( this->Database() );
+
+ // Set default values for a profile
+ profile->SetIntValue( EDMProfileId, KNSmlNewObject );
+ profile->SetIntValue( EDMProfileTransportId, KUidNSmlMediumTypeInternet.iUid );
+
+ profile->SetIntValue( EDMProfileIAPId, -1 );
+ profile->SetIntValue( EDMProfileServerAlertAction, ESmlConfirmSync );
+ profile->SetIntValue( EDMProfileAuthenticationRequired, EFalse );
+ profile->SetIntValue( EDMProfileDeleteAllowed, ETrue );
+ profile->SetIntValue( EDMProfileHttpAuthUsed, EFalse );
+ profile->SetIntValue( EDMProfileLock, ETrue );
+
+ return profile;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::CreateProfileL()
+// Copies all profile data with given Id to
+// a newly created CNSmlDMProfile object.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMProfile* CNSmlDMSettings::CreateProfileL( const TInt aId )
+ {
+ CNSmlDMProfile* profile = ProfileL( aId);
+
+ if ( profile )
+ {
+ profile->SetIntValue( EDMProfileId, KNSmlNewObject );
+ }
+
+ return profile;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::Database()
+// Returns a reference to settings database object.
+//------------------------------------------------------------------------------
+
+EXPORT_C RDbNamedDatabase* CNSmlDMSettings::Database()
+ {
+ return &iDatabase;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ProfileL()
+// Returns a pointer to CNSmlDMProfile object with given Id.
+// If there's no corresponding Id in the database, returns NULL.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMProfile* CNSmlDMSettings::ProfileL( TInt aId)
+ {
+ _DBG_FILE("CNSmlDMSettings::ProfileL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, aId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ CNSmlDMProfile* profile = CNSmlDMProfile::NewL( Database() );
+
+ if( iView.FirstL() )
+ {
+ CleanupStack::PushL( profile );
+ CNSmlDMCrypt* crypt = new(ELeave) CNSmlDMCrypt;
+ CleanupStack::PushL(crypt);
+ iView.GetL();
+
+ profile->SetIntValue( EDMProfileId, ViewColUint( KNSmlDMProfileId ) );
+ profile->SetStrValue( EDMProfileDisplayName, ViewColDes( KNSmlDMProfileDisplayName ) );
+ profile->SetIntValue( EDMProfileIAPId, ViewColInt( KNSmlDMProfileIAPId ) );
+ profile->SetIntValue( EDMProfileTransportId, ViewColInt( KNSmlDMProfileTransportId ) );
+
+ profile->SetStrValue( EDMProfileServerUsername, ViewColDes( KNSmlDMProfileServerUsername ) );
+ profile->SetStrValue( EDMProfileServerPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileServerPassword ) ) );
+ profile->SetStrValue( EDMProfileClientPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileClientPassword ) ) );
+ profile->SetStrValue( EDMProfileServerURL, ViewColDes( KNSmlDMProfileServerURL ) );
+
+ profile->SetStrValue( EDMProfileServerId, ViewColDes( KNSmlDMProfileServerId ) );
+ profile->SetIntValue( EDMProfileSessionId, ViewColInt( KNSmlDMProfileSessionId ) );
+
+ profile->SetIntValue( EDMProfileServerAlertAction, ViewColInt( KNSmlDMProfileServerAlertedAction ) );
+ profile->SetIntValue( EDMProfileAuthenticationRequired, ViewColInt( KNSmlDMProfileAuthenticationRequired ) );
+ profile->SetIntValue( EDMProfileCreatorId, ViewColInt( KNSmlDMProfileCreatorId ) );
+ profile->SetIntValue( EDMProfileDeleteAllowed, ViewColInt( KNSmlDMProfileDeleteAllowed) );
+ profile->SetIntValue( EDMProfileHidden, ViewColInt( KNSmlDMProfileHidden) );
+
+ profile->SetIntValue( EDMProfileHttpAuthUsed, ViewColInt( KNSmlDMProfileHttpAuthUsed) );
+ profile->SetStrValue( EDMProfileHttpAuthUsername, ViewColDes( KNSmlDMProfileHttpAuthUsername ) );
+ profile->SetStrValue( EDMProfileHttpAuthPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileHttpAuthPassword ) ) );
+ profile->SetIntValue( EDMProfileLock, ViewColInt( KNSmlDMProfileLock) );
+
+ CleanupStack::PopAndDestroy(); // crypt
+ CleanupStack::Pop(); // profile
+ }
+ else
+ {
+ delete profile;
+ //couldn't find
+ profile = NULL;
+ }
+
+ _DBG_FILE("CNSmlDMSettings::ProfileL(): end");
+ return profile;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::GetProfileListL()
+// Appends CNSmlDMProfileListItem objects to aProfileList.
+//------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDMSettings::GetProfileListL( CNSmlDMProfileList* aProfileList )
+ {
+ _DBG_FILE("CNSmlDMSettings::GetProfileListL(): begin");
+
+ aProfileList->ResetAndDestroy();
+
+ PrepareViewL( KDMSQLGetAllProfiles, iView.EUpdatable );
+
+ if( iView.Unevaluated() )
+ {
+ iView.EvaluateAll();
+ }
+
+
+ while ( iView.NextL() )
+ {
+ AddToProfileListL( aProfileList );
+ }
+
+ _DBG_FILE("CNSmlDMSettings::GetProfileListL(): end");
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::DeleteProfileL()
+// Permanently deletes profile with given Id.
+// If delete is succesfull returns KErrNone,
+// otherwise returns negative integer
+// (defined in EPOC error codes).
+//------------------------------------------------------------------------------
+
+EXPORT_C TInt CNSmlDMSettings::DeleteProfileL( TInt aId )
+ {
+ _DBG_FILE("CNSmlDMSettings::DeleteProfileL(): begin");
+ if ( iDatabase.InTransaction() )
+ {
+ return ( KErrAccessDenied );
+ }
+
+ CNSmlDMProfile* profile = ProfileL(aId);
+ if(profile)
+ {
+ CleanupStack::PushL(profile);
+ RNSmlDMCallbackSession cbSession;
+ User::LeaveIfError( cbSession.Connect() );
+ CleanupClosePushL(cbSession);
+ HBufC8* serverId = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
+ profile->StrValue(EDMProfileServerId));
+ CleanupStack::PushL(serverId);
+
+ cbSession.EraseServerIdL(*serverId);
+ CleanupStack::PopAndDestroy(3); // profile,cbSession,serverId
+ }
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLDeleteProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ TInt err( KErrNone );
+
+ iDatabase.Begin();
+
+ sqlStatementPtr.Format( KDMSQLDeleteProfile, aId );
+ err = iDatabase.Execute( sqlStatementPtr );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( err < KErrNone )
+ {
+ iDatabase.Rollback();
+ return err;
+ }
+
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDMSettings::DeleteProfileL(): end");
+
+ return KErrNone;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::PrepareViewL()
+// Closes and prepares the view
+//
+//------------------------------------------------------------------------------
+void CNSmlDMSettings::PrepareViewL( const TDesC& aSql, RDbRowSet::TAccess aAccess )
+ {
+ iView.Close();
+ User::LeaveIfError( iView.Prepare( iDatabase, TDbQuery( aSql ), aAccess ) );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::CommitAndCompact
+// Commits update and compacts the database
+//
+//------------------------------------------------------------------------------
+void CNSmlDMSettings::CommitAndCompact()
+ {
+ iDatabase.Commit();
+ iDatabase.Compact();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::AddToProfileListL
+// Adds database field to profile list
+//
+//------------------------------------------------------------------------------
+void CNSmlDMSettings::AddToProfileListL( CNSmlDMProfileList* aProfileList )
+ {
+ iView.GetL();
+
+ aProfileList->AppendL( CNSmlDMProfileListItem::NewLC( iView.ColUint( iColSet->ColNo( KNSmlDMProfileId ) ) ) );
+
+ CleanupStack::Pop();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ColDes
+//
+//------------------------------------------------------------------------------
+TPtrC CNSmlDMSettings::ViewColDes( const TDesC& aFieldName )
+ {
+ return iView.ColDes( iColSet->ColNo( aFieldName ) );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ColInt
+//
+//------------------------------------------------------------------------------
+TInt CNSmlDMSettings::ViewColInt( const TDesC& aFieldName )
+ {
+ return iView.ColInt( iColSet->ColNo( aFieldName ) );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ColUint
+//
+//
+//------------------------------------------------------------------------------
+TUint CNSmlDMSettings::ViewColUint( const TDesC& aFieldName )
+ {
+ return iView.ColUint( iColSet->ColNo( aFieldName ) );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::IsDMAllowedL
+//
+//
+//------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDMSettings::IsDMAllowedL()
+{
+ TBuf<30> sqlStatement;
+ sqlStatement.Format( KDMSQLGetAllCommonSettings );
+
+ RDbTable table;
+ CleanupClosePushL( table );
+
+ User::LeaveIfError( table.Open( iDatabase, KNSmlTableCommonSettings ) );
+
+ CDbColSet* colSet = table.ColSetL();
+ CleanupStack::PushL( colSet );
+
+ RDbView lView;
+ CleanupClosePushL( lView );
+ User::LeaveIfError( lView.Prepare( iDatabase, TDbQuery( sqlStatement ), lView.EReadOnly ) );
+
+ TBuf<10> columnName;
+ columnName.Format( KLogColumn);
+
+ iAllowed = ETrue;
+
+ iDatabase.Begin();
+ if ( lView.FirstL() )
+ {
+ lView.GetL();
+
+ iAllowed = lView.ColInt( colSet->ColNo( columnName ));
+
+ }
+
+ iDatabase.Commit();
+
+ CleanupStack::PopAndDestroy(3); //table, colSet, lView
+ return (iAllowed);
+}
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ServerIdFoundL
+//
+//
+//------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDMSettings::ServerIdFoundL( const TDesC& aServerId )
+{
+ _DBG_FILE("CNSmlDMSettings::ServerIdFoundL(): begin");
+
+ TBool ret = EFalse;
+ if(aServerId.Length()>0)
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLSelectMatchingServerIdOnly().Length() + aServerId.Length());
+ TPtr sqlStatementPtr = sqlStatement->Des();
+ sqlStatementPtr.Format(KDMSQLSelectMatchingServerIdOnly, &aServerId);
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ ret = ETrue;
+ }
+ }
+ _DBG_FILE("CNSmlDMSettings::ServerIdFoundL(): end");
+ return ret;
+}
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::ServerIdFoundL
+//
+//
+//------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDMSettings::ServerIdFoundL( const TDesC& aServerId, TInt aProfileId )
+{
+ _DBG_FILE("CNSmlDMSettings::ServerIdFoundL(): begin");
+
+ TBool ret = EFalse;
+ if(aServerId.Length()>0)
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLSelectMatchingServerId().Length() + aServerId.Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+ sqlStatementPtr.Format(KDMSQLSelectMatchingServerId, &aServerId, aProfileId );
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ ret = ETrue;
+ }
+ }
+ _DBG_FILE("CNSmlDMSettings::ServerIdFoundL(): end");
+ return ret;
+}
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::SetDMAllowedFlagL
+//
+//
+//------------------------------------------------------------------------------
+EXPORT_C void CNSmlDMSettings::SetDMAllowedFlagL(TBool aAllowed)
+{
+ _DBG_FILE("CNSmlDMSettings::SetDMAllowedFlagL(): begin");
+
+ TBuf<30> sqlStatement;
+ sqlStatement.Format( KDMSQLGetAllCommonSettings);
+
+ RDbTable table;
+ CleanupClosePushL( table );
+
+ User::LeaveIfError( table.Open( iDatabase, KNSmlTableCommonSettings ) );
+
+ CDbColSet* colSet = table.ColSetL();
+ CleanupStack::PushL( colSet );
+
+ RDbView lView;
+ CleanupClosePushL( lView );
+ User::LeaveIfError( lView.Prepare( iDatabase, TDbQuery( sqlStatement ), lView.EUpdatable ) );
+
+ TBuf<10> columnName;
+ columnName.Format( KLogColumn);
+
+ iDatabase.Begin();
+ if ( lView.FirstL() )
+ {
+ lView.GetL();
+ lView.UpdateL();
+
+ lView.SetColL( colSet->ColNo( columnName ), aAllowed);
+
+ }
+ else
+ {
+ lView.InsertL();
+ lView.SetColL( colSet->ColNo( columnName ), aAllowed );
+ }
+ lView.PutL();
+
+ CleanupStack::PopAndDestroy(3); //table, colSet, lView
+
+ iDatabase.Commit();
+ iDatabase.Compact();
+
+ _DBG_FILE("CNSmlDMSettings::SetDMAllowedFlagL(): end");
+}
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettings::OldProfileL
+//
+//
+//------------------------------------------------------------------------------
+
+CNSmlDMProfile* CNSmlDMSettings::OldProfileL( TInt aId)
+ {
+ _DBG_FILE("CNSmlDMSettings::OldProfileL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, aId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ CNSmlDMProfile* profile = CNSmlDMProfile::NewL( Database() );
+
+ if( iView.FirstL() )
+ {
+ CleanupStack::PushL( profile );
+ CNSmlDMCrypt* crypt = new(ELeave) CNSmlDMCrypt;
+ CleanupStack::PushL(crypt);
+ iView.GetL();
+
+ profile->SetIntValue( EDMProfileId, ViewColUint( KNSmlDMProfileId ) );
+ profile->SetStrValue( EDMProfileDisplayName, ViewColDes( KNSmlDMProfileDisplayName ) );
+ profile->SetIntValue( EDMProfileIAPId, ViewColInt( KNSmlDMProfileIAPId ) );
+ profile->SetIntValue( EDMProfileTransportId, ViewColInt( KNSmlDMProfileTransportId ) );
+
+ profile->SetStrValue( EDMProfileServerUsername, ViewColDes( KNSmlDMProfileServerUsername ) );
+ profile->SetStrValue( EDMProfileServerPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileServerPassword ) ) );
+ profile->SetStrValue( EDMProfileClientPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileClientPassword ) ) );
+ profile->SetStrValue( EDMProfileServerURL, ViewColDes( KNSmlDMProfileServerURL ) );
+
+ profile->SetStrValue( EDMProfileServerId, ViewColDes( KNSmlDMProfileServerId ) );
+ profile->SetIntValue( EDMProfileSessionId, ViewColInt( KNSmlDMProfileSessionId ) );
+
+ profile->SetIntValue( EDMProfileServerAlertAction, ViewColInt( KNSmlDMProfileServerAlertedAction ) );
+ profile->SetIntValue( EDMProfileAuthenticationRequired, ViewColInt( KNSmlDMProfileAuthenticationRequired ) );
+ profile->SetIntValue( EDMProfileCreatorId, ViewColInt( KNSmlDMProfileCreatorId ) );
+ profile->SetIntValue( EDMProfileDeleteAllowed, ViewColInt( KNSmlDMProfileDeleteAllowed) );
+
+ if(iMissingCols.Find(TPtrC(KNSmlDMProfileHidden))==KErrNotFound)
+ profile->SetIntValue( EDMProfileHidden, ViewColInt( KNSmlDMProfileHidden) );
+
+ profile->SetIntValue( EDMProfileHttpAuthUsed, ViewColInt( KNSmlDMProfileHttpAuthUsed) );
+ profile->SetStrValue( EDMProfileHttpAuthUsername, ViewColDes( KNSmlDMProfileHttpAuthUsername ) );
+ profile->SetStrValue( EDMProfileHttpAuthPassword, crypt->DecryptedL(ViewColDes( KNSmlDMProfileHttpAuthPassword ) ) );
+ if(iMissingCols.Find(TPtrC(KNSmlDMProfileLock))==KErrNotFound)
+ profile->SetIntValue( EDMProfileLock, ViewColInt( KNSmlDMProfileLock) );
+
+ CleanupStack::PopAndDestroy(); // crypt
+ CleanupStack::Pop(); // profile
+ }
+ else
+ {
+ delete profile;
+ //couldn't find
+ profile = NULL;
+ }
+
+ _DBG_FILE("CNSmlDMSettings::OldProfileL(): end");
+ return profile;
+ }
+
+// End of File
+