cbs/cbsserver/ServerSrc/CbsUtils.cpp
author hgs
Fri, 06 Aug 2010 13:08:23 +0300
changeset 36 7c428525956b
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  This module contains the implementation of CbsUtils class 
hgs
parents:
diff changeset
    15
*                 member functions.
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// INCLUDE FILES
hgs
parents:
diff changeset
    22
#include <f32file.h>
hgs
parents:
diff changeset
    23
#include <barsc.h>
hgs
parents:
diff changeset
    24
#include <bautils.h>
hgs
parents:
diff changeset
    25
#include <sysutil.h>            // FFS critical level check
hgs
parents:
diff changeset
    26
#include "CbsUtils.h"
hgs
parents:
diff changeset
    27
#include <hal.h>
hgs
parents:
diff changeset
    28
#include <centralrepository.h>
hgs
parents:
diff changeset
    29
#include <UiklafInternalCRKeys.h>
hgs
parents:
diff changeset
    30
#include <data_caging_path_literals.hrh> 
hgs
parents:
diff changeset
    31
#include "CbsLogger.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// ================= CONSTANTS =======================
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
const TInt KRamMemoryCriticalLevel = 1500000;   // KRAMLOWTHRESHOLD = 1500000
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    43
// CbsUtils::FindAndOpenDefaultResourceFileLC
hgs
parents:
diff changeset
    44
// Searches and opens the DLL default resource file.
hgs
parents:
diff changeset
    45
// (other items were commented in a header).
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
//
hgs
parents:
diff changeset
    48
void CbsUtils::FindAndOpenDefaultResourceFileLC(
hgs
parents:
diff changeset
    49
    RFs& aFs, 
hgs
parents:
diff changeset
    50
    RResourceFile& aResFile )
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
    // default resource file path
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
	_LIT(KDirAndFile,"z:CbsServer.rsc"); 
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
	TParse* fp = new(ELeave) TParse(); 
hgs
parents:
diff changeset
    57
	fp->Set(KDirAndFile, &KDC_RESOURCE_FILES_DIR, NULL); 
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    static const TInt KDefResFileSignature = 4;
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    // Find the resource file
hgs
parents:
diff changeset
    62
    TFileName fileName( fp->FullName() ); 
hgs
parents:
diff changeset
    63
    BaflUtils::NearestLanguageFile( aFs, fileName );
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    // Open the resource file
hgs
parents:
diff changeset
    66
    aResFile.OpenL( aFs, fileName );
hgs
parents:
diff changeset
    67
    // Push close operation in tbe cleanup stack
hgs
parents:
diff changeset
    68
    CleanupClosePushL( aResFile );
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    aResFile.ConfirmSignatureL( KDefResFileSignature );
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
	delete fp;
hgs
parents:
diff changeset
    73
    }
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
// CbsUtils::FFSCriticalLevelCheckL
hgs
parents:
diff changeset
    77
// Checks that there is space for writing data on FFS.
hgs
parents:
diff changeset
    78
// (other items were commented in a header).
hgs
parents:
diff changeset
    79
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
void CbsUtils::FFSCriticalLevelCheckL( 
hgs
parents:
diff changeset
    82
    const TInt aBytesToWrite, 
hgs
parents:
diff changeset
    83
    RFs& aFs )
hgs
parents:
diff changeset
    84
    {
hgs
parents:
diff changeset
    85
    CBSLOGSTRING("CBSSERVER: >>> CbsUtils::FFSCriticalLevelCheckL()");
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    // Checks RAM memory critical level.
hgs
parents:
diff changeset
    88
    if (RamMemCriticalLevelCheckL( aBytesToWrite ))
hgs
parents:
diff changeset
    89
        {
hgs
parents:
diff changeset
    90
        User::Leave( KErrDiskFull );    // returns KErrDiskFull -> no changes to clients
hgs
parents:
diff changeset
    91
        }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    // Checks RAM disk critical level
hgs
parents:
diff changeset
    94
    if ( SysUtil::FFSSpaceBelowCriticalLevelL( &aFs, aBytesToWrite ) )
hgs
parents:
diff changeset
    95
        {
hgs
parents:
diff changeset
    96
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
    97
        }
hgs
parents:
diff changeset
    98
        
hgs
parents:
diff changeset
    99
    CBSLOGSTRING("CBSSERVER: <<< CbsUtils::FFSCriticalLevelCheckL()");
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
// CbsUtils::RamMemCriticalLevelCheckL
hgs
parents:
diff changeset
   104
// Checks that there is space for allocating data in memory.
hgs
parents:
diff changeset
   105
// (other items were commented in a header).
hgs
parents:
diff changeset
   106
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   107
//
hgs
parents:
diff changeset
   108
TBool CbsUtils::RamMemCriticalLevelCheckL( 
hgs
parents:
diff changeset
   109
    const TInt aBytesToWrite)
hgs
parents:
diff changeset
   110
    {
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    // Read the critical threahold RAM memory level from the repository.
hgs
parents:
diff changeset
   113
    TInt thresholdVal;
hgs
parents:
diff changeset
   114
    CRepository* repository = CRepository::NewLC( KCRUidUiklaf );
hgs
parents:
diff changeset
   115
    if (repository->Get( KUikOOMRamLowThreshold, thresholdVal ) != KErrNone)
hgs
parents:
diff changeset
   116
        {
hgs
parents:
diff changeset
   117
        thresholdVal = KRamMemoryCriticalLevel;
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
    CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    TInt freeMem = 0;
hgs
parents:
diff changeset
   122
    HAL::Get(HAL::EMemoryRAMFree, freeMem);
hgs
parents:
diff changeset
   123
    if ( freeMem > (thresholdVal + aBytesToWrite) )
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
        return EFalse;
hgs
parents:
diff changeset
   126
        }
hgs
parents:
diff changeset
   127
  
hgs
parents:
diff changeset
   128
    return ETrue;
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   131
// CbsUtils::VolumeCriticalLevelCheckL
hgs
parents:
diff changeset
   132
// Leaves with KErrDiskFull if writing aBytesToWrite bytes 
hgs
parents:
diff changeset
   133
// to the RAM File System would reduce the free space on RAM 
hgs
parents:
diff changeset
   134
// under the critical level.
hgs
parents:
diff changeset
   135
// (other items were commented in a header).
hgs
parents:
diff changeset
   136
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   137
//
hgs
parents:
diff changeset
   138
void CbsUtils::VolumeCriticalLevelCheckL( 
hgs
parents:
diff changeset
   139
    const TDesC& aFileName, 
hgs
parents:
diff changeset
   140
    TInt aBytesToWrite, 
hgs
parents:
diff changeset
   141
    const RFs& aFs )
hgs
parents:
diff changeset
   142
    {
hgs
parents:
diff changeset
   143
    // Convert file name to a volume number
hgs
parents:
diff changeset
   144
    TInt volumeNumber;
hgs
parents:
diff changeset
   145
    aFs.CharToDrive( aFileName[0], volumeNumber );
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    // Find out if the volume has enough free space
hgs
parents:
diff changeset
   148
    TVolumeInfo volume;
hgs
parents:
diff changeset
   149
    User::LeaveIfError( aFs.Volume( volume, volumeNumber ) );
hgs
parents:
diff changeset
   150
    if ( volume.iFree < aBytesToWrite )
hgs
parents:
diff changeset
   151
        {
hgs
parents:
diff changeset
   152
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    }
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   157
// CbsUtils::ExistsL
hgs
parents:
diff changeset
   158
// Returns ETrue, if the file aFile exists.
hgs
parents:
diff changeset
   159
// (other items were commented in a header).
hgs
parents:
diff changeset
   160
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   161
//
hgs
parents:
diff changeset
   162
TBool CbsUtils::ExistsL( 
hgs
parents:
diff changeset
   163
    const RFs& aFs, 
hgs
parents:
diff changeset
   164
    const TDesC& aFile )
hgs
parents:
diff changeset
   165
    {
hgs
parents:
diff changeset
   166
    TParse filename;
hgs
parents:
diff changeset
   167
    aFs.Parse( aFile, filename );
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
    TBool returnCode( EFalse );
hgs
parents:
diff changeset
   170
	TUint attributes;
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
    TInt result( aFs.Att( filename.FullName(), attributes ) );
hgs
parents:
diff changeset
   173
    if ( result == KErrNone )
hgs
parents:
diff changeset
   174
        {
hgs
parents:
diff changeset
   175
        returnCode = ETrue;
hgs
parents:
diff changeset
   176
        }
hgs
parents:
diff changeset
   177
    else if ( result == KErrNotFound ) 
hgs
parents:
diff changeset
   178
        {
hgs
parents:
diff changeset
   179
        returnCode = EFalse;
hgs
parents:
diff changeset
   180
        }
hgs
parents:
diff changeset
   181
    else 
hgs
parents:
diff changeset
   182
        {
hgs
parents:
diff changeset
   183
        User::Leave( result );
hgs
parents:
diff changeset
   184
        }
hgs
parents:
diff changeset
   185
    return returnCode;  
hgs
parents:
diff changeset
   186
    }
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   189
// CbsUtils::DeleteFileL
hgs
parents:
diff changeset
   190
// Deletes the given file.
hgs
parents:
diff changeset
   191
// (other items were commented in a header).
hgs
parents:
diff changeset
   192
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   193
//
hgs
parents:
diff changeset
   194
void CbsUtils::DeleteFileL( 
hgs
parents:
diff changeset
   195
    RFs& aFs, 
hgs
parents:
diff changeset
   196
    const TDesC& aFile )
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
    TInt result( aFs.Delete( aFile ) );
hgs
parents:
diff changeset
   199
    if ( result != KErrNone && 
hgs
parents:
diff changeset
   200
        result != KErrNotFound && 
hgs
parents:
diff changeset
   201
        result != KErrPathNotFound )
hgs
parents:
diff changeset
   202
        {
hgs
parents:
diff changeset
   203
        User::Leave( result );
hgs
parents:
diff changeset
   204
        }
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
// End of File
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211