omadrm/drmplugins/drmrohandler/src/CRoHandler.cpp
branchRCL_3
changeset 72 1481bf457703
parent 71 1221b68b8a5f
--- a/omadrm/drmplugins/drmrohandler/src/CRoHandler.cpp	Tue Aug 31 15:29:38 2010 +0300
+++ b/omadrm/drmplugins/drmrohandler/src/CRoHandler.cpp	Wed Sep 01 12:21:16 2010 +0100
@@ -30,6 +30,7 @@
 #include <centralrepository.h>          // link against centralrepository.lib
 #include <msvuids.h>
 #include <msvids.h>
+#include <downloadmgrclient.h>
 
 #ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
@@ -38,14 +39,16 @@
 #include <uri16.h>                          // TUriParser16
 #include <data_caging_path_literals.hrh>    // KDC_MTM_RESOURCE_DIR
 #include <uriutils.h>                       // UriUtils and so on
+#include <PushMtmUi.rsg>                    // for R_PUSHMISC_UNK_SENDER
 #include <RoHandler.rsg>                    // for R_QTN_DRM_MGR_INB_TITLE
 #include <sysutil.h>                        // Disk space checking
+#include <featmgr.h>                        // Feature Manager
 
 #include "CRoHandler.h"
 #include "RoMtmCli.h"                       // for CRightsObjectMtmClient
 #include "RoapSyncWrapper.h"
 
-#include "RoHandlerStringResourceReader.h"
+#include "StringResourceReader.h"
 #include "rohandlerdmgrwrapper.h"
 #include "rohandlerinternalcrkeys.h"
 
@@ -98,6 +101,7 @@
 _LIT( KRoHandlerTriggerFilePath, "c:\\system\\data\\" );
 #endif
 
+_LIT( KPushMtmRes, "PushMtmUi.rsc" );
 _LIT( KRoHandlerResourceFile, "RoHandler.rsc" );
 
 _LIT8( KRoapTriggerElement, "roapTrigger" );
@@ -112,8 +116,6 @@
 _LIT( KRoAcquisitionPrefix, "ROA:" );
 _LIT( KTriggerPrefix, "TRI:" );
 
-_LIT( KEmpty, " " );
-
 // MODULE DATA STRUCTURES
 
 // Helper class for deleting file with given filename on cleanupstack
@@ -397,7 +399,7 @@
         )
     : CPushHandlerBase(),
     iFirstTime( ETrue ), iPushMsg( NULL ), iMsvId( NULL ),
-    iPutRightsToInbox( ETrue )
+    iPutRightsToInbox( ETrue ), iFeatureManagerFound( EFalse )
     {
     }
 
@@ -427,7 +429,14 @@
 
     CRepository* repository( NULL );
     TInt err( KErrNone );
+    TInt ret( KErrNone );
 
+    TRAP( ret, FeatureManager::InitializeLibL() );
+    if ( !ret )
+        {
+        iFeatureManagerFound = ETrue;
+        }   
+    
     User::LeaveIfError( iFs.Connect() );
 
     // create drm
@@ -509,7 +518,12 @@
 
     // session must be deleted last (and constructed first)
     delete iSession;
-
+    
+    if ( iFeatureManagerFound )
+        {
+        FeatureManager::UnInitializeLib();
+        }
+        
 #ifdef _DRM_TESTING
     TRAP( r, WriteL( _L8( "~CRoHandler-End" ) ) );
 #endif
@@ -656,26 +670,36 @@
         {
         case EOma1Ro:
             {
-            HandleRightsMessageL();
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm1FullSupport ) )
+                {
+                HandleRightsMessageL();
+                }
             break;
             }
 #ifdef __DRM_OMA2
         case EOma2RoapTrigger:
         case EOma2RoapTriggerRoAcquisition:
-            {
-            HandleRoapTriggerL();
-            break;
-            }
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm2Support ) )
+                {
+                HandleRoapTriggerL();
+                }
+            break;    
         case EOma2RoapTriggerMetering:
-            {
-            HandleMeteringTriggerSilentlyL();
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported( 
+                    KFeatureIdFfOmadrm2Support ) )
+                {
+                HandleMeteringTriggerSilentlyL();
+                }
             break;
-            }
         case EOma2RoapPdu:
-            {
-            HandleRoapPduL();
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm2Support ) )
+                {
+                HandleRoapPduL();
+                }
             break;
-            }
 #endif
         default:
             {
@@ -779,7 +803,7 @@
         ptrToMz.Append( KMarker );
         ptrToMz.Append( uri16 ); //add uri16
         ptrToMz.Append( KMarker );
-
+        
         CleanupStack::PopAndDestroy( number );
         CleanupStack::PopAndDestroy( buffer );
         CleanupStack::PushL( messageContent );
@@ -1186,10 +1210,10 @@
     TRAP( r, WriteL( _L8( "ReadFromResourceLC-fs.Connect" ) ) );
 #endif
     CleanupClosePushL( fs );
-    CRoHandlerStringResourceReader* reader(
-        new ( ELeave ) CRoHandlerStringResourceReader( fs, aFile ) );
+    CStringResourceReader* reader(
+        new ( ELeave ) CStringResourceReader( fs, aFile ) );
 #ifdef _DRM_TESTING
-    TRAP( r, WriteL( _L8( "ReadFromResourceLC-CRoHandlerStringResourceReader" ) ) );
+    TRAP( r, WriteL( _L8( "ReadFromResourceLC-CStringResourceReader" ) ) );
 #endif
     CleanupStack::PushL( reader );
     aBuf = reader->AllocReadResourceL( aIndex );
@@ -1218,7 +1242,28 @@
     // First line in Inbox: TMsvEntry::iDetails.
     if ( !flag || srvAddress.Length() == 0 )
         {
-        result = KEmpty().AllocL();
+        // Read from resource.
+
+#ifndef RD_MULTIPLE_DRIVE
+
+        TFileName resourceFile( KDriveZ );
+
+#else //RD_MULTIPLE_DRIVE
+
+        _LIT( KDriveRoot, "%c:" );
+        TInt driveNumber( -1 );
+        TChar driveLetter;
+        DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRom, driveNumber );
+        iFs.DriveToChar( driveNumber, driveLetter );
+
+        TFileName resourceFile;
+        resourceFile.Format( KDriveRoot, (TUint )driveLetter );
+
+#endif
+
+        resourceFile.Append( KDC_MTM_RESOURCE_DIR );
+        resourceFile.Append( KPushMtmRes );
+        ReadFromResourceLC( resourceFile, R_PUSHMISC_UNK_SENDER, result );
         }
     else
         {
@@ -1378,22 +1423,30 @@
     switch( iMsgType )
         {
         case EOma1Ro:
-            {
-            HandleRightsMessageL();
+            {            
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm1FullSupport ) )
+                {
+                HandleRightsMessageL();
+                }
             break;
             }
 #ifdef __DRM_OMA2
         case EOma2RoapTrigger:
         case EOma2RoapTriggerRoAcquisition:
-            {
-            HandleRoapTriggerL();
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm2Support ) )
+                {
+                HandleRoapTriggerL();
+                }
             break;
-            }
         case EOma2RoapPdu:
-            {
-            HandleRoapPduL();
+            if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
+                    KFeatureIdFfOmadrm2Support ) )
+                {
+                HandleRoapPduL();
+                }
             break;
-            }
 #endif
         default:
             {