diff -r 79d62d1d7957 -r 493788a4a8a4 omadrm/drmengine/server/src/DRMRightsServer.cpp --- a/omadrm/drmengine/server/src/DRMRightsServer.cpp Tue Feb 02 00:21:44 2010 +0200 +++ b/omadrm/drmengine/server/src/DRMRightsServer.cpp Fri Apr 16 15:14:55 2010 +0300 @@ -20,32 +20,32 @@ #include #include #include -#include +#include #include #include #ifdef RD_MULTIPLE_DRIVE -#include +#include #endif #include "DRMRightsServer.h" -#include "DRMRightsDb.h" +#include "drmrightsdb.h" #include "DRMDbSession.h" #include "DRMEngineClientServer.h" -#include "DRMLog.h" +#include "drmlog.h" #include "DRMNotifier.h" #include "DrmKeyStorage.h" -#include "drmnotifierserver.h" -#include "roapstorageserver.h" +#include "DRMNotifierServer.h" +#include "RoapStorageServer.h" #include "drmnotifierclientserver.h" #include "drmroapclientserver.h" #include "DRMXOma.h" #include "DRMBackupObserver.h" #include "DRMBackup.h" #include "flogger.h" -#include "drmrightsparser.h" -#include "drmrights.h" -#include "drmhelpercommon.h" +#include "DrmRightsParser.h" +#include "DRMRights.h" +#include "DRMHelperCommon.h" #include "wmdrmclientwrapper.h" @@ -65,7 +65,7 @@ */ // EXTERNAL DATA STRUCTURES -// EXTERNAL FUNCTION PROTOTYPES +// EXTERNAL FUNCTION PROTOTYPES // CONSTANTS LOCAL_C const TUint KMaxHeapsize = 0x7A120; @@ -159,16 +159,16 @@ // Returns: TInt: Symbian OS error code. // ----------------------------------------------------------------------------- // -LOCAL_C TInt Startup( void ) +LOCAL_C TInt Startup( void ) { TInt error = KErrNone; CTrapCleanup* trap = CTrapCleanup::New(); CActiveScheduler* scheduler = new CActiveScheduler(); - + if ( trap && scheduler ) { CActiveScheduler::Install( scheduler ); - + error = StartDBServer(); } else @@ -176,23 +176,23 @@ error = KErrNoMemory; } - delete scheduler; + delete scheduler; scheduler = NULL; - + delete trap; trap = NULL; - + if ( error ) { // Something went wrong. Release the client (if any). SignalClient(); - + if ( error == KErrAlreadyExists ) { error = KErrNone; } } - + return error; } @@ -216,50 +216,50 @@ // This function starts the actual server under TRAP harness and starts // waiting for connections. This function returns only if there has been // errors during server startup or the server is stopped for some reason. -// +// // Returns: TInt: Symbian OS error code. // ----------------------------------------------------------------------------- -TInt StartDBServer( void ) +TInt StartDBServer( void ) { TInt error = KErrNone; CDRMRightsServer* server = NULL; TUint8 count = 0; - + do { DRMLOG2( _L( "RightsServer.exe: StartDBServer: %d" ), error ); - + ++count; - + TRAP( error, ( server = CDRMRightsServer::NewL() ) ); - - if ( error ) + + if ( error ) { User::After( TTimeIntervalMicroSeconds32(KWaitingTime) ); } - + } while( error && ( count <= KMaxStartTries ) ); - - if( error ) + + if( error ) { DRMLOG2( _L( "RightsServer.exe: CDRMRightsServer::NewL failed: %d " ), error ); // Failed return error; } - + // Release the semaphore if necessary. SignalClient(); - + // Start waiting for connections CActiveScheduler::Start(); - + // Dying... // Delete CDRMRigntsServer - + DRMLOG( _L( "RightsServer.exe: DB server dying..." ) ); delete server; - + return KErrNone; } @@ -290,7 +290,7 @@ (reinterpret_cast*>(aPtr))->ResetAndDestroy(); (reinterpret_cast*>(aPtr))->Close(); } -#endif +#endif // ============================ MEMBER FUNCTIONS =============================== @@ -302,46 +302,46 @@ CDRMRightsServer* CDRMRightsServer::NewL() { CDRMRightsServer* self = new( ELeave ) CDRMRightsServer(); - + CleanupStack::PushL( self ); - + self->ConstructL(); - + CleanupStack::Pop( self ); - + return self; } // ----------------------------------------------------------------------------- // Destructor // ----------------------------------------------------------------------------- -CDRMRightsServer::~CDRMRightsServer() +CDRMRightsServer::~CDRMRightsServer() { DRMLOG( _L( "CDRMRightsServer::~" ) ); - + delete iIMEI; iIMEI = NULL; - + delete iIMSI; iIMSI = NULL; - + delete iDb; iDb = NULL; - + iClock.Close(); iCache.Close(); - + iMeteringDb.Close(); - + iFs.Close(); iActiveCountConstraints.ResetAndDestroy(); iActiveCountConstraints.Close(); - + delete iBackupObserver; - delete iBackupHandler; + delete iBackupHandler; delete iActiveBackupClient; delete iDbWatcher; -#if 0 +#if 0 // Close and delete the shared data client - if( iSharedDataClient ) + if( iSharedDataClient ) { iSharedDataClient->Close(); delete iSharedDataClient; @@ -353,7 +353,7 @@ { delete iNotifier; iNotifier = NULL; } - + //An empty semaphore RSemaphore semaphore; } @@ -366,18 +366,18 @@ TBool CDRMRightsServer::GetSecureTime( TTime& aTime ) const { DRMClock::ESecurityLevel secLevel = DRMClock::KInsecure; - - TInt timezone( 0 ); - + + TInt timezone( 0 ); + iClock.GetSecureTime( aTime, timezone, secLevel ); - + if( secLevel == DRMClock::KSecure ) { DRMLOG( _L( "CDRMRightsServer::GetSecureTime: Time is secure\r\n" ) ); - return ETrue; - } - - DRMLOG( _L( "CDRMRightsServer::GetSecureTime: Time is not secure\r\n" ) ); + return ETrue; + } + + DRMLOG( _L( "CDRMRightsServer::GetSecureTime: Time is not secure\r\n" ) ); return EFalse; } @@ -406,8 +406,8 @@ { return iFs; } - - + + RDRMReplayCache& CDRMRightsServer::ReplayCache() { return iCache; @@ -426,8 +426,8 @@ // void CDRMRightsServer::HandleNotifyL(const TUid /*aUid*/, const TDesC& /*aKey*/, - const TDesC& /*aValue*/) - { + const TDesC& /*aValue*/) + { /* XXX Backup via Publish/Subscribe __ASSERT_DEBUG( iDb, User::Invariant() ); TInt value = -1; @@ -453,12 +453,12 @@ if( value == 1 ) // PrepareForBackup { - TRAPD( error, iDb->BackupDBL( KNullDesC, + TRAPD( error, iDb->BackupDBL( KNullDesC, KNullDesC8 ) ); // Notify that it's done User::LeaveIfError( iSharedDataClient->AssignToTemporaryFile( KSDUidSystem ) ); - User::LeaveIfError( iSharedDataClient->SetInt( + User::LeaveIfError( iSharedDataClient->SetInt( KDRMBackupRestoreStatus, 0 ) ); iSharedDataClient->Flush(); } @@ -473,7 +473,7 @@ // From CActive. Complete the request and restart the scheduler. // ----------------------------------------------------------------------------- // -TInt CDRMRightsServer::RunError( TInt aError ) +TInt CDRMRightsServer::RunError( TInt aError ) { DRMLOG2( _L( "CDRMRightsServer::RunError: %d" ), aError ); @@ -482,10 +482,10 @@ { Message().Complete( aError ); } - + // Restart the scheduler. ReStart(); - + // Error handled. return KErrNone; } @@ -501,8 +501,8 @@ if ( ! User::QueryVersionSupported( TVersion( DRMEngine::KServerMajorVersion, DRMEngine::KServerMinorVersion, - DRMEngine::KServerBuildVersion ), - aVersion ) ) + DRMEngine::KServerBuildVersion ), + aVersion ) ) { // Sorry, no can do. User::Leave( KErrNotSupported ); @@ -518,40 +518,40 @@ // might leave. // ----------------------------------------------------------------------------- // -CDRMRightsServer::CDRMRightsServer() : +CDRMRightsServer::CDRMRightsServer() : CServer2( EPriorityStandard ), iIMEI( NULL ), - iArmed( EFalse ), + iArmed( EFalse ), iIMSI( NULL ), iGetImsi( ETrue ) { // Nothing } - + // ----------------------------------------------------------------------------- // CDRMRightsServer::ConstructL // Symbian 2nd phase constructor can leave. // ----------------------------------------------------------------------------- // -void CDRMRightsServer::ConstructL() +void CDRMRightsServer::ConstructL() { DRMLOG( _L( "CDRMRightsServer::ConstructL" ) ); TDRMKey key; RSemaphore semaphore; RProcess currentprocess; - + // Ignore errors User::RenameThread( KRightsServerThread ); User::LeaveIfError( iFs.Connect() ); - + #ifndef RD_MULTIPLE_DRIVE - + // Ignore errors iFs.MkDirAll( KDRMDbTempPath ); - + #else //RD_MULTIPLE_DRIVE - + TFileName tempPath; TFileName tempPath2; TFileName tempRemovablePath; @@ -559,15 +559,15 @@ TChar driveLetter; TChar driveLetterRemovable; DriveInfo::GetDefaultDrive( DriveInfo::EDefaultSystem, driveNumber ); - iFs.DriveToChar( driveNumber, driveLetter ); - - tempPath.Format( KDbTempPath, (TUint)driveLetter ); - + iFs.DriveToChar( driveNumber, driveLetter ); + + tempPath.Format( KDbTempPath, (TUint)driveLetter ); + // Ignore errors iFs.MkDirAll( tempPath ); - + #endif - + DRMLOG( _L( "CDRMRightsServer::ConstructL: SharedDataClient" ) ); // Create and instance of the shared data client @@ -581,134 +581,134 @@ KSDUidSystem, &KBackupRestoreStatus ) ); User::LeaveIfError(iSharedDataClient->NotifyChange( KSDUidSystem, &KDRMBackupRestoreStatus) ); - */ - - + */ + + GetDbKeyL( key ); - - + + DRMLOG( _L( "CDRMRightsServer::ConstructL: database" ) ); GetIMEIL(); - + // Create the imsi pointer array: iIMSI = CDRMPointerArray::NewL(); iIMSI->SetAutoCleanup(ETrue); - + GetIMSIL(); - + #ifndef RD_MULTIPLE_DRIVE - + iDb = CDRMRightsDB::NewL( iFs, KRightsDir, key, *iIMEI ); - + #else //RD_MULTIPLE_DRIVE - + tempPath.Format( KRightsDir, (TUint)driveLetter ); - + iDb = CDRMRightsDB::NewL( iFs, tempPath, key, *iIMEI ); - + #endif - + key.FillZ(); - + DRMLOG( _L( "CDRMRightsServer::ConstructL: DB started." ) ); DRMLOG( _L( "CDRMRightsServer::ConstructL: Starting Notifier ." ) ); - + User::LeaveIfError( semaphore.CreateGlobal( KDRMEngCommonSemaphore, 0 ) ); CleanupClosePushL( semaphore ); - + StartThreadL( DRMNotifier::KServerName, StartupNotifier, semaphore ); DRMLOG( _L( "CDRMRightsServer::ConstructL: Notifier thread created." ) ); - + StartThreadL( Roap::KServerName, StartupRoapStorage, semaphore ); DRMLOG( _L( "CDRMRightsServer::ConstructL: ROAP thread created." ) ); - + #ifdef __DRM_CLOCK StartThreadL( DRMClock::KServerName, StartupClock, semaphore ); DRMLOG( _L( "CDRMRightsServer::ConstructL: clock thread created." ) ); #endif - + CleanupStack::PopAndDestroy(); // semaphore - + iNotifier = CDRMNotifier::NewL(); - + iCache.Set( iFs ); #ifndef RD_MULTIPLE_DRIVE - + iCache.InitL( KTimedReplayCacheFile, KPlainReplayCacheFile ); -#ifdef RD_DRM_METERING +#ifdef RD_DRM_METERING iMeteringDb.Set( iFs ); iMeteringDb.InitL( KMeteringDataBaseFile ); #endif - + #else //RD_MULTIPLE_DRIVE - + tempPath.Format( KTimedReplayCacheFile, (TUint)driveLetter ); tempPath2.Format( KPlainReplayCacheFile, (TUint)driveLetter ); - + iCache.InitL( tempPath, tempPath2 ); - -#ifdef RD_DRM_METERING - + +#ifdef RD_DRM_METERING + tempPath.Format( KMeteringDataBaseFile, (TUint)driveLetter ); - + iMeteringDb.Set( iFs ); iMeteringDb.InitL( tempPath ); #endif - + #endif - + User::LeaveIfError( iClock.Connect() ); // xoma header list creation iXOmaHeaders = new (ELeave) RPointerArray< CDRMXOma >(); - + // p/s iBackupObserver = CDRMBackupObserver::NewL( *(const_cast(this))); iBackupObserver->Start(); - + #ifdef USE_RO_IMPORT // Import any OMA DRM 1.0 RO in the import directory, ignore all errors (except // when checking the default removable mass storage) TInt r = KErrNone; - + #ifndef RD_MULTIPLE_DRIVE - + TRAP( r, ImportRightsObjectsL( KInternalImportDir ) ); TRAP( r, ImportRightsObjectsL( KUserDiskImportDir ) ); - + #else //RD_MULTIPLE_DRIVE - + tempPath.Format( KInternalImportDir, (TUint)driveLetter ); - + DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, driveNumber ); - iFs.DriveToChar( driveNumber, driveLetter ); - - // Default mass storage is usually eMMC + iFs.DriveToChar( driveNumber, driveLetter ); + + // Default mass storage is usually eMMC tempPath2.Format( KUserDiskImportDir, (TUint)driveLetter ); - + // Find out if a removable mass storage also exists r = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, driveNumber ); iFs.DriveToChar( driveNumber, driveLetterRemovable ); - - // Import is not needed from the default removable mass storage drive if the drive - // letter of the default mass storage and the default removable mass storage are + + // Import is not needed from the default removable mass storage drive if the drive + // letter of the default mass storage and the default removable mass storage are // the same or the removable mass storage is not supported - if ( ( driveLetter != driveLetterRemovable ) && ( r == KErrNone ) ) + if ( ( driveLetter != driveLetterRemovable ) && ( r == KErrNone ) ) { tempRemovablePath.Format( KUserRemovableDiskImportDir, (TUint)driveLetterRemovable ); TRAP( r, ImportRightsObjectsL( tempRemovablePath ) ); } - + TRAP( r, ImportRightsObjectsL( tempPath ) ); TRAP( r, ImportRightsObjectsL( tempPath2 ) ); - + #endif - + #endif // Add the server to the scheduler. @@ -717,17 +717,17 @@ // Start watching our RDB iDbWatcher = CDbWatcher::NewL( *this ); iDbWatcher->StartWatching(); - + // Start watching the helper server iProcWatcher = CProcWatcher::NewL( *this, _L( "*DcfRepSrv*" ), _L( "DcfRepSrv" ) ); iProcWatcher->StartWatching(); - + // Ready to watch iArmed = ETrue; __UHEAP_MARK; TRAP( r, FeatureManager::InitializeLibL() ); - if( !r && FeatureManager::FeatureSupported( KFeatureIdWindowsMediaDrm ) ) + if( !r && FeatureManager::FeatureSupported( KFeatureIdWindowsMediaDrm ) ) { static const TInt KGateOrdinal = 1; RLibrary library; @@ -748,47 +748,47 @@ __UHEAP_MARKEND; } } - library.Close(); + library.Close(); } FeatureManager::UnInitializeLib(); - __UHEAP_MARKEND; + __UHEAP_MARKEND; } - -// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- // CDRMRightsServer::StartThreadL // Start a new thread. -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- void CDRMRightsServer::StartThreadL( const TDesC& aThreadName, TThreadFunction aFunc, RSemaphore& aSemaphore ) { RThread thread; - - User::LeaveIfError( + + User::LeaveIfError( thread.Create( aThreadName, - aFunc, + aFunc, KDefaultStackSize, - KMinHeapSize, + KMinHeapSize, KMaxHeapsize, NULL ) ); - + thread.Resume(); - + aSemaphore.Wait(); - + thread.Close(); } - + // ----------------------------------------------------------------------------- // CDRMRightsServer::GetDbKeyL -// Fetches the rights database key from Wallet or uses a constant +// Fetches the rights database key from Wallet or uses a constant // key if Wallet is not supported. // ----------------------------------------------------------------------------- // -void CDRMRightsServer::GetDbKeyL( TDRMKey& aKey ) +void CDRMRightsServer::GetDbKeyL( TDRMKey& aKey ) { TInt r = KErrNone; - + DRMLOG( _L( "CDRMRightsServer::GetDbKey" ) ); MDrmKeyStorage* storage = DrmKeyStorageNewL(); TRAP( r, storage->GetDeviceSpecificKeyL( aKey ) ); @@ -801,28 +801,28 @@ // Generates the actual key based on the given key seed. // ----------------------------------------------------------------------------- // -void CDRMRightsServer::GenerateKeyL( HBufC*& aKeySeed, +void CDRMRightsServer::GenerateKeyL( HBufC*& aKeySeed, TDRMKey& aKey ) const { - __ASSERT_ALWAYS( aKeySeed->Size() >= KDRMKeyLength, + __ASSERT_ALWAYS( aKeySeed->Size() >= KDRMKeyLength, User::Leave( KErrUnderflow ) ); - + TPtrC8 key( reinterpret_cast< TUint8* >( const_cast< TUint16* >( aKeySeed->Ptr() ) ), KDRMKeyLength ); - + aKey = key; } // ----------------------------------------------------------------------------- // CDRMRightsServer::XOmaHeaders() -// return the pointer of the X-Oma headers list +// return the pointer of the X-Oma headers list // ----------------------------------------------------------------------------- // RPointerArray< CDRMXOma >& CDRMRightsServer::XOmaHeaders( void ) - { - return *iXOmaHeaders; - } + { + return *iXOmaHeaders; + } @@ -836,19 +836,19 @@ { return *iIMEI; } - + #ifdef DRM_USE_SERIALNUMBER_URI TInt error( KErrNone ); TInt count( 0 ); TInt count2( 0 ); TUint32 caps( 0 ); TBool found (EFalse); - + RTelServer etelServer; RMobilePhone phone; - + TUint KMaxImeiTries = 5; - + for ( TUint8 i = 0; i < KMaxImeiTries; ++i ) { error = etelServer.Connect(); @@ -856,31 +856,31 @@ { User::After( TTimeIntervalMicroSeconds32( KWaitingTime ) ); } - else + else { break; } } - + User::LeaveIfError( error ); CleanupClosePushL( etelServer ); - - User::LeaveIfError( etelServer.LoadPhoneModule( KMmTsyModuleName ) ); - + + User::LeaveIfError( etelServer.LoadPhoneModule( KMmTsyModuleName ) ); + TUnloadModule unload; unload.iServer = &etelServer; unload.iName = &KMmTsyModuleName; - + TCleanupItem item( DoUnloadPhoneModule, &unload ); CleanupStack::PushL( item ); User::LeaveIfError( etelServer.EnumeratePhones( count ) ); - + for ( count2 = 0; count2 < count && !found; ++count2 ) { RTelServer::TPhoneInfo phoneInfo; User::LeaveIfError( etelServer.GetTsyName( count2, phoneInfo.iName ) ); - - if ( phoneInfo.iName.CompareF(KMmTsyModuleName()) == 0 ) + + if ( phoneInfo.iName.CompareF(KMmTsyModuleName()) == 0 ) { User::LeaveIfError( etelServer.GetPhoneInfo( count2, phoneInfo ) ); User::LeaveIfError( phone.Open( etelServer, phoneInfo.iName ) ); @@ -894,43 +894,43 @@ // Not found. User::Leave( KErrNotFound ); } - + User::LeaveIfError( phone.GetIdentityCaps( caps ) ); if ( caps & RMobilePhone::KCapsGetSerialNumber ) { RMobilePhone::TMobilePhoneIdentityV1 id; TRequestStatus status; - + phone.GetPhoneId( status, id ); - + User::WaitForRequest( status ); - + User::LeaveIfError( status.Int() ); - + iIMEI = id.iSerialNumber.AllocL(); - + CleanupStack::PopAndDestroy( 3 ); // phone, item, etelServer - + HBufC8* buf = HBufC8::NewL( iIMEI->Size() ); TPtr8 ptr( buf->Des() ); ptr.Copy( *iIMEI ); - + DRMLOG(_L("IMEI:")); DRMLOGHEX(ptr); delete buf; - + return *iIMEI; } - + User::Leave( KErrNotFound ); - + // Never happens... - return *iIMEI; - + return *iIMEI; + #else _LIT( KDefaultSerialNumber, "123456789123456789" ); iIMEI = KDefaultSerialNumber().AllocL(); - + return *iIMEI; #endif } @@ -941,13 +941,13 @@ // const CDRMPointerArray& CDRMRightsServer::GetIMSIL() { - + if ( !iGetImsi ) { return *iIMSI; } -#ifndef __WINS__ +#ifndef __WINS__ TInt error( KErrNone ); TInt count( 0 ); TInt count2( 0 ); @@ -955,11 +955,11 @@ TBool found (EFalse); HBufC8* imsi = NULL; HBufC8* imsiNumber = NULL; - + RTelServer etelServer; RMobilePhone phone; - - TUint KMaxImeiTries = 5; + + TUint KMaxImeiTries = 5; for ( TUint8 i = 0; i < KMaxImeiTries; ++i ) { error = etelServer.Connect(); @@ -967,31 +967,31 @@ { User::After( TTimeIntervalMicroSeconds32( KWaitingTime ) ); } - else + else { break; } } - + User::LeaveIfError( error ); - CleanupClosePushL( etelServer ); - User::LeaveIfError( etelServer.LoadPhoneModule( KMmTsyModuleName ) ); - + CleanupClosePushL( etelServer ); + User::LeaveIfError( etelServer.LoadPhoneModule( KMmTsyModuleName ) ); + TUnloadModule unload; unload.iServer = &etelServer; unload.iName = &KMmTsyModuleName; - + TCleanupItem item( DoUnloadPhoneModule, &unload ); CleanupStack::PushL( item ); - + User::LeaveIfError( etelServer.EnumeratePhones( count ) ); - + for ( count2 = 0; count2 < count && !found; ++count2 ) { RTelServer::TPhoneInfo phoneInfo; User::LeaveIfError( etelServer.GetTsyName( count2, phoneInfo.iName ) ); - - if ( phoneInfo.iName.CompareF(KMmTsyModuleName()) == 0 ) + + if ( phoneInfo.iName.CompareF(KMmTsyModuleName()) == 0 ) { User::LeaveIfError( etelServer.GetPhoneInfo( count2, phoneInfo ) ); User::LeaveIfError( phone.Open( etelServer, phoneInfo.iName ) ); @@ -1005,127 +1005,127 @@ // Not found. User::Leave( KErrNotFound ); } - - + + User::LeaveIfError( phone.GetIdentityCaps( caps ) ); if( caps & RMobilePhone::KCapsGetSubscriberId ) { - RMobilePhone::TMobilePhoneSubscriberId imsiId; + RMobilePhone::TMobilePhoneSubscriberId imsiId; TRequestStatus status; - + phone.GetSubscriberId( status, imsiId ); - + User::WaitForRequest( status ); - + if( ! status.Int() ) - { + { imsi = HBufC8::NewMaxLC( imsiId.Length() + KImsiId().Size() ); TPtr8 imsiPtr(const_cast(imsi->Ptr()), 0, imsi->Size()); - + imsiNumber = CnvUtfConverter::ConvertFromUnicodeToUtf8L( imsiId ); CleanupStack::PushL( imsiNumber ); - + imsiPtr.Copy( KImsiId() ); imsiPtr.Append( *imsiNumber ); CleanupStack::PopAndDestroy(); // imsiNumber } else - { + { imsi = NULL; } } else - { + { imsi = NULL; - } - - + } + + // Clean up whatever is in there iIMSI->ResetAndDestroy(); - - if( imsi ) - { - // if we got it we wont try again + + if( imsi ) + { + // if we got it we wont try again iIMSI->AppendL( imsi ); CleanupStack::Pop(); // imsi - iGetImsi = EFalse; + iGetImsi = EFalse; } // Check for possible extra IMSI individual constraints AppendExtendedIndividualConstraintsL(&phone); - + CleanupStack::PopAndDestroy(); // phone CleanupStack::PopAndDestroy(); // cleanup item CleanupStack::PopAndDestroy(); // etel server - return *iIMSI; - + return *iIMSI; + #else HBufC8* imsi = NULL; - - if( iGetImsi ) + + if( iGetImsi ) { iGetImsi = EFalse; _LIT8( KDefaultSerialNumber, "IMSI:123456789123456789" ); imsi = KDefaultSerialNumber().AllocLC(); iIMSI->AppendL( imsi ); - CleanupStack::Pop(); + CleanupStack::Pop(); AppendExtendedIndividualConstraintsL(); } - + return *iIMSI; #endif // __WINS__ } -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CDRMRightsServer::AppendExtendedIndividualConstraintsL // If the extension DLL exists it is loaded and used to obtain additional // valid individual constraints -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- void CDRMRightsServer::AppendExtendedIndividualConstraintsL(RMobilePhone* aMobilePhone) - { + { // Load the externsion DLL RLibrary lib; - + #ifndef RD_MULTIPLE_DRIVE - + if (lib.LoadRomLibrary(KDRMIndividualConstraintExtensionDll,KNullDesC)==KErrNone) - + #else //RD_MULTIPLE_DRIVE - + TInt driveNumber( -1 ); TChar driveLetter; DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRom, driveNumber ); - iFs.DriveToChar( driveNumber, driveLetter ); - - TFileName individualConstraindExtensionDll; - individualConstraindExtensionDll.Format( - KIndividualConstraintExtensionDll, (TUint)driveLetter ); - + iFs.DriveToChar( driveNumber, driveLetter ); + + TFileName individualConstraindExtensionDll; + individualConstraindExtensionDll.Format( + KIndividualConstraintExtensionDll, (TUint)driveLetter ); + if ( lib.LoadRomLibrary( individualConstraindExtensionDll, KNullDesC ) == KErrNone ) - + #endif - - { + + { CleanupClosePushL(lib); - // Get first exported ordinal - factory method returning + // Get first exported ordinal - factory method returning // MDRMIndividualConstraintExtension* - TLibraryFunction factory = lib.Lookup(1); + TLibraryFunction factory = lib.Lookup(1); if (factory) { // Instantiate object - MDRMIndividualConstraintExtension* extendedConstraints = + MDRMIndividualConstraintExtension* extendedConstraints = reinterpret_cast(factory()); if (extendedConstraints) { - CleanupStack::PushL(TCleanupItem(Release,extendedConstraints)); + CleanupStack::PushL(TCleanupItem(Release,extendedConstraints)); extendedConstraints->AppendConstraintsL(*iIMSI,aMobilePhone); - CleanupStack::PopAndDestroy(extendedConstraints); //calls Release + CleanupStack::PopAndDestroy(extendedConstraints); //calls Release } } @@ -1139,8 +1139,8 @@ // ----------------------------------------------------------------------------- void CDRMRightsServer::Release(TAny* aIndividualConstraintExtension) { - MDRMIndividualConstraintExtension* extendedConstraints = - reinterpret_cast(aIndividualConstraintExtension); + MDRMIndividualConstraintExtension* extendedConstraints = + reinterpret_cast(aIndividualConstraintExtension); extendedConstraints->Release(); //free resources } @@ -1152,14 +1152,14 @@ void CDRMRightsServer::HandleBackupEventL( TInt aBackupEvent ) { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::BackupCalled\n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::BackupCalled\n\r")); //conn::TBURPartType eventType; //conn::TBackupIncType incType; TDriveList aDriveList; - - //RFileLogger::WriteFormat(KLogDir, KLogName, EFileLoggingModeAppend, _L8("backupevent: %d"), aBackupEvent); - + + //RFileLogger::WriteFormat(KLogDir, KLogName, EFileLoggingModeAppend, _L8("backupevent: %d"), aBackupEvent); + // If there is no operation going or state is normal // Delete the client and handler @@ -1169,73 +1169,73 @@ /* if( aBackupEvent == conn::EBURUnset ) { - RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Unset\n\r")); + RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Unset\n\r")); } - else + else { - RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Normal\n\r")); - } - */ + RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Normal\n\r")); + } + */ if( iActiveBackupClient ) { delete iActiveBackupClient; - iActiveBackupClient = NULL; + iActiveBackupClient = NULL; } - + if( iBackupHandler ) { delete iBackupHandler; - iBackupHandler = NULL; + iBackupHandler = NULL; } - } + } else if( aBackupEvent & conn::EBURBackupFull || aBackupEvent & conn::EBURRestoreFull ) { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Full\n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Full\n\r")); // ab handler iBackupHandler = CDRMBackup::NewL( iDb, iFs ); - + // ab client iActiveBackupClient = conn::CActiveBackupClient::NewL( iBackupHandler ); - + // Confirm that we have done everything if there even was anything to do - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm F \n\r")); - iActiveBackupClient->ConfirmReadyForBURL( KErrNone ); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm F \n\r")); + iActiveBackupClient->ConfirmReadyForBURL( KErrNone ); } else if( aBackupEvent & conn::EBURBackupPartial || aBackupEvent & conn::EBURRestorePartial ) { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Partial\n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Partial\n\r")); // ab handler iBackupHandler = CDRMBackup::NewL( iDb, iFs ); - + // ab client - iActiveBackupClient = conn::CActiveBackupClient::NewL( iBackupHandler ); + iActiveBackupClient = conn::CActiveBackupClient::NewL( iBackupHandler ); - if( !iActiveBackupClient->DoesPartialBURAffectMeL() ) + if( !iActiveBackupClient->DoesPartialBURAffectMeL() ) { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::NotMe\n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::NotMe\n\r")); delete iActiveBackupClient; - iActiveBackupClient = NULL; + iActiveBackupClient = NULL; delete iBackupHandler; - iBackupHandler = NULL; + iBackupHandler = NULL; } else { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm P \n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm P \n\r")); // Confirm that we have done everything if there even was anything to do iActiveBackupClient->ConfirmReadyForBURL( KErrNone ); - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm P Done \n\r")); - } + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Confirm P Done \n\r")); + } } - else + else { - //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Argument\n\r")); + //RFileLogger::Write(KLogDir, KLogName, EFileLoggingModeAppend, _L8("Handle::Argument\n\r")); // Unknown operation - User::Leave(KErrArgument); + User::Leave(KErrArgument); } - }; + }; // ----------------------------------------------------------------------------- // CDRMRightsServer::WatchedObjectChangedL @@ -1246,7 +1246,7 @@ { DRMLOG( _L( "CDRMRightsServer::WatchedObjectChangedL ->" ) ); DRMLOG( aObject ); - + if ( aObject.Left( KDirIdentifier().Length() ) == KDirIdentifier && !iDb->Updating() && iArmed ) { @@ -1259,7 +1259,7 @@ User::LeaveIfError( starter.Connect() ); starter.Reset( RStarterSession::EDRMReset ); starter.Close(); -#endif +#endif } else if ( aObject.Left( KProcIdentifier().Length() ) == KProcIdentifier && iArmed ) { @@ -1273,10 +1273,10 @@ starter.Close(); #endif } - + DRMLOG( _L( "CDRMRightsServer::WatchedObjectChangedL <-" ) ); } - + // ----------------------------------------------------------------------------- // CDRMRightsServer::HasActiveCountConstraint // Check ID for active count constraint @@ -1286,7 +1286,7 @@ { TInt i; TBool r = EFalse; - + for ( i = 0; r == EFalse && i < iActiveCountConstraints.Count(); i++ ) { if ( iActiveCountConstraints[i]->CompareF( aContentId ) == 0 ) @@ -1307,7 +1307,7 @@ TInt i; TInt r = KErrNotFound; HBufC8* id = NULL; - + for ( i = 0; r == KErrNotFound && i < iActiveCountConstraints.Count(); i++ ) { if ( iActiveCountConstraints[i]->CompareF( aContentId ) == 0 ) @@ -1317,7 +1317,7 @@ } if ( r != KErrNotFound ) { - id = iActiveCountConstraints[r]; + id = iActiveCountConstraints[r]; iActiveCountConstraints.Remove( r ); delete id; id = NULL; @@ -1373,7 +1373,7 @@ &rights); TDRMUniqueID id; TTime time; - + DRMLOG( _L( "CDRMRightsServer::ImportRightsObjectsL" ) ); DRMLOG( aImportDir ); __UHEAP_MARK; @@ -1402,7 +1402,7 @@ CleanupStack::PushL( listCleanup ); CDRMPermission& permission = rights[0]->GetPermission(); CDRMAsset& asset = rights[0]->GetAsset(); - + // Add RO only if no rights are available at all for this content TRAP( r, k = iDb->GetDecryptionKeyL( *asset.iUid ) ); if (k == NULL ) @@ -1423,14 +1423,14 @@ __UHEAP_MARKEND; DRMLOG( _L( "CDRMRightsServer::ImportRightsObjectsL done" ) ); } -#endif - +#endif + // ========================== OTHER EXPORTED FUNCTIONS ========================= -TInt E32Main() +TInt E32Main() { - return Startup(); + return Startup(); }