videoplayback/videohelix/src/mpxvideodrmhelper.cpp
changeset 0 96612d01cf9f
child 6 7d91903f795f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videohelix/src/mpxvideodrmhelper.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   This class handles the DRM functions for the playback plugin
+*
+*/
+
+// Version : %version: 7 %
+
+
+#include <caf/data.h>
+#include <caf/caftypes.h>
+#include <caf/content.h>
+#include <Oma2Agent.h>
+
+#include "mpxvideodrmhelper.h"
+#include "mpxvideo_debug.h"
+
+CMpxVideoDrmHelper::CMpxVideoDrmHelper()
+{
+}
+
+CMpxVideoDrmHelper::~CMpxVideoDrmHelper()
+{
+    if ( iDrmUtility )
+    {
+        delete iDrmUtility;
+        iDrmUtility = NULL;
+    }
+}
+
+
+CMpxVideoDrmHelper* CMpxVideoDrmHelper::NewL()
+{
+    CMpxVideoDrmHelper* self = new( ELeave ) CMpxVideoDrmHelper();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+void CMpxVideoDrmHelper::ConstructL()
+{
+    iDrmUtility = DRM::CDrmUtility::NewL();
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMpxVideoDrmHelper::IsProtected()
+//  ------------------------------------------------------------------------------------------------
+//
+TBool CMpxVideoDrmHelper::IsProtected( RFile& aFile )
+{
+    TBool drmProtected = EFalse;
+
+    if ( aFile.SubSessionHandle() )
+    {
+        MPX_TRAPD( err, drmProtected = iDrmUtility->IsProtectedL( aFile ) );
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::IsProtected(%d)"), drmProtected);
+
+    return drmProtected;
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMpxVideoDrmHelper::GetDrmRightsStatus()
+//  ------------------------------------------------------------------------------------------------
+//
+TInt CMpxVideoDrmHelper::GetDrmRightsStatus( RFile& aFile )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoDrmHelper::GetDrmRightsStatus()"));
+
+    TInt drmError = KErrNone;
+
+    if ( IsProtected( aFile ) )
+    {
+        ContentAccess::CData* data = NULL;
+
+        //
+        //  Check if rights exist for clip
+        //
+        MPX_TRAP( drmError,
+                  data = ContentAccess::CData::NewL( aFile,
+                                                     ContentAccess::KDefaultContentObject,
+                                                     ContentAccess::EPlay ) );
+
+        if ( drmError == KErrNone )
+        {
+            drmError = data->EvaluateIntent( ContentAccess::EPlay );
+
+            delete data;
+        }
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::GetDrmRightsStatus() drmError = %d"), drmError);
+
+    return drmError;
+}
+
+TBool CMpxVideoDrmHelper::IsTvOutAllowedL( RFile& aFile )
+{
+    TBool tvOutAllowed = ETrue;
+
+    if ( IsProtected( aFile ) )
+    {
+        ContentAccess::CContent* content = ContentAccess::CContent::NewLC( aFile );
+
+        ContentAccess::CData* data = content->OpenContentL( ContentAccess::EPeek );
+
+        TInt fileType;
+
+        TInt error = data->GetAttribute( ContentAccess::EFileType, fileType );
+
+        if ( error == KErrNone )
+        {
+            //
+            //  TV-out is not allowed for DRM content other than OMA1 DRM
+            //
+            if ( fileType != ContentAccess::EOma1Dcf )
+            {
+                tvOutAllowed = EFalse;
+            }
+        }
+
+        delete data;
+
+        CleanupStack::PopAndDestroy( content );
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::IsTvOutAllowedL(%d)"), tvOutAllowed);
+
+    return tvOutAllowed;
+}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+//  ------------------------------------------------------------------------------------------------
+//    CMpxVideoDrmHelper::IsProtected64()
+//  ------------------------------------------------------------------------------------------------
+//
+TBool CMpxVideoDrmHelper::IsProtected64( RFile64& aFile )
+{
+    TBool drmProtected = EFalse;
+
+    if ( aFile.SubSessionHandle() )
+    {
+        MPX_TRAPD( err, drmProtected = iDrmUtility->IsProtectedL( aFile ) );
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::IsProtected64(%d)"), drmProtected);
+
+    return drmProtected;
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMpxVideoDrmHelper::GetDrmRightsStatus64()
+//  ------------------------------------------------------------------------------------------------
+//
+TInt CMpxVideoDrmHelper::GetDrmRightsStatus64( RFile64& aFile )
+{
+    MPX_ENTER_EXIT(_L("CMpxVideoDrmHelper::GetDrmRightsStatus64()"));
+
+    TInt drmError = KErrNone;
+
+    if ( IsProtected64( aFile ) )
+    {
+        ContentAccess::CData* data = NULL;
+
+        //
+        //  Check if rights exist for clip
+        //
+        MPX_TRAP( drmError,
+                  data = ContentAccess::CData::NewL( aFile,
+                                                     ContentAccess::KDefaultContentObject,
+                                                     ContentAccess::EPlay ) );
+
+        if ( drmError == KErrNone )
+        {
+            drmError = data->EvaluateIntent( ContentAccess::EPlay );
+
+            delete data;
+        }
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::GetDrmRightsStatus64() drmError = %d"), drmError);
+
+    return drmError;
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMpxVideoDrmHelper::IsTvOutAllowed64L()
+//  ------------------------------------------------------------------------------------------------
+//
+TBool CMpxVideoDrmHelper::IsTvOutAllowed64L( RFile64& aFile )
+{
+    TBool tvOutAllowed = ETrue;
+
+    if ( IsProtected64( aFile ) )
+    {
+        ContentAccess::CContent* content = ContentAccess::CContent::NewLC( aFile );
+
+        ContentAccess::CData* data = content->OpenContentL( ContentAccess::EPeek );
+
+        TInt fileType;
+
+        TInt error = data->GetAttribute( ContentAccess::EFileType, fileType );
+
+        if ( error == KErrNone )
+        {
+            //
+            //  TV-out is not allowed for DRM content other than OMA1 DRM
+            //
+            if ( fileType != ContentAccess::EOma1Dcf )
+            {
+                tvOutAllowed = EFalse;
+            }
+        }
+
+        delete data;
+
+        CleanupStack::PopAndDestroy( content );
+    }
+
+    MPX_DEBUG(_L("CMpxVideoDrmHelper::IsTvOutAllowed64L(%d)"), tvOutAllowed);
+
+    return tvOutAllowed;
+}
+
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+//  EOF