omadm/omadmextensions/adapters/fota/src/nsmldmfotaadapterdb.cpp
changeset 0 3ce708148e4d
equal deleted inserted replaced
-1:000000000000 0:3ce708148e4d
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Fota adapter's DB implementation file
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 // INCLUDE FILES
       
    23 #include <sysutil.h>
       
    24 #include <bautils.h>
       
    25 
       
    26 #include "nsmldmfotaadapterdb.h"
       
    27 #include "nsmlconstants.h"
       
    28 #include "nsmldebug.h"
       
    29 
       
    30 #ifndef __WINS__
       
    31                                     // This lowers the unnecessary compiler warning (armv5) to remark.
       
    32                                     // "Warning: #174-D: expression has no effect..." is caused by 
       
    33                                     // DBG_ARGS8 macro in no-debug builds.
       
    34 #pragma diag_remark 174
       
    35 #endif
       
    36 
       
    37 // ============================ MEMBER FUNCTIONS =============================
       
    38 
       
    39 // ---------------------------------------------------------------------------
       
    40 //  CNSmlDmFotaAdapterDb::NewL()
       
    41 //  Creates a new instance of CNSmlDmFotaAdapterDb object.
       
    42 // ---------------------------------------------------------------------------
       
    43 // 
       
    44 CNSmlDmFotaAdapterDb* CNSmlDmFotaAdapterDb::NewL()
       
    45     {
       
    46     _DBG_FILE("CNSmlDmFotaAdapterDb::NewL(): begin");
       
    47     
       
    48     CNSmlDmFotaAdapterDb* self = CNSmlDmFotaAdapterDb::NewLC(); 
       
    49     CleanupStack::Pop( self );
       
    50 
       
    51     _DBG_FILE("CNSmlDmFotaAdapterDb::NewL(): end");
       
    52     
       
    53     return self;
       
    54     }   
       
    55 
       
    56 // ---------------------------------------------------------------------------
       
    57 //  CNSmlDmFotaAdapterDb::NewLC()
       
    58 //  Creates a new instance of CNSmlDmFotaAdapterDb object. 
       
    59 //  Pushes and leaves new instance onto CleanupStack.
       
    60 // ---------------------------------------------------------------------------
       
    61 // 
       
    62 CNSmlDmFotaAdapterDb* CNSmlDmFotaAdapterDb::NewLC()
       
    63     {
       
    64     _DBG_FILE("CNSmlDmFotaAdapterDb::NewLC(): begin");
       
    65     
       
    66     CNSmlDmFotaAdapterDb* self = new( ELeave ) CNSmlDmFotaAdapterDb();
       
    67     CleanupStack::PushL( self );
       
    68     self->ConstructL();
       
    69     
       
    70     _DBG_FILE("CNSmlDmFotaAdapterDb::NewLC(): end");
       
    71     
       
    72     return self;
       
    73     }
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 //  CNSmlDmFotaAdapterDb::ConstructL()
       
    77 //  Second phase constructor.
       
    78 // ---------------------------------------------------------------------------
       
    79 // 
       
    80 void CNSmlDmFotaAdapterDb::ConstructL()
       
    81     {
       
    82     _DBG_FILE("CNSmlDmFotaAdapterDb::ConstructL(): begin");
       
    83     
       
    84     User::LeaveIfError( iFsSession.Connect() );
       
    85     User::LeaveIfError( iRdbSession.Connect() );
       
    86     iFsSession.SetSessionToPrivate( KNSmlFotaAdapterDbDrive );
       
    87 
       
    88     TParse name;
       
    89 
       
    90 #ifdef SYMBIAN_SECURE_DBMS
       
    91 	name.Set( KNSmlFotaAdapterDbName(), NULL, NULL );
       
    92 #else
       
    93     name.Set( KNSmlFotaAdapterDbName(), KNSmlDatabasesNonSecurePath, NULL );
       
    94 #endif
       
    95 
       
    96 	TInt err = iDatabase.Open( iRdbSession,
       
    97 	                           name.FullName(),
       
    98 	                           KNSmlDBMSSecureMDHostOneID );
       
    99     if ( err == KErrNotFound )
       
   100         {
       
   101         CreateDatabaseL( name.FullName() );
       
   102         err = iDatabase.Open( iRdbSession,
       
   103                               name.FullName(),
       
   104                               KNSmlDBMSSecureMDHostOneID );
       
   105         User::LeaveIfError( err );
       
   106         }
       
   107     else
       
   108         {
       
   109         
       
   110         if ( ( err == KErrEof ) || ( err == KErrCorrupt ) || 
       
   111              ( err == KErrArgument ) )
       
   112             {
       
   113             // something seriously wrong with the db, delete it and try 
       
   114             // to create new
       
   115             iRdbSession.DeleteDatabase( name.FullName(),
       
   116                                         KNSmlDMHostOnePolicyUID );
       
   117             CreateDatabaseL( name.FullName() );
       
   118             err = iDatabase.Open( iRdbSession,
       
   119                                   name.FullName(),
       
   120                                   KNSmlDBMSSecureMDHostOneID );
       
   121             }
       
   122         
       
   123         User::LeaveIfError( err );
       
   124         }
       
   125 
       
   126     User::LeaveIfError( iFwObjectTable.Open( iDatabase,
       
   127                                              KNSmlTableFwMgmtObject ) );
       
   128     iColSet = iFwObjectTable.ColSetL();
       
   129     
       
   130     _DBG_FILE("CNSmlDmFotaAdapterDb::ConstructL(): end");
       
   131     }
       
   132 
       
   133 // ---------------------------------------------------------------------------
       
   134 //  CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb()
       
   135 //  Constructor.
       
   136 // ---------------------------------------------------------------------------
       
   137 // 
       
   138 CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb()
       
   139     {
       
   140     _DBG_FILE("CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb(): begin");
       
   141     _DBG_FILE("CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb(): end");
       
   142     }
       
   143     
       
   144 // ---------------------------------------------------------------------------
       
   145 //  CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb()
       
   146 //  Destructor.
       
   147 // ---------------------------------------------------------------------------
       
   148 // 
       
   149 CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb()
       
   150     {
       
   151     _DBG_FILE("CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb(): begin");
       
   152 
       
   153     iView.Close();
       
   154     
       
   155     delete iColSet;
       
   156     iFwObjectTable.Close();
       
   157         
       
   158     iDatabase.Close();
       
   159     iFsSession.Close();
       
   160     iRdbSession.Close();
       
   161     
       
   162     _DBG_FILE("CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb(): ends");
       
   163     }
       
   164 
       
   165 // ---------------------------------------------------------------------------
       
   166 //  CNSmlDmFotaAdapterDb::AddFwObjectL()
       
   167 //  Inserts new uninitialized row to FwMgmtObject table and returns its id.
       
   168 // ---------------------------------------------------------------------------
       
   169 // 
       
   170 TNSmlDmFwObjectId CNSmlDmFotaAdapterDb::AddFwObjectL()
       
   171     {
       
   172     _DBG_FILE("CNSmlDmFotaAdapterDb::AddFwObjectL(): begin");
       
   173     
       
   174     // Check OOD before inserting new row into FwMgmtObject table
       
   175     if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iFsSession, 
       
   176                                                KNSmlMaxFwMgmtObjectRowSize ) )
       
   177         {
       
   178         User::Leave( KErrDiskFull );
       
   179         }
       
   180     
       
   181     iDatabase.Begin();
       
   182     
       
   183     // Insert new row, and set finalt result to its null value
       
   184     iFwObjectTable.InsertL();
       
   185     iFwObjectTable.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectResult ), 
       
   186                             KNSmlFotaNullResult );
       
   187     iFwObjectTable.PutL();
       
   188     
       
   189     CommitAndCompact();
       
   190     
       
   191     _DBG_FILE("CNSmlDmFotaAdapterDb::AddFwObjectL(): end");
       
   192     
       
   193     return iFwObjectTable.ColUint( iColSet->ColNo( KNSmlFwMgmtObjectId ) );
       
   194     }
       
   195     
       
   196 // ---------------------------------------------------------------------------
       
   197 //  CNSmlDmFotaAdapterDb::DeleteFwObjectL()
       
   198 //  Deletes a row from FwMgmtObject table identified by aId. If such row is 
       
   199 //  not found, returns KErrNotFound, KErrNone otherwise.
       
   200 // ---------------------------------------------------------------------------
       
   201 // 
       
   202 TInt CNSmlDmFotaAdapterDb::DeleteFwObjectL( const TNSmlDmFwObjectId aId )
       
   203     {
       
   204     _DBG_FILE("CNSmlDmFotaAdapterDb::DeleteFwObjectL(): begin");
       
   205     
       
   206     HBufC* sql = HBufC::NewL( KNSmlDeleteFwMgmtObject().Length() + 
       
   207                               KNSmlFwMgmtObjectIntegerLength );
       
   208     sql->Des().Format( KNSmlDeleteFwMgmtObject, aId );
       
   209     
       
   210     iDatabase.Begin();
       
   211     TInt result = iDatabase.Execute( *sql );
       
   212     CommitAndCompact();
       
   213     
       
   214     delete sql;
       
   215     
       
   216     _DBG_FILE("CNSmlDmFotaAdapterDb::DeleteFwObjectL(): end");
       
   217     
       
   218     return ( result == 0 ) ? KErrNotFound : KErrNone;
       
   219     }
       
   220     
       
   221 // ---------------------------------------------------------------------------
       
   222 //  CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL()
       
   223 //  Finds all the rows in FwMgmtObject table that have null final result and
       
   224 //  puts the PkgIds of those rows to aArray.
       
   225 // ---------------------------------------------------------------------------
       
   226 // 
       
   227 void CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray )
       
   228     {
       
   229     _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(): begin");
       
   230     
       
   231     aArray.Reset();
       
   232     
       
   233     HBufC* sql = HBufC::NewLC( KNSmlGetUnfinishedFwMgmtObjects().Length() + 
       
   234                                KNSmlFwMgmtObjectIntLength );
       
   235     sql->Des().Format( KNSmlGetUnfinishedFwMgmtObjects, KNSmlFotaNullResult );
       
   236     
       
   237     PrepareViewL( *sql, iView.EReadOnly );
       
   238 
       
   239     CleanupStack::PopAndDestroy( sql );
       
   240     
       
   241     while ( iView.NextL() )
       
   242         {
       
   243         // get final result and append it to aArray
       
   244         iView.GetL();
       
   245         aArray.AppendL( iView.ColUint( 
       
   246                         iColSet->ColNo( KNSmlFwMgmtObjectId ) ) );
       
   247         }
       
   248     
       
   249     _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(): end");
       
   250     }
       
   251     
       
   252 // ---------------------------------------------------------------------------
       
   253 //  CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL()
       
   254 //  Finds all the rows in FwMgmtObject table that have null final result, 
       
   255 //  server id equals to aServerId and management uri is not an empty string.
       
   256 //  Puts the PkgIds of those rows to aArray.
       
   257 // ---------------------------------------------------------------------------
       
   258 // 
       
   259 void CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray, 
       
   260                                                   const TDesC8& aServerId )
       
   261     {
       
   262     _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(serverid): begin");
       
   263     
       
   264     aArray.Reset();
       
   265     
       
   266     HBufC* serverId = ConvertTo16BitLC( aServerId );
       
   267     
       
   268     HBufC* sql = HBufC::NewLC( 
       
   269                         KNSmlGetUnfinishedFwMgmtObjectByServerId().Length() + 
       
   270                         KNSmlFwMgmtObjectIntLength + 
       
   271                         serverId->Length() );
       
   272     
       
   273     sql->Des().Format( KNSmlGetUnfinishedFwMgmtObjectByServerId, 
       
   274                        KNSmlFotaNullResult, 
       
   275                        serverId );
       
   276     
       
   277     PrepareViewL( *sql, iView.EReadOnly );
       
   278 
       
   279     CleanupStack::PopAndDestroy( sql );
       
   280     CleanupStack::PopAndDestroy( serverId );
       
   281     
       
   282     while ( iView.NextL() )
       
   283         {
       
   284         // get final result and append it to aArray
       
   285         iView.GetL();
       
   286         aArray.AppendL( iView.ColUint( 
       
   287                         iColSet->ColNo( KNSmlFwMgmtObjectId ) ) );
       
   288         }
       
   289     
       
   290     _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( serverid ): end");
       
   291     }
       
   292     
       
   293 // ---------------------------------------------------------------------------
       
   294 //  CNSmlDmFotaAdapterDb::PkgNameL()
       
   295 //  Returns the PkgName field from FW object identified by aId. If no such 
       
   296 //  object is found, returns NULL.
       
   297 // ---------------------------------------------------------------------------
       
   298 // 
       
   299 HBufC8* CNSmlDmFotaAdapterDb::PkgNameL( const TNSmlDmFwObjectId aId )
       
   300     {
       
   301     return StrValueL( KNSmlFwMgmtObjectName, aId );
       
   302     }
       
   303     
       
   304 // ---------------------------------------------------------------------------
       
   305 //  CNSmlDmFotaAdapterDb::PkgVersionL()
       
   306 //  Returns the PkgVersion field from FW object identified by aId. If no such 
       
   307 //  object is found, returns NULL.
       
   308 // ---------------------------------------------------------------------------
       
   309 // 
       
   310 HBufC8* CNSmlDmFotaAdapterDb::PkgVersionL( const TNSmlDmFwObjectId aId )
       
   311     {
       
   312     return StrValueL( KNSmlFwMgmtObjectVersion, aId );
       
   313     }
       
   314     
       
   315 // ---------------------------------------------------------------------------
       
   316 //  CNSmlDmFotaAdapterDb::PkgUrlL()
       
   317 //  Returns the PkgUrl field from FW object identified by aId. If no such 
       
   318 //  object is found, returns NULL.
       
   319 // ---------------------------------------------------------------------------
       
   320 // 
       
   321 HBufC8* CNSmlDmFotaAdapterDb::PkgUrlL( const TNSmlDmFwObjectId aId )
       
   322     {
       
   323     return LongStrValueL( KNSmlFwMgmtObjectUrl, aId );
       
   324     }
       
   325     
       
   326 // ---------------------------------------------------------------------------
       
   327 //  CNSmlDmFotaAdapterDb::MgmtUriL()
       
   328 //  Returns the MgmtUri field from FW object identified by aId. If no such 
       
   329 //  object is found, returns NULL.
       
   330 // ---------------------------------------------------------------------------
       
   331 // 
       
   332 HBufC8* CNSmlDmFotaAdapterDb::MgmtUriL( const TNSmlDmFwObjectId aId )
       
   333     {
       
   334     return StrValueL( KNSmlFwMgmtObjectMgmtUri, aId );
       
   335     }
       
   336     
       
   337 // ---------------------------------------------------------------------------
       
   338 //  CNSmlDmFotaAdapterDb::ProfileIdL()
       
   339 //  Returns the ProfileId field from FW object identified by aId. If no such 
       
   340 //  object is found, returns KErrNotFound.
       
   341 // ---------------------------------------------------------------------------
       
   342 // 
       
   343 TSmlProfileId CNSmlDmFotaAdapterDb::ProfileIdL( const TNSmlDmFwObjectId aId )
       
   344     {
       
   345     return IntValueL( KNSmlFwMgmtObjectProfileId, aId );
       
   346     }
       
   347     
       
   348 // ---------------------------------------------------------------------------
       
   349 //  CNSmlDmFotaAdapterDb::ServerIdL()
       
   350 //  Returns the ServerId field from FW object identified by aId. If no such 
       
   351 //  object is found, returns NULL.
       
   352 // ---------------------------------------------------------------------------
       
   353 // 
       
   354 HBufC8* CNSmlDmFotaAdapterDb::ServerIdL( const TNSmlDmFwObjectId aId )
       
   355     {
       
   356     return StrValueL( KNSmlFwMgmtObjectServerId, aId );
       
   357     }
       
   358     
       
   359 // ---------------------------------------------------------------------------
       
   360 //  CNSmlDmFotaAdapterDb::FinalResultL()
       
   361 //  Returns the FinalResult field from FW object identified by aId. If no such 
       
   362 //  object is found, returns KErrNotFound.
       
   363 // ---------------------------------------------------------------------------
       
   364 // 
       
   365 TInt CNSmlDmFotaAdapterDb::FinalResultL( const TNSmlDmFwObjectId aId )
       
   366     {
       
   367     return IntValueL( KNSmlFwMgmtObjectResult, aId );
       
   368     }
       
   369     
       
   370 // ---------------------------------------------------------------------------
       
   371 //  CNSmlDmFotaAdapterDb::CorrelatorL()
       
   372 //  Returns the Correlator field from FW object identified by aId. If no such 
       
   373 //  object is found, returns NULL.
       
   374 // ---------------------------------------------------------------------------
       
   375 // 
       
   376 HBufC8* CNSmlDmFotaAdapterDb::CorrelatorL( const TNSmlDmFwObjectId aId )
       
   377     {
       
   378     return StrValueL( KNSmlFwMgmtObjectCorrelator, aId );
       
   379     }
       
   380     
       
   381 // ---------------------------------------------------------------------------
       
   382 //  CNSmlDmFotaAdapterDb::SetPkgNameL()
       
   383 //  Sets aName as the value of PkgName in FW object identified by aId. If no 
       
   384 //  such object is found, returns KErrNotFound. If name is too large for the 
       
   385 //  database, returns KErrOverflow.
       
   386 // ---------------------------------------------------------------------------
       
   387 // 
       
   388 TInt CNSmlDmFotaAdapterDb::SetPkgNameL( const TDesC8& aName, 
       
   389                                         const TNSmlDmFwObjectId aId )
       
   390     {
       
   391     if ( aName.Length() > KFotaMaxPkgNameLength )
       
   392         {
       
   393         return KErrOverflow;
       
   394         }
       
   395     
       
   396     return SetStrValueL( KNSmlFwMgmtObjectName, aName, aId );
       
   397     }
       
   398     
       
   399 // ---------------------------------------------------------------------------
       
   400 //  CNSmlDmFotaAdapterDb::SetPkgVersionL()
       
   401 //  Sets aVersion as the value of PkgVersion in FW object identified by aId.
       
   402 //  If no such object is found, returns KErrNotFound. If version is too 
       
   403 //  large for the database, returns KErrOverflow.
       
   404 // ---------------------------------------------------------------------------
       
   405 // 
       
   406 TInt CNSmlDmFotaAdapterDb::SetPkgVersionL( const TDesC8& aVersion, 
       
   407                                            const TNSmlDmFwObjectId aId )
       
   408     {
       
   409     if ( aVersion.Length() > KFotaMaxPkgVersionLength )
       
   410         {
       
   411         return KErrOverflow;
       
   412         }
       
   413     
       
   414     return SetStrValueL( KNSmlFwMgmtObjectVersion, aVersion, aId );
       
   415     }
       
   416     
       
   417 // ---------------------------------------------------------------------------
       
   418 //  CNSmlDmFotaAdapterDb::SetPkgUrlL()
       
   419 //  Sets aUrl as the value of PkgURL in FW object identified by aId. If no 
       
   420 //  such object is found, returns KErrNotFound. If url is too large for the 
       
   421 //  database, returns KErrOverflow.
       
   422 // ---------------------------------------------------------------------------
       
   423 // 
       
   424 TInt CNSmlDmFotaAdapterDb::SetPkgUrlL( const TDesC8& aUrl, 
       
   425                                        const TNSmlDmFwObjectId aId )
       
   426     {
       
   427     if ( aUrl.Length() > KFotaMaxPkgURLLength )
       
   428         {
       
   429         return KErrOverflow;
       
   430         }
       
   431     
       
   432     return SetLongStrValueL( KNSmlFwMgmtObjectUrl, aUrl, aId );
       
   433     }
       
   434     
       
   435 // ---------------------------------------------------------------------------
       
   436 //  CNSmlDmFotaAdapterDb::SetMgmtUriL()
       
   437 //  Sets aUri as the value of MgmtURI in FW object identified by aId. If no 
       
   438 //  such object is found, returns KErrNotFound. If uri is too large for the 
       
   439 //  database, returns KErrOverflow.
       
   440 // ---------------------------------------------------------------------------
       
   441 // 
       
   442 TInt CNSmlDmFotaAdapterDb::SetMgmtUriL( const TDesC8& aUri, 
       
   443                                         const TNSmlDmFwObjectId aId )
       
   444     {
       
   445     if ( aUri.Length() > KNSmlMaxMgmtUriLength )
       
   446         {
       
   447         return KErrOverflow;
       
   448         }
       
   449     
       
   450     return SetStrValueL( KNSmlFwMgmtObjectMgmtUri, aUri, aId );
       
   451     }
       
   452     
       
   453 // ---------------------------------------------------------------------------
       
   454 //  CNSmlDmFotaAdapterDb::SetServerInfoL()
       
   455 //  Sets aProfileId as the value of ProfileId and aServerId as the value of 
       
   456 //  ServerId in FW object identified by aId. If no such object is found, 
       
   457 //  returns KErrNotFound. If server id is too large for the database, 
       
   458 //  returns KErrOverflow.
       
   459 // ---------------------------------------------------------------------------
       
   460 // 
       
   461 TInt CNSmlDmFotaAdapterDb::SetServerInfoL( const TSmlProfileId aProfile, 
       
   462                                            const TDesC8& aServerId, 
       
   463                                            const TNSmlDmFwObjectId aId )
       
   464     {
       
   465     _DBG_FILE("CNSmlDmFotaAdapterDb::SetServerInfoL(): begin");
       
   466     
       
   467     if ( aServerId.Length() > KNSmlMaxServerIdLength )
       
   468         {
       
   469         return KErrOverflow;
       
   470         }
       
   471     
       
   472     HBufC* serverId = ConvertTo16BitLC( aServerId );
       
   473     TInt ret = UpdateRowL( aId );
       
   474     
       
   475     if ( ret == KErrNone )
       
   476         {
       
   477         // do update
       
   478         iView.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectProfileId ), 
       
   479                        aProfile );
       
   480         iView.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectServerId ), 
       
   481                        *serverId );
       
   482         iView.PutL();
       
   483         }
       
   484     
       
   485     CommitAndCompact();
       
   486     
       
   487     CleanupStack::PopAndDestroy( serverId );
       
   488     
       
   489     _DBG_FILE("CNSmlDmFotaAdapterDb::SetServerInfoL(): end");
       
   490     
       
   491     return ret;
       
   492     }
       
   493     
       
   494 // ---------------------------------------------------------------------------
       
   495 //  CNSmlDmFotaAdapterDb::SetFinalResultL()
       
   496 //  Sets aResult as the value of FinalResult in FW object identified by aId.
       
   497 //  If no such object is found, returns KErrNotFound.
       
   498 // ---------------------------------------------------------------------------
       
   499 // 
       
   500 TInt CNSmlDmFotaAdapterDb::SetFinalResultL( const TInt aResult, 
       
   501                                             const TNSmlDmFwObjectId aId )
       
   502     {
       
   503     return SetIntValueL( KNSmlFwMgmtObjectResult, aResult, aId );
       
   504     }
       
   505     
       
   506 // ---------------------------------------------------------------------------
       
   507 //  CNSmlDmFotaAdapterDb::SetCorrelatorL()
       
   508 //  Sets aCorrealtor as the value of Correlator in FW object identified by aId.
       
   509 //  If no such object is found, returns KErrNotFound. If given correlator is 
       
   510 //  too large for the database, returns KErrOverflow.
       
   511 // ---------------------------------------------------------------------------
       
   512 // 
       
   513 TInt CNSmlDmFotaAdapterDb::SetCorrelatorL( const TDesC8& aCorrelator, 
       
   514                                            const TNSmlDmFwObjectId aId )
       
   515     {
       
   516     if ( aCorrelator.Length() > KNSmlMaxCorrelatorLength )
       
   517         {
       
   518         return KErrOverflow;
       
   519         }
       
   520     
       
   521     return SetStrValueL( KNSmlFwMgmtObjectCorrelator, aCorrelator, aId );
       
   522     }
       
   523 
       
   524 // ---------------------------------------------------------------------------
       
   525 //  CNSmlDmFotaAdapterDb::CreateDatabaseL()
       
   526 //  Creates Fota database.
       
   527 // ---------------------------------------------------------------------------
       
   528 // 
       
   529 void CNSmlDmFotaAdapterDb::CreateDatabaseL( const TDesC& aFullName )
       
   530     {
       
   531     _DBG_FILE("CNSmlDmFotaAdapterDb::CreateDatabaseL(): begin");
       
   532 
       
   533     // Check OOD before creating new Fota DB
       
   534     if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iFsSession, 
       
   535                                                KNSmlFotaAdapterEmptyDbSize ) )
       
   536         {
       
   537         User::Leave( KErrDiskFull );
       
   538         }
       
   539 
       
   540     // create sql query string, 5 = amount of length integers used in Format()
       
   541     HBufC* createFwMgmtTable = HBufC::NewLC( 
       
   542                                     KNSmlCreateFwMgmtObjectTable().Length() + 
       
   543                                     KNSmlFwMgmtObjectIntLength*5 );
       
   544     
       
   545     createFwMgmtTable->Des().Format( KNSmlCreateFwMgmtObjectTable, 
       
   546                                      KFotaMaxPkgNameLength,
       
   547                                      KFotaMaxPkgVersionLength,
       
   548                                      KNSmlMaxMgmtUriLength,
       
   549                                      KNSmlMaxServerIdLength,
       
   550                                      KNSmlMaxCorrelatorLength );
       
   551 
       
   552     User::LeaveIfError( iDatabase.Create( iRdbSession,
       
   553 	                                      aFullName,
       
   554 	                                      KNSmlDBMSSecureMDHostOneID ) );
       
   555     iDatabase.Begin();
       
   556     iDatabase.Execute( *createFwMgmtTable );
       
   557 
       
   558     CommitAndCompact();
       
   559     iDatabase.Close();
       
   560     
       
   561     CleanupStack::PopAndDestroy( createFwMgmtTable );
       
   562     
       
   563     _DBG_FILE("CNSmlDmFotaAdapterDb::CreateDatabaseL(): end");
       
   564     }   
       
   565 
       
   566 
       
   567 // ---------------------------------------------------------------------------
       
   568 //  CNSmlDmFotaAdapterDb::SetStrValueL()
       
   569 //  Sets aValue as the value of aColumn in FW object identified by aObject.
       
   570 // ---------------------------------------------------------------------------
       
   571 // 
       
   572 TInt CNSmlDmFotaAdapterDb::SetStrValueL( const TDesC& aColumn, 
       
   573                                          const TDesC8& aValue,
       
   574                                          const TNSmlDmFwObjectId aObject )
       
   575     {
       
   576     _DBG_FILE("CNSmlDmFotaAdapterDb::SetStrValueL(): begin");
       
   577     
       
   578     HBufC* value = ConvertTo16BitLC( aValue );
       
   579     
       
   580     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetStrValueL(): ('%S', '%S', %d)"), 
       
   581               &aColumn, value, aObject );
       
   582     
       
   583     TInt ret = UpdateRowL( aObject );
       
   584     
       
   585     if ( ret == KErrNone )
       
   586         {
       
   587         // do update
       
   588         iView.SetColL( iColSet->ColNo( aColumn ), *value );
       
   589         iView.PutL();
       
   590         }
       
   591     
       
   592     CommitAndCompact();
       
   593     
       
   594     CleanupStack::PopAndDestroy( value );
       
   595     
       
   596     _DBG_FILE("CNSmlDmFotaAdapterDb::SetStrValueL(): end");
       
   597     
       
   598     return ret;
       
   599     }
       
   600 
       
   601 // ---------------------------------------------------------------------------
       
   602 //  CNSmlDmFotaAdapterDb::SetLongStrValueL()
       
   603 //  Streams aValue and its length as the value of aColumn in FW object 
       
   604 //  identified by aObject.
       
   605 // ---------------------------------------------------------------------------
       
   606 // 
       
   607 TInt CNSmlDmFotaAdapterDb::SetLongStrValueL( const TDesC& aColumn, 
       
   608                                              const TDesC8& aValue, 
       
   609                                              const TNSmlDmFwObjectId aObject )
       
   610     {
       
   611     _DBG_FILE("CNSmlDmFotaAdapterDb::SetLongStrValueL(): begin");
       
   612     
       
   613     HBufC* value = ConvertTo16BitLC( aValue );
       
   614     
       
   615     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetStrValueL(): ('%S', '%S', %d)"),
       
   616               &aColumn, value, aObject );
       
   617     
       
   618     TInt ret = UpdateRowL( aObject );
       
   619     
       
   620     if ( ret == KErrNone )
       
   621         {
       
   622         // do update
       
   623         
       
   624         RDbColWriteStream wStream;
       
   625         wStream.OpenL( iView, iColSet->ColNo( aColumn ) );
       
   626         CleanupClosePushL( wStream );
       
   627         
       
   628         wStream.WriteInt32L( value->Length() );
       
   629         wStream.WriteL( *value, value->Length() );
       
   630         
       
   631         CleanupStack::PopAndDestroy( &wStream );
       
   632         
       
   633         iView.PutL();
       
   634         }
       
   635     
       
   636     CommitAndCompact();
       
   637     
       
   638     CleanupStack::PopAndDestroy( value );
       
   639     
       
   640     _DBG_FILE("CNSmlDmFotaAdapterDb::SetLongStrValueL(): end");
       
   641     
       
   642     return ret;
       
   643     }
       
   644 
       
   645 // ---------------------------------------------------------------------------
       
   646 //  CNSmlDmFotaAdapterDb::SetIntValueL()
       
   647 //  Sets aValue as the value of aColumn in FW object identified by aObject.
       
   648 // ---------------------------------------------------------------------------
       
   649 // 
       
   650 TInt CNSmlDmFotaAdapterDb::SetIntValueL( const TDesC& aColumn, 
       
   651                                          const TInt aValue, 
       
   652                                          const TNSmlDmFwObjectId aObject )
       
   653     {
       
   654     _DBG_FILE("CNSmlDmFotaAdapterDb::SetIntValueL(): begin");
       
   655     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetIntValueL(): ('%S', %d, %d)"), 
       
   656               &aColumn, aValue, aObject );
       
   657     
       
   658     TInt ret = UpdateRowL( aObject );
       
   659     
       
   660     if ( ret == KErrNone )
       
   661         {
       
   662         // do update
       
   663         iView.SetColL( iColSet->ColNo( aColumn ), aValue );
       
   664         iView.PutL();
       
   665         }
       
   666     
       
   667     CommitAndCompact();
       
   668     
       
   669     _DBG_FILE("CNSmlDmFotaAdapterDb::SetIntValueL(): end");
       
   670     
       
   671     return ret;
       
   672     }
       
   673     
       
   674 // ---------------------------------------------------------------------------
       
   675 //  CNSmlDmFotaAdapterDb::UpdateRowL()
       
   676 //  Prepares iView when setting a value to one of the rows in DB table. 
       
   677 // ---------------------------------------------------------------------------
       
   678 // 
       
   679 TInt CNSmlDmFotaAdapterDb::UpdateRowL( const TNSmlDmFwObjectId aObject )
       
   680     {
       
   681     TInt ret = KErrNone;
       
   682     
       
   683     HBufC* sql = FwMgmtObjectRowSqlLC( aObject );
       
   684     PrepareViewL( *sql, iView.EUpdatable );
       
   685     iDatabase.Begin();
       
   686 
       
   687     CleanupStack::PopAndDestroy( sql );
       
   688     
       
   689     if ( iView.FirstL() )
       
   690         {
       
   691         // fw object exists
       
   692         // Get current row for accessing and initiate update
       
   693         iView.GetL();
       
   694         iView.UpdateL();
       
   695         }
       
   696     else
       
   697         {
       
   698         // fw object does not exists, cannot update
       
   699         ret = KErrNotFound;
       
   700         }
       
   701     
       
   702     return ret;
       
   703     }
       
   704     
       
   705 // ---------------------------------------------------------------------------
       
   706 //  CNSmlDmFotaAdapterDb::StrValueL()
       
   707 //  Returns the value in FW object identified by aObject in column aColumn.
       
   708 // ---------------------------------------------------------------------------
       
   709 // 
       
   710 HBufC8* CNSmlDmFotaAdapterDb::StrValueL( const TDesC& aColumn, 
       
   711                                          const TNSmlDmFwObjectId aObject )
       
   712     {
       
   713     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::StrValueL('%S', %d): begin"), 
       
   714               &aColumn, aObject );
       
   715     
       
   716     HBufC8* value = NULL;
       
   717     
       
   718     FetchRowL( aObject );
       
   719     
       
   720     if ( iView.FirstL() )
       
   721         {
       
   722         // get value
       
   723         iView.GetL();
       
   724         TPtrC res = iView.ColDes( iColSet->ColNo( aColumn ) );
       
   725         
       
   726         // convert to 8-bit
       
   727         value = HBufC8::NewL( res.Length() );
       
   728         value->Des().Copy( res );
       
   729         }
       
   730     
       
   731     _DBG_FILE("CNSmlDmFotaAdapterDb::StrValueL(): end");
       
   732     
       
   733     return value;
       
   734     }
       
   735 
       
   736 // ---------------------------------------------------------------------------
       
   737 //  CNSmlDmFotaAdapterDb::LongStrValueL()
       
   738 //  Returns the value in FW object identified by aObject in column aColumn.
       
   739 // ---------------------------------------------------------------------------
       
   740 // 
       
   741 HBufC8* CNSmlDmFotaAdapterDb::LongStrValueL( const TDesC& aColumn, 
       
   742                                              const TNSmlDmFwObjectId aObject )
       
   743     {
       
   744     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::LongStrValueL('%S', %d): begin"), 
       
   745               &aColumn, aObject );
       
   746     
       
   747     HBufC8* value = NULL;
       
   748     
       
   749     FetchRowL( aObject );
       
   750     
       
   751     if ( iView.FirstL() )
       
   752         {
       
   753         // get value
       
   754         iView.GetL();
       
   755         
       
   756         RDbColReadStream rStream;
       
   757         rStream.OpenL( iView, iColSet->ColNo( aColumn ) );
       
   758         CleanupClosePushL( rStream );
       
   759         
       
   760         TInt length = 0;
       
   761         TRAPD( err, length = rStream.ReadInt32L() );
       
   762         
       
   763         HBufC* buf = HBufC::NewLC( length );
       
   764         TPtr bufPtr = buf->Des();
       
   765         
       
   766         if ( err == KErrNone )
       
   767             {
       
   768             rStream.ReadL( bufPtr, length );
       
   769             }
       
   770         
       
   771         // convert to 8-bit
       
   772         value = HBufC8::NewL( bufPtr.Length() );
       
   773         value->Des().Copy( bufPtr );
       
   774         
       
   775         CleanupStack::PopAndDestroy( buf );
       
   776         CleanupStack::PopAndDestroy( &rStream );
       
   777         }
       
   778     
       
   779     _DBG_FILE("CNSmlDmFotaAdapterDb::LongStrValueL(): end");
       
   780     
       
   781     return value;
       
   782     }
       
   783 
       
   784 // ---------------------------------------------------------------------------
       
   785 //  CNSmlDmFotaAdapterDb::IntValueL()
       
   786 //  Returns the value in FW object identified by aObject in column aColumn.
       
   787 // ---------------------------------------------------------------------------
       
   788 // 
       
   789 TInt CNSmlDmFotaAdapterDb::IntValueL( const TDesC& aColumn,
       
   790                                       const TNSmlDmFwObjectId aObject )
       
   791     {
       
   792     DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::IntValueL('%S', %d): begin"), 
       
   793               &aColumn, aObject );
       
   794     
       
   795     TInt value = KErrNotFound;
       
   796     
       
   797     FetchRowL( aObject );
       
   798     
       
   799     if ( iView.FirstL() )
       
   800         {
       
   801         iView.GetL();
       
   802         value = iView.ColInt( iColSet->ColNo( aColumn ) );
       
   803         }
       
   804     
       
   805     _DBG_FILE("CNSmlDmFotaAdapterDb::IntValueL(): end");
       
   806     
       
   807     return value;
       
   808     }
       
   809 
       
   810 // ---------------------------------------------------------------------------
       
   811 //  CNSmlDmFotaAdapterDb::FetchRowL()
       
   812 //  Prepares iView when getting a single row from DB.
       
   813 // ---------------------------------------------------------------------------
       
   814 // 
       
   815 void CNSmlDmFotaAdapterDb::FetchRowL( const TNSmlDmFwObjectId aObject )
       
   816     {
       
   817     HBufC* sql = FwMgmtObjectRowSqlLC( aObject );
       
   818     
       
   819     PrepareViewL( *sql, iView.EReadOnly );
       
   820 
       
   821     CleanupStack::PopAndDestroy( sql );
       
   822     }
       
   823 
       
   824 // ---------------------------------------------------------------------------
       
   825 //  CNSmlDmFotaAdapterDb::FwMgmtObjectRowSqlLC()
       
   826 //  Returns a buffer containing formatted SQL statement for getting a FW object 
       
   827 //  identified by aId.
       
   828 // ---------------------------------------------------------------------------
       
   829 // 
       
   830 HBufC* CNSmlDmFotaAdapterDb::FwMgmtObjectRowSqlLC( TNSmlDmFwObjectId aId ) const
       
   831     {
       
   832     HBufC* sql = HBufC::NewLC( KNSmlGetFwMgmtObject().Length() + 
       
   833                                KNSmlFwMgmtObjectIntegerLength );
       
   834     
       
   835     TPtr sqlPtr = sql->Des();
       
   836     sqlPtr.Format( KNSmlGetFwMgmtObject, aId );
       
   837     return sql;
       
   838     }
       
   839 
       
   840 // ---------------------------------------------------------------------------
       
   841 //  CNSmlDmFotaAdapterDb::PrepareViewL()
       
   842 //  Closes and prepares the view
       
   843 // ---------------------------------------------------------------------------
       
   844 // 
       
   845 void CNSmlDmFotaAdapterDb::PrepareViewL( const TDesC& aSql, 
       
   846                                          RDbRowSet::TAccess aAccess )
       
   847     {
       
   848     iView.Close();
       
   849     User::LeaveIfError( iView.Prepare( iDatabase, TDbQuery(aSql), aAccess ) );
       
   850     
       
   851     if ( iView.Unevaluated() )
       
   852         {
       
   853         User::LeaveIfError( iView.EvaluateAll() );
       
   854         }
       
   855     }
       
   856 
       
   857 // ---------------------------------------------------------------------------
       
   858 //  CNSmlDmFotaAdapterDb::CommitAndCompact()
       
   859 //  Commits update and compacts the database
       
   860 // ---------------------------------------------------------------------------
       
   861 // 
       
   862 void CNSmlDmFotaAdapterDb::CommitAndCompact() 
       
   863     {
       
   864     iDatabase.Commit();
       
   865     iDatabase.Compact();
       
   866     }
       
   867 
       
   868 // ---------------------------------------------------------------------------
       
   869 //  CNSmlDmFotaAdapterDb::ConvertTo16BitLC()
       
   870 //  Returns a pointer to a unicode copy of the given 8-bit descriptor.
       
   871 //  The pointer to the copy is allocated from heap and pushed on the 
       
   872 //  CleanupStack.
       
   873 // ---------------------------------------------------------------------------
       
   874 // 
       
   875 HBufC* CNSmlDmFotaAdapterDb::ConvertTo16BitLC( const TDesC8& aDes ) const
       
   876     {
       
   877     HBufC* buf = HBufC::NewLC( aDes.Length() );
       
   878     buf->Des().Copy( aDes );
       
   879     
       
   880     return buf;
       
   881     }