omadrm/drmplugins/drmrohandler/src/CRoHandler.cpp
branchRCL_3
changeset 27 1481bf457703
parent 26 1221b68b8a5f
equal deleted inserted replaced
26:1221b68b8a5f 27:1481bf457703
    28 #include <RoapEngBase.h>
    28 #include <RoapEngBase.h>
    29 #include <RoapObserver.h>
    29 #include <RoapObserver.h>
    30 #include <centralrepository.h>          // link against centralrepository.lib
    30 #include <centralrepository.h>          // link against centralrepository.lib
    31 #include <msvuids.h>
    31 #include <msvuids.h>
    32 #include <msvids.h>
    32 #include <msvids.h>
       
    33 #include <downloadmgrclient.h>
    33 
    34 
    34 #ifdef RD_MULTIPLE_DRIVE
    35 #ifdef RD_MULTIPLE_DRIVE
    35 #include <driveinfo.h>
    36 #include <driveinfo.h>
    36 #endif
    37 #endif
    37 
    38 
    38 #include <uri16.h>                          // TUriParser16
    39 #include <uri16.h>                          // TUriParser16
    39 #include <data_caging_path_literals.hrh>    // KDC_MTM_RESOURCE_DIR
    40 #include <data_caging_path_literals.hrh>    // KDC_MTM_RESOURCE_DIR
    40 #include <uriutils.h>                       // UriUtils and so on
    41 #include <uriutils.h>                       // UriUtils and so on
       
    42 #include <PushMtmUi.rsg>                    // for R_PUSHMISC_UNK_SENDER
    41 #include <RoHandler.rsg>                    // for R_QTN_DRM_MGR_INB_TITLE
    43 #include <RoHandler.rsg>                    // for R_QTN_DRM_MGR_INB_TITLE
    42 #include <sysutil.h>                        // Disk space checking
    44 #include <sysutil.h>                        // Disk space checking
       
    45 #include <featmgr.h>                        // Feature Manager
    43 
    46 
    44 #include "CRoHandler.h"
    47 #include "CRoHandler.h"
    45 #include "RoMtmCli.h"                       // for CRightsObjectMtmClient
    48 #include "RoMtmCli.h"                       // for CRightsObjectMtmClient
    46 #include "RoapSyncWrapper.h"
    49 #include "RoapSyncWrapper.h"
    47 
    50 
    48 #include "RoHandlerStringResourceReader.h"
    51 #include "StringResourceReader.h"
    49 #include "rohandlerdmgrwrapper.h"
    52 #include "rohandlerdmgrwrapper.h"
    50 #include "rohandlerinternalcrkeys.h"
    53 #include "rohandlerinternalcrkeys.h"
    51 
    54 
    52 #ifdef _DEBUG
    55 #ifdef _DEBUG
    53 #define DRMDEBUGLIT( a, b ) _LIT( a, b )
    56 #define DRMDEBUGLIT( a, b ) _LIT( a, b )
    96 #else
    99 #else
    97 _LIT( KDriveZ, "z:" );
   100 _LIT( KDriveZ, "z:" );
    98 _LIT( KRoHandlerTriggerFilePath, "c:\\system\\data\\" );
   101 _LIT( KRoHandlerTriggerFilePath, "c:\\system\\data\\" );
    99 #endif
   102 #endif
   100 
   103 
       
   104 _LIT( KPushMtmRes, "PushMtmUi.rsc" );
   101 _LIT( KRoHandlerResourceFile, "RoHandler.rsc" );
   105 _LIT( KRoHandlerResourceFile, "RoHandler.rsc" );
   102 
   106 
   103 _LIT8( KRoapTriggerElement, "roapTrigger" );
   107 _LIT8( KRoapTriggerElement, "roapTrigger" );
   104 _LIT8( KWbxmlRoapTriggerElement, "\x03\x13j" );
   108 _LIT8( KWbxmlRoapTriggerElement, "\x03\x13j" );
   105 _LIT8( KRoapTriggerRoAcquisition, "roAcquisition" );
   109 _LIT8( KRoapTriggerRoAcquisition, "roAcquisition" );
   109 _LIT( KFalse, "false" );
   113 _LIT( KFalse, "false" );
   110 _LIT( KZero, "0" );
   114 _LIT( KZero, "0" );
   111 
   115 
   112 _LIT( KRoAcquisitionPrefix, "ROA:" );
   116 _LIT( KRoAcquisitionPrefix, "ROA:" );
   113 _LIT( KTriggerPrefix, "TRI:" );
   117 _LIT( KTriggerPrefix, "TRI:" );
   114 
       
   115 _LIT( KEmpty, " " );
       
   116 
   118 
   117 // MODULE DATA STRUCTURES
   119 // MODULE DATA STRUCTURES
   118 
   120 
   119 // Helper class for deleting file with given filename on cleanupstack
   121 // Helper class for deleting file with given filename on cleanupstack
   120 // Note does not own its members
   122 // Note does not own its members
   395         (
   397         (
   396         //None.
   398         //None.
   397         )
   399         )
   398     : CPushHandlerBase(),
   400     : CPushHandlerBase(),
   399     iFirstTime( ETrue ), iPushMsg( NULL ), iMsvId( NULL ),
   401     iFirstTime( ETrue ), iPushMsg( NULL ), iMsvId( NULL ),
   400     iPutRightsToInbox( ETrue )
   402     iPutRightsToInbox( ETrue ), iFeatureManagerFound( EFalse )
   401     {
   403     {
   402     }
   404     }
   403 
   405 
   404 /*
   406 /*
   405 -----------------------------------------------------------------------------
   407 -----------------------------------------------------------------------------
   425     TRAPD( r, WriteL( _L8( "ConstructL" ) ) );
   427     TRAPD( r, WriteL( _L8( "ConstructL" ) ) );
   426 #endif
   428 #endif
   427 
   429 
   428     CRepository* repository( NULL );
   430     CRepository* repository( NULL );
   429     TInt err( KErrNone );
   431     TInt err( KErrNone );
   430 
   432     TInt ret( KErrNone );
       
   433 
       
   434     TRAP( ret, FeatureManager::InitializeLibL() );
       
   435     if ( !ret )
       
   436         {
       
   437         iFeatureManagerFound = ETrue;
       
   438         }   
       
   439     
   431     User::LeaveIfError( iFs.Connect() );
   440     User::LeaveIfError( iFs.Connect() );
   432 
   441 
   433     // create drm
   442     // create drm
   434     iMessageParser = CDRMMessageParser::NewL();
   443     iMessageParser = CDRMMessageParser::NewL();
   435 
   444 
   507 
   516 
   508     iMsvId = NULL;
   517     iMsvId = NULL;
   509 
   518 
   510     // session must be deleted last (and constructed first)
   519     // session must be deleted last (and constructed first)
   511     delete iSession;
   520     delete iSession;
   512 
   521     
       
   522     if ( iFeatureManagerFound )
       
   523         {
       
   524         FeatureManager::UnInitializeLib();
       
   525         }
       
   526         
   513 #ifdef _DRM_TESTING
   527 #ifdef _DRM_TESTING
   514     TRAP( r, WriteL( _L8( "~CRoHandler-End" ) ) );
   528     TRAP( r, WriteL( _L8( "~CRoHandler-End" ) ) );
   515 #endif
   529 #endif
   516     }
   530     }
   517 
   531 
   654     iMsgType = CheckMessageTypeL();
   668     iMsgType = CheckMessageTypeL();
   655     switch( iMsgType )
   669     switch( iMsgType )
   656         {
   670         {
   657         case EOma1Ro:
   671         case EOma1Ro:
   658             {
   672             {
   659             HandleRightsMessageL();
   673             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
       
   674                     KFeatureIdFfOmadrm1FullSupport ) )
       
   675                 {
       
   676                 HandleRightsMessageL();
       
   677                 }
   660             break;
   678             break;
   661             }
   679             }
   662 #ifdef __DRM_OMA2
   680 #ifdef __DRM_OMA2
   663         case EOma2RoapTrigger:
   681         case EOma2RoapTrigger:
   664         case EOma2RoapTriggerRoAcquisition:
   682         case EOma2RoapTriggerRoAcquisition:
   665             {
   683             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
   666             HandleRoapTriggerL();
   684                     KFeatureIdFfOmadrm2Support ) )
       
   685                 {
       
   686                 HandleRoapTriggerL();
       
   687                 }
       
   688             break;    
       
   689         case EOma2RoapTriggerMetering:
       
   690             if ( iFeatureManagerFound && FeatureManager::FeatureSupported( 
       
   691                     KFeatureIdFfOmadrm2Support ) )
       
   692                 {
       
   693                 HandleMeteringTriggerSilentlyL();
       
   694                 }
   667             break;
   695             break;
   668             }
   696         case EOma2RoapPdu:
   669         case EOma2RoapTriggerMetering:
   697             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
   670             {
   698                     KFeatureIdFfOmadrm2Support ) )
   671             HandleMeteringTriggerSilentlyL();
   699                 {
       
   700                 HandleRoapPduL();
       
   701                 }
   672             break;
   702             break;
   673             }
       
   674         case EOma2RoapPdu:
       
   675             {
       
   676             HandleRoapPduL();
       
   677             break;
       
   678             }
       
   679 #endif
   703 #endif
   680         default:
   704         default:
   681             {
   705             {
   682             User::Leave( KErrNotSupported );
   706             User::Leave( KErrNotSupported );
   683             }
   707             }
   777         ptrToMz.Append( KMarker );
   801         ptrToMz.Append( KMarker );
   778         ptrToMz.Append( ptr ); // add localID
   802         ptrToMz.Append( ptr ); // add localID
   779         ptrToMz.Append( KMarker );
   803         ptrToMz.Append( KMarker );
   780         ptrToMz.Append( uri16 ); //add uri16
   804         ptrToMz.Append( uri16 ); //add uri16
   781         ptrToMz.Append( KMarker );
   805         ptrToMz.Append( KMarker );
   782 
   806         
   783         CleanupStack::PopAndDestroy( number );
   807         CleanupStack::PopAndDestroy( number );
   784         CleanupStack::PopAndDestroy( buffer );
   808         CleanupStack::PopAndDestroy( buffer );
   785         CleanupStack::PushL( messageContent );
   809         CleanupStack::PushL( messageContent );
   786 
   810 
   787         // create empty sms
   811         // create empty sms
  1184     User::LeaveIfError( fs.Connect() );
  1208     User::LeaveIfError( fs.Connect() );
  1185 #ifdef _DRM_TESTING
  1209 #ifdef _DRM_TESTING
  1186     TRAP( r, WriteL( _L8( "ReadFromResourceLC-fs.Connect" ) ) );
  1210     TRAP( r, WriteL( _L8( "ReadFromResourceLC-fs.Connect" ) ) );
  1187 #endif
  1211 #endif
  1188     CleanupClosePushL( fs );
  1212     CleanupClosePushL( fs );
  1189     CRoHandlerStringResourceReader* reader(
  1213     CStringResourceReader* reader(
  1190         new ( ELeave ) CRoHandlerStringResourceReader( fs, aFile ) );
  1214         new ( ELeave ) CStringResourceReader( fs, aFile ) );
  1191 #ifdef _DRM_TESTING
  1215 #ifdef _DRM_TESTING
  1192     TRAP( r, WriteL( _L8( "ReadFromResourceLC-CRoHandlerStringResourceReader" ) ) );
  1216     TRAP( r, WriteL( _L8( "ReadFromResourceLC-CStringResourceReader" ) ) );
  1193 #endif
  1217 #endif
  1194     CleanupStack::PushL( reader );
  1218     CleanupStack::PushL( reader );
  1195     aBuf = reader->AllocReadResourceL( aIndex );
  1219     aBuf = reader->AllocReadResourceL( aIndex );
  1196 #ifdef _DRM_TESTING
  1220 #ifdef _DRM_TESTING
  1197     TRAP( r, WriteL( _L8( "ReadFromResourceLC-AllocReadResourceL" ) ) );
  1221     TRAP( r, WriteL( _L8( "ReadFromResourceLC-AllocReadResourceL" ) ) );
  1216     HBufC* result( NULL );
  1240     HBufC* result( NULL );
  1217 
  1241 
  1218     // First line in Inbox: TMsvEntry::iDetails.
  1242     // First line in Inbox: TMsvEntry::iDetails.
  1219     if ( !flag || srvAddress.Length() == 0 )
  1243     if ( !flag || srvAddress.Length() == 0 )
  1220         {
  1244         {
  1221         result = KEmpty().AllocL();
  1245         // Read from resource.
       
  1246 
       
  1247 #ifndef RD_MULTIPLE_DRIVE
       
  1248 
       
  1249         TFileName resourceFile( KDriveZ );
       
  1250 
       
  1251 #else //RD_MULTIPLE_DRIVE
       
  1252 
       
  1253         _LIT( KDriveRoot, "%c:" );
       
  1254         TInt driveNumber( -1 );
       
  1255         TChar driveLetter;
       
  1256         DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRom, driveNumber );
       
  1257         iFs.DriveToChar( driveNumber, driveLetter );
       
  1258 
       
  1259         TFileName resourceFile;
       
  1260         resourceFile.Format( KDriveRoot, (TUint )driveLetter );
       
  1261 
       
  1262 #endif
       
  1263 
       
  1264         resourceFile.Append( KDC_MTM_RESOURCE_DIR );
       
  1265         resourceFile.Append( KPushMtmRes );
       
  1266         ReadFromResourceLC( resourceFile, R_PUSHMISC_UNK_SENDER, result );
  1222         }
  1267         }
  1223     else
  1268     else
  1224         {
  1269         {
  1225         // Convert the "From" information to the format required by the UI
  1270         // Convert the "From" information to the format required by the UI
  1226         // spec and then decode it.
  1271         // spec and then decode it.
  1376         }
  1421         }
  1377 
  1422 
  1378     switch( iMsgType )
  1423     switch( iMsgType )
  1379         {
  1424         {
  1380         case EOma1Ro:
  1425         case EOma1Ro:
  1381             {
  1426             {            
  1382             HandleRightsMessageL();
  1427             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
       
  1428                     KFeatureIdFfOmadrm1FullSupport ) )
       
  1429                 {
       
  1430                 HandleRightsMessageL();
       
  1431                 }
  1383             break;
  1432             break;
  1384             }
  1433             }
  1385 #ifdef __DRM_OMA2
  1434 #ifdef __DRM_OMA2
  1386         case EOma2RoapTrigger:
  1435         case EOma2RoapTrigger:
  1387         case EOma2RoapTriggerRoAcquisition:
  1436         case EOma2RoapTriggerRoAcquisition:
  1388             {
  1437             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
  1389             HandleRoapTriggerL();
  1438                     KFeatureIdFfOmadrm2Support ) )
       
  1439                 {
       
  1440                 HandleRoapTriggerL();
       
  1441                 }
  1390             break;
  1442             break;
  1391             }
       
  1392         case EOma2RoapPdu:
  1443         case EOma2RoapPdu:
  1393             {
  1444             if ( iFeatureManagerFound && FeatureManager::FeatureSupported(
  1394             HandleRoapPduL();
  1445                     KFeatureIdFfOmadrm2Support ) )
       
  1446                 {
       
  1447                 HandleRoapPduL();
       
  1448                 }
  1395             break;
  1449             break;
  1396             }
       
  1397 #endif
  1450 #endif
  1398         default:
  1451         default:
  1399             {
  1452             {
  1400             User::Leave( KErrNotSupported );
  1453             User::Leave( KErrNotSupported );
  1401             }
  1454             }