--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/dm/settings/src/NSmlDMProfile.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,1160 @@
+/*
+* 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 FILES
+#include <sysutil.h>
+#include <nsmlconstants.h>
+#include <nsmldebug.h>
+#include <nsmldmconstants.h>
+
+#include "nsmldmsettings.h"
+
+
+//------------------------------------------------------------------------------
+//
+// CNSmlDMProfile
+//
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::NewL()
+// Creates a new instance of CNSmlDMProfile object.
+//------------------------------------------------------------------------------
+
+CNSmlDMProfile* CNSmlDMProfile::NewL( RDbNamedDatabase* aDatabase )
+ {
+ CNSmlDMProfile* self = CNSmlDMProfile::NewLC( aDatabase );
+ CleanupStack::Pop();
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::NewLC()
+// Creates a new instance of CNSmlDMProfile object.
+// Pushes and leaves new instance into CleanupStack.
+//------------------------------------------------------------------------------
+
+CNSmlDMProfile* CNSmlDMProfile::NewLC( RDbNamedDatabase* aDatabase )
+ {
+ CNSmlDMProfile* self = new( ELeave ) CNSmlDMProfile;
+ CleanupStack::PushL( self );
+ self->ConstructL( aDatabase );
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::ConstructL()
+// Second phase constructor.
+//------------------------------------------------------------------------------
+
+void CNSmlDMProfile::ConstructL( RDbNamedDatabase* aDatabase )
+ {
+ iDatabase = aDatabase;
+ iId = ( TUint ) KNSmlNewObject;
+
+ User::LeaveIfError( iTableProfiles.Open( *iDatabase, KNSmlDMTableProfiles ) );
+ iColSetProfiles = iTableProfiles.ColSetL();
+
+ iDisplayName = HBufC::NewL( KNSmlDmMaxProfileNameLength );
+ iDMServerUsername = HBufC::NewL( KNSmlDmMaxUsernameLength );
+ iDMServerPassword = HBufC::NewL( KNSmlDmMaxPasswordLength );
+ iClientPassword = HBufC::NewL( KNSmlDmSharedSecretMaxLength );
+ iServerId = HBufC::NewL( KNSmlDmServerIdMaxLength );
+ iServerURL = HBufC::NewL( KNSmlDmMaxURLLength );
+ iHttpAuthUsername = HBufC::NewL( KNSmlDmMaxHttpAuthUsernameLength );
+ iHttpAuthPassword = HBufC::NewL( KNSmlDmMaxHttpAuthPasswordLength );
+ iProfileLock = EFalse;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::~CNSmlDMProfile()
+// Destructor.
+//------------------------------------------------------------------------------
+
+EXPORT_C CNSmlDMProfile::~CNSmlDMProfile()
+ {
+ delete iDisplayName;
+ delete iDMServerUsername;
+ delete iDMServerPassword;
+ delete iClientPassword;
+ delete iServerId;
+ delete iServerURL;
+ delete iHttpAuthUsername;
+ delete iHttpAuthPassword;
+
+ iView.Close();
+ iWSView.Close();
+ iRSView.Close();
+
+ if(iColSetProfiles)
+ {
+ delete iColSetProfiles;
+ }
+
+
+ iTableProfiles.Close();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::SaveL()
+// Saves a profile ie. writes all profile data to the database.
+// If save is succesfull returns KErrNone,
+// otherwise returns negative integer (defined in EPOC error codes).
+//------------------------------------------------------------------------------
+
+EXPORT_C TInt CNSmlDMProfile::SaveL()
+ {
+ _DBG_FILE("CNSmlDMProfile::SaveL(): begin");
+
+ if ( iDatabase->InTransaction() )
+ {
+ return ( KErrAccessDenied );
+ }
+
+ iDatabase->Begin();
+ CNSmlDMCrypt* crypt = new(ELeave) CNSmlDMCrypt;
+ CleanupStack::PushL(crypt);
+
+ if ( iId == ( TUint ) KNSmlNewObject )
+ {
+ // Check OOD before saving a New profile
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL(fs);
+
+ if (SysUtil::FFSSpaceBelowCriticalLevelL(&fs, KNSmlDmSettingsFatMinSize))
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(2); // crypt, fs
+ return KErrDiskFull;
+ // do not write
+ }
+ CleanupStack::PopAndDestroy(); //fs
+
+ //new profile
+ iTableProfiles.InsertL();
+
+ TableProfilesSetColDesL( KNSmlDMProfileDisplayName, *iDisplayName );
+ TableProfilesSetColIntL( KNSmlDMProfileIAPId, iIAPId );
+ TableProfilesSetColIntL( KNSmlDMProfileTransportId, iTransportId );
+
+ TableProfilesSetColDesL( KNSmlDMProfileServerUsername, *iDMServerUsername );
+ TableProfilesSetColDesL( KNSmlDMProfileServerPassword, crypt->EncryptedL( *iDMServerPassword) );
+ TableProfilesSetColDesL( KNSmlDMProfileClientPassword, crypt->EncryptedL( *iClientPassword) );
+
+ TableProfilesSetColDesL( KNSmlDMProfileServerURL, *iServerURL );
+ TableProfilesSetColDesL( KNSmlDMProfileServerId, *iServerId );
+
+ TableProfilesSetColIntL( KNSmlDMProfileServerAlertedAction, iServerAlertAction );
+ TableProfilesSetColIntL( KNSmlDMProfileAuthenticationRequired, iAuthenticationRequired );
+ TableProfilesSetColIntL( KNSmlDMProfileCreatorId, iCreatorId );
+ TableProfilesSetColIntL( KNSmlDMProfileDeleteAllowed, iDeleteAllowed );
+ TableProfilesSetColIntL( KNSmlDMProfileSessionId, iDMSessionId );
+ TableProfilesSetColIntL( KNSmlDMProfileHidden, iProfileHidden );
+
+ TableProfilesSetColIntL( KNSmlDMProfileHttpAuthUsed, iHttpAuthUsed );
+ TableProfilesSetColDesL( KNSmlDMProfileHttpAuthUsername, *iHttpAuthUsername );
+ TableProfilesSetColDesL( KNSmlDMProfileHttpAuthPassword, crypt->EncryptedL( *iHttpAuthPassword ) );
+ TableProfilesSetColIntL(KNSmlDMProfileLock,iProfileLock);
+
+ iId = iTableProfiles.ColUint( iColSetProfiles->ColNo( KNSmlDMProfileId) ); // Use autoincrement
+ iId+= KMaxDataSyncID;
+ iTableProfiles.SetColL( iColSetProfiles->ColNo( KNSmlDMProfileId ), iId );
+
+ iTableProfiles.PutL();
+ }
+ else
+ {
+ //existing profile
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EUpdatable );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ iView.UpdateL();
+
+ ViewSetColDesL( KNSmlDMProfileDisplayName, *iDisplayName );
+ ViewSetColIntL( KNSmlDMProfileTransportId, iTransportId );
+ ViewSetColIntL( KNSmlDMProfileIAPId, iIAPId );
+
+ ViewSetColDesL( KNSmlDMProfileServerUsername, *iDMServerUsername );
+ ViewSetColDesL( KNSmlDMProfileServerPassword, crypt->EncryptedL( *iDMServerPassword ) );
+ ViewSetColDesL( KNSmlDMProfileClientPassword, crypt->EncryptedL( *iClientPassword) );
+
+ ViewSetColDesL( KNSmlDMProfileServerURL, *iServerURL );
+ ViewSetColDesL( KNSmlDMProfileServerId, *iServerId );
+
+ ViewSetColIntL( KNSmlDMProfileServerAlertedAction, iServerAlertAction );
+ ViewSetColIntL( KNSmlDMProfileAuthenticationRequired, iAuthenticationRequired );
+ ViewSetColIntL( KNSmlDMProfileCreatorId, iCreatorId );
+ ViewSetColIntL( KNSmlDMProfileDeleteAllowed, iDeleteAllowed );
+ ViewSetColIntL( KNSmlDMProfileSessionId, iDMSessionId);
+ ViewSetColIntL( KNSmlDMProfileHidden, iProfileHidden );
+
+ ViewSetColIntL( KNSmlDMProfileHttpAuthUsed, iHttpAuthUsed );
+ ViewSetColDesL( KNSmlDMProfileHttpAuthUsername, *iHttpAuthUsername );
+ ViewSetColDesL( KNSmlDMProfileHttpAuthPassword, crypt->EncryptedL( *iHttpAuthPassword ) );
+ ViewSetColIntL( KNSmlDMProfileLock, iProfileLock );
+
+ iView.PutL();
+ }
+ else
+ {
+ iDatabase->Rollback();
+ CleanupStack::PopAndDestroy(); //crypt
+
+ return KErrNotFound;
+ }
+
+ }
+
+ CleanupStack::PopAndDestroy(); //crypt
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDMProfile::SaveL(): end");
+
+ return KErrNone;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::IsNew()
+// Returns true if profile is new, otherwise false.
+//------------------------------------------------------------------------------
+
+EXPORT_C TBool CNSmlDMProfile::IsNew() const
+ {
+ return ( iId == ( TUint ) KNSmlNewObject );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::StrValue()
+// Returns a given string value.
+//------------------------------------------------------------------------------
+
+EXPORT_C const TDesC& CNSmlDMProfile::StrValue( TNSmlDMProfileData aProfileItem ) const
+ {
+ HBufC* result = 0;
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileDisplayName ) :
+ {
+ result = iDisplayName;
+ }
+ break;
+
+ case ( EDMProfileServerUsername ) :
+ {
+ result = iDMServerUsername;
+ }
+ break;
+
+ case ( EDMProfileServerPassword ) :
+ {
+ result = iDMServerPassword;
+ }
+ break;
+
+ case ( EDMProfileClientPassword ) :
+ {
+ result = iClientPassword;
+ }
+ break;
+
+ case ( EDMProfileServerURL ) :
+ {
+ result = iServerURL;
+ }
+ break;
+
+ case ( EDMProfileServerId ) :
+ {
+ result = iServerId;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthUsername ) :
+ {
+ result = iHttpAuthUsername;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthPassword ) :
+ {
+ result = iHttpAuthPassword;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ return *result;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::IntValue()
+// Returns a given int value.
+//------------------------------------------------------------------------------
+
+EXPORT_C TInt CNSmlDMProfile::IntValue( TNSmlDMProfileData aProfileItem ) const
+ {
+ TInt result( 0 );
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileId ) :
+ {
+ result = iId;
+ }
+ break;
+
+ case ( EDMProfileIAPId ) :
+ {
+ result = iIAPId;
+ }
+ break;
+
+ case ( EDMProfileTransportId ) :
+ {
+ result = iTransportId;
+ }
+ break;
+
+ case ( EDMProfileSessionId ) :
+ {
+ result = iDMSessionId;
+ }
+ break;
+
+ case ( EDMProfileServerAlertAction ) :
+ {
+ result = iServerAlertAction;
+ }
+ break;
+
+ case ( EDMProfileAuthenticationRequired ) :
+ {
+ result = iAuthenticationRequired;
+ }
+ break;
+
+ case ( EDMProfileCreatorId ) :
+ {
+ result = iCreatorId;
+ }
+ break;
+
+ case ( EDMProfileDeleteAllowed ) :
+ {
+ result = iDeleteAllowed;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthUsed ) :
+ {
+ result = iHttpAuthUsed;
+ }
+ break;
+
+ case ( EDMProfileHidden ) :
+ {
+ result = iProfileHidden;
+ }
+ break;
+ case EDMProfileLock :
+ {
+ result = iProfileLock;
+ }
+ break;
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ return result;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::SetStrValue()
+// Sets a given string value.
+//------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDMProfile::SetStrValue( TNSmlDMProfileData aProfileItem, const TDesC& aNewValue )
+ {
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileDisplayName ) :
+ {
+ *iDisplayName = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileServerUsername ) :
+ {
+ *iDMServerUsername = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileServerPassword ) :
+ {
+ *iDMServerPassword = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileClientPassword ) :
+ {
+ *iClientPassword = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileServerURL ) :
+ {
+ *iServerURL = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileServerId ) :
+ {
+ *iServerId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthUsername ) :
+ {
+ *iHttpAuthUsername = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthPassword ) :
+ {
+ *iHttpAuthPassword = aNewValue;
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::SetIntValue()
+// Sets a given int value.
+//------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDMProfile::SetIntValue( TNSmlDMProfileData aProfileItem, const TInt aNewValue )
+ {
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileId ) :
+ {
+ iId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileIAPId ) :
+ {
+ iIAPId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileTransportId ) :
+ {
+ iTransportId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileSessionId ) :
+ {
+ iDMSessionId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileServerAlertAction ) :
+ {
+ iServerAlertAction = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileAuthenticationRequired ) :
+ {
+ iAuthenticationRequired = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileCreatorId ) :
+ {
+ iCreatorId = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileDeleteAllowed ) :
+ {
+ iDeleteAllowed = aNewValue;
+ }
+ break;
+ case ( EDMProfileHidden ) :
+ {
+ iProfileHidden = aNewValue;
+ }
+ break;
+
+ case ( EDMProfileHttpAuthUsed ) :
+ {
+ iHttpAuthUsed = aNewValue;
+ }
+ break;
+ case ( EDMProfileLock ) :
+ {
+ iProfileLock = aNewValue;
+ }
+ break;
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::EqualData()
+// Compares all this profile data to
+// given profiles's data.
+//------------------------------------------------------------------------------
+
+EXPORT_C TBool CNSmlDMProfile::EqualData( CNSmlDMProfile* aprofile ) const
+ {
+ if ( aprofile == NULL )
+ {
+ return EFalse;
+ }
+
+ if ( *iDisplayName != *aprofile->iDisplayName )
+ {
+ return EFalse;
+ }
+
+ if ( iTransportId != aprofile->iTransportId)
+ {
+ return EFalse;
+ }
+
+ if ( iIAPId != aprofile->iIAPId )
+ {
+ return EFalse;
+ }
+
+ if ( *iClientPassword != *aprofile->iClientPassword )
+ {
+ return EFalse;
+ }
+
+ if ( *iServerURL != *aprofile->iServerURL )
+ {
+ return EFalse;
+ }
+
+ if ( *iServerId != *aprofile->iServerId )
+ {
+ return EFalse;
+ }
+
+ if ( iDMSessionId != aprofile->iDMSessionId )
+ {
+ return EFalse;
+ }
+
+ if ( iServerAlertAction != aprofile->iServerAlertAction )
+ {
+ return EFalse;
+ }
+
+ if ( iAuthenticationRequired != aprofile->iAuthenticationRequired )
+ {
+ return EFalse;
+ }
+
+ if ( iCreatorId != aprofile->iCreatorId)
+ {
+ return EFalse;
+ }
+
+ if ( iDeleteAllowed != aprofile->iDeleteAllowed )
+ {
+ return EFalse;
+ }
+
+ if ( iHttpAuthUsed != aprofile->iHttpAuthUsed)
+ {
+ return EFalse;
+ }
+
+ if ( *iHttpAuthUsername != *aprofile->iHttpAuthUsername )
+ {
+ return EFalse;
+ }
+
+ if ( *iHttpAuthPassword != *aprofile->iHttpAuthPassword )
+ {
+ return EFalse;
+ }
+ if ( iProfileLock != aprofile->iProfileLock )
+ {
+ return EFalse;
+ }
+
+ return ETrue;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::IsNullL()
+// Returns true if profile data is NULL,
+// otherwise false.
+//------------------------------------------------------------------------------
+
+EXPORT_C TBool CNSmlDMProfile::IsNullL( const TDesC& aFieldName )
+ {
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ if ( iView.IsColNull( iColSetProfiles->ColNo( aFieldName ) ) )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::HasLogL()
+// Returns true if profile has Log-data,
+// otherwise false.
+//------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDMProfile::HasLogL()
+ {
+ _DBG_FILE("CNSmlDMProfile::HasLogL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ if ( iView.IsColNull( iColSetProfiles->ColNo( KNSmlDMProfileLog ) ) )
+ {
+ return EFalse;
+ }
+ }
+
+ _DBG_FILE("CNSmlDMProfile::HasLogL(): end");
+
+ return ETrue;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::HasLastSyncL()
+// Returns true if profile has Last sync data,
+// otherwise false.
+//------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDMProfile::HasLastSyncL()
+ {
+ _DBG_FILE("CNSmlDMProfile::HasLogL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ if ( iView.IsColNull( iColSetProfiles->ColNo( KNSmlDMLastSync ) ) )
+ {
+ return EFalse;
+ }
+ }
+
+ _DBG_FILE("CNSmlDMProfile::HasLogL(): end");
+
+ return ETrue;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::LogReadStreamL()
+// Reads log-data from database
+//------------------------------------------------------------------------------
+EXPORT_C RReadStream& CNSmlDMProfile::LogReadStreamL()
+ {
+ _DBG_FILE("CNSmlDMProfile::LogReadStreamL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDMSQLGetProfile, iId);
+
+ User::LeaveIfError(iRSView.Prepare(*iDatabase, TDbQuery(sqlStatementPtr), RDbRowSet::EReadOnly));
+ User::LeaveIfError(iRSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iRSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDMProfileLog()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ if( iRSView.FirstL() )
+ {
+ iRSView.GetL();
+ iRs.OpenL(iRSView, col);
+ }
+
+ _DBG_FILE("CNSmlDMProfile::LogReadStreamL(): end");
+
+ return iRs;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::LogWriteStreamL()
+// Opens stream to database for writing
+//------------------------------------------------------------------------------
+
+EXPORT_C RWriteStream& CNSmlDMProfile::LogWriteStreamL()
+ {
+ _DBG_FILE("CNSmlDMProfile::LogWriteStreamL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDMSQLGetProfile, iId);
+
+ // create a view on the database
+ User::LeaveIfError(iWSView.Prepare(*iDatabase, TDbQuery(sqlStatementPtr), RDbRowSet::EUpdatable));
+ User::LeaveIfError(iWSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iWSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDMProfileLog()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ iDatabase->Begin();
+ if( iWSView.FirstL() )
+ {
+ iWSView.GetL();
+ iWSView.UpdateL();
+ iWs.OpenL(iWSView, col);
+ }
+
+ _DBG_FILE("CNSmlDMProfile::LogWriteStreamL(): end");
+
+ return iWs;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::WriteStreamCommitL()
+//
+//
+//------------------------------------------------------------------------------
+EXPORT_C void CNSmlDMProfile::WriteStreamCommitL()
+ {
+ _DBG_FILE("CNSmlDMProfile::WriteStreamCommitL(): begin");
+
+ iWSView.PutL();
+ iWSView.Close();
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDMProfile::WriteStreamCommitL(): end");
+ }
+
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::LastSyncReadStreamL()
+// Reads last sync-data from database
+//------------------------------------------------------------------------------
+EXPORT_C RReadStream& CNSmlDMProfile::LastSyncReadStreamL()
+ {
+ _DBG_FILE("CNSmlDMProfile::LastSyncReadStreamL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDMSQLGetProfile, iId);
+
+ User::LeaveIfError(iRSView.Prepare(*iDatabase, TDbQuery(sqlStatementPtr), RDbRowSet::EReadOnly));
+ User::LeaveIfError(iRSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iRSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDMLastSync()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ if( iRSView.FirstL() )
+ {
+ iRSView.GetL();
+ iRs.OpenL(iRSView, col);
+ }
+
+ _DBG_FILE("CNSmlDMProfile::LastSyncReadStreamL(): end");
+
+ return iRs;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::LastSyncWriteStreamL()
+// writes last sync-data to database
+//------------------------------------------------------------------------------
+EXPORT_C RWriteStream& CNSmlDMProfile::LastSyncWriteStreamL()
+ {
+ _DBG_FILE("CNSmlDMProfile::LastSyncWriteStreamL(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format(KDMSQLGetProfile, iId);
+
+ // create a view on the database
+ User::LeaveIfError(iWSView.Prepare(*iDatabase, TDbQuery(sqlStatementPtr), RDbRowSet::EUpdatable));
+ User::LeaveIfError(iWSView.EvaluateAll());
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ // Get the structure of rowset
+ CDbColSet* colSet = iWSView.ColSetL();
+ TDbColNo col = colSet->ColNo(KNSmlDMLastSync()); // Ordinal position of long column
+ delete colSet;
+ colSet = NULL;
+
+ // get row
+ iDatabase->Begin();
+ if( iWSView.FirstL() )
+ {
+ iWSView.GetL();
+ iWSView.UpdateL();
+ iWs.OpenL(iWSView, col);
+ }
+
+ _DBG_FILE("CNSmlDMProfile::LastSyncWriteStreamL(): end");
+
+ return iWs;
+
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::LastSyncStreamCommitL()
+
+//------------------------------------------------------------------------------
+EXPORT_C void CNSmlDMProfile::LastSyncStreamCommitL()
+ {
+ _DBG_FILE("CNSmlDMProfile::LastSyncStreamCommitL(): begin");
+
+ iWSView.PutL();
+ iWSView.Close();
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDMProfile::LastSyncStreamCommitL(): end");
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::PrepareViewL()
+// Closes and prepares the view
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::PrepareViewL( const TDesC& aSql, RDbRowSet::TAccess aAccess )
+ {
+ iView.Close();
+ User::LeaveIfError( iView.Prepare( *iDatabase, TDbQuery( aSql ), aAccess ) );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::CommitAndCompact
+// Commits update and compacts the database
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::CommitAndCompact()
+ {
+ iDatabase->Commit();
+ iDatabase->Compact();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::TableProfilesSetColIntL
+//
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::TableProfilesSetColIntL( const TDesC& aFieldName, TInt aValue)
+ {
+ iTableProfiles.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::TableProfilesSetColDesL
+//
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::TableProfilesSetColDesL( const TDesC& aFieldName, TDesC& aValue)
+ {
+ iTableProfiles.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::ViewSetColIntL
+//
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::ViewSetColIntL( const TDesC& aFieldName, TInt aValue)
+ {
+ iView.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::ViewSetColDesL
+//
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::ViewSetColDesL( const TDesC& aFieldName, TDesC& aValue)
+ {
+ iView.SetColL( iColSetProfiles->ColNo( aFieldName ), aValue );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::NonceLC()
+// Gets nonce.
+// If length of the returned string is 0,
+// nonce was not found.
+//------------------------------------------------------------------------------
+
+EXPORT_C HBufC* CNSmlDMProfile::NonceLC( TNSmlDMProfileData aProfileItem)
+ {
+ _DBG_FILE("CNSmlDMProfile::NonceLC(): begin");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + KNSmlDmMaxIntegerLength );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ CNSmlDMProfile::PrepareViewL( sqlStatementPtr, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ if(iView.Unevaluated())
+ {
+ iView.EvaluateAll();
+ }
+
+ HBufC* stringValue = NULL;
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileServerNonce ) :
+ {
+ RDbColReadStream in;
+ in.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ) );
+ stringValue = HBufC::NewLC( iView.ColLength( iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ) ) );
+ TPtr ptr = stringValue->Des();
+ in.ReadL( ptr, iView.ColLength( iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ) ) );
+ CleanupStack::Pop(); // stringValue
+ CleanupStack::PopAndDestroy(); //in
+ }
+ break;
+
+ case ( EDMProfileClientNonce ) :
+ {
+ RDbColReadStream in;
+ in.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileClientNonce ) );
+ stringValue = HBufC::NewLC( iView.ColLength( iColSetProfiles->ColNo( KNSmlDMProfileClientNonce ) ) );
+ TPtr ptr = stringValue->Des();
+ in.ReadL( ptr, iView.ColLength( iColSetProfiles->ColNo( KNSmlDMProfileClientNonce ) ) );
+ CleanupStack::Pop(); // stringValue
+ CleanupStack::PopAndDestroy(); //in
+ }
+ break;
+
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+
+ }
+ _DBG_FILE("CNSmlDMProfile::NonceLC(): end");
+
+ CleanupStack::PushL( stringValue );
+ return stringValue;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::SetNonceL()
+// Sets nonce.
+//------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDMProfile::SetNonceL( TNSmlDMProfileData aProfileItem, const TDesC& aNewValue )
+ {
+
+ _DBG_FILE("CNSmlDMProfile::SetNonceL begins");
+
+ HBufC* sqlStatement = HBufC::NewLC( KDMSQLGetProfile().Length() + 16 );
+ TPtr sqlStatementPtr = sqlStatement->Des();
+
+ sqlStatementPtr.Format( KDMSQLGetProfile, iId );
+
+ PrepareViewL( sqlStatementPtr, iView.EUpdatable );
+
+ CleanupStack::PopAndDestroy(); // sqlStatement
+
+ iDatabase->Begin();
+ RDbColWriteStream out;
+ if ( iView.FirstL() )
+ {
+ //existing row
+ iView.GetL();
+ iView.UpdateL();
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileServerNonce ) :
+ {
+ out.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ) );
+ break;
+ }
+ case ( EDMProfileClientNonce ) :
+ {
+ out.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileClientNonce ) );
+ break;
+ }
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ out.WriteL( aNewValue );
+ out.Close();
+ iView.PutL();
+ }
+ else
+ {
+ //new row
+ PrepareViewL( KDMSQLGetProfile, iView.EUpdatable );
+ iView.InsertL();
+ switch ( aProfileItem )
+ {
+ case ( EDMProfileServerNonce ) :
+ {
+ out.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ) );
+ break;
+ }
+ case ( EDMProfileClientNonce ) :
+ {
+ out.OpenLC( iView, iColSetProfiles->ColNo( KNSmlDMProfileClientNonce ) );
+ break;
+ }
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ out.WriteL( aNewValue );
+ out.Close();
+ iView.SetColL( iColSetProfiles->ColNo( KNSmlDMProfileServerNonce ), aNewValue );
+ iView.PutL();
+ }
+
+ CommitAndCompact();
+ CleanupStack::PopAndDestroy(); // out
+
+ _DBG_FILE("CNSmlDMProfile::SetNonceL ends");
+
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::ResetDatabaseL()
+//
+//------------------------------------------------------------------------------
+
+
+void CNSmlDMProfile::ResetDatabaseL( RDbNamedDatabase* aDatabase )
+ {
+ iDatabase=aDatabase;
+ User::LeaveIfError( iTableProfiles.Open( *iDatabase, KNSmlDMTableProfiles ) );
+ iColSetProfiles = iTableProfiles.ColSetL();
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::ResetID()
+//
+//------------------------------------------------------------------------------
+
+void CNSmlDMProfile::ResetID()
+ {
+ iId = ( TUint ) KNSmlNewObject;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMProfile::CloseDbHandles()
+//
+//------------------------------------------------------------------------------
+void CNSmlDMProfile::CloseDbHandles()
+ {
+ if(iColSetProfiles)
+ {
+ delete iColSetProfiles;
+ }
+ iColSetProfiles = NULL;
+ iTableProfiles.Close();
+
+ }
+// End of File