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