javaruntimes/midp/runtime/src.s60/platformimpl.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaruntimes/midp/runtime/src.s60/platformimpl.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2009 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:  Platform dependent implementations.
+ *
+*/
+
+
+#include <DRMHelper.h>
+#include <drmrightsinfo.h>
+
+#include "logger.h"
+#include "platformimpl.h"
+#include "javacommonutils.h"
+
+void consumeRigthsImplL(const std::wstring& uri, std::string& status,
+                        const CDRMHelper::TDRMHelperConsumeAction action,
+                        int& handle)
+{
+    JELOG2(EJavaRuntime);
+    LOG1(EJavaRuntime, EInfo, "consumeRigthsImplL. URI: %S", uri.c_str());
+
+
+    // Convert wstring to 16 bit descriptor.
+    TPtrC ptr((const TUint16 *)uri.c_str(), uri.length());
+
+    CDRMHelper* drmHelper = reinterpret_cast<CDRMHelper*>(handle);
+
+    // In case of start we need to create instance of CDRMHelper.
+    if (action == CDRMHelper::EStart)
+    {
+        drmHelper = CDRMHelper::NewLC();
+        handle = reinterpret_cast<int>(drmHelper);
+    }
+
+    int err = -1;
+    if (drmHelper)
+    {
+        err = drmHelper->ConsumeFile2(ptr, ContentAccess::EExecute, action);
+    }
+    if (action == CDRMHelper::EFinish)
+    {
+        delete drmHelper;
+        drmHelper = NULL;
+    }
+    else
+    {
+        CleanupStack::Pop(drmHelper);
+    }
+    if (err != KErrNone)
+    {
+        delete drmHelper;
+        handle = 0;
+    }
+
+    switch (err)
+    {
+    case KErrNone:
+        status.clear();
+        break;
+
+    case KErrCANoPermission:
+        status = "Rights exist but the execute intent is not permitted";
+        break;
+
+    case KErrCAPendingRights:
+        status = "Rights have not yet arrived but are expected soon";
+        break;
+
+    case KErrPermissionDenied:
+        status = "Client is not allowed to use this content object";
+        break;
+
+    default:
+        ELOG1(EJavaRuntime, "CDRMHelper::ConsumeFile2 failed: %d", err);
+        User::Leave(err);
+        break;
+
+    }
+}
+
+bool checkRigthsL(const std::wstring& drmContentId, std::string& status)
+{
+    JELOG2(EJavaRuntime);
+    LOG1(EJavaRuntime, EInfo, "checkRigthsL. drmContentId: %S",
+         drmContentId.c_str());
+
+    // Convert wstring to 16 bit descriptor.
+    TPtrC ptr((const TUint16 *)drmContentId.c_str(), drmContentId.length());
+
+    DRM::CDrmRightsInfo* ri(DRM::CDrmRightsInfo::NewLC());
+    DRM::TDrmRightsInfo rightsInfo(DRM::EURightsInfoValid);
+
+    // Check if there are still valid rigths.
+    TRAPD(err, ri->CheckRightsL(ptr,
+                                ContentAccess::EExecute,
+                                rightsInfo)) ;
+
+    CleanupStack::PopAndDestroy(ri);
+    // If leave happened consider it fatal.
+    if (err != KErrNone)
+    {
+        ELOG1(EJavaRuntime, "CheckRightsL failed: %d", err);
+        User::Leave(err);
+    }
+
+    LOG1(EJavaRuntime, EInfo, "checkRigthsL, rightsInfo: %d", rightsInfo);
+
+
+    if (rightsInfo == DRM::EURightsInfoValid)
+    {
+        return true;
+    }
+
+    WLOG1(EJavaRuntime, "No more rights to start MIDlet: rightsInfo = %d",
+          rightsInfo);
+    status = "No more rights to start MIDlet";
+    return false;
+}
+
+void consumeRigthsImpl(const std::wstring& uri,
+                       const std::wstring& drmContentId,
+                       std::string& status,
+                       bool startPhase,
+                       int& handle)
+{
+    JELOG2(EJavaRuntime);
+
+    bool rightsOk = true;
+
+    int err = KErrNone;
+    // Need to check only when starting the MIDlet.
+    if (startPhase)
+    {
+        // Check if there are still valid rights.
+        TRAP(err, rightsOk = checkRigthsL(drmContentId, status););
+    }
+
+    if (err == KErrNone && rightsOk)
+    {
+        // Rigths where still valid, so lets consume rights.
+        const CDRMHelper::TDRMHelperConsumeAction action =
+            startPhase ? CDRMHelper::EStart : CDRMHelper::EFinish;
+        TRAP(err, consumeRigthsImplL(uri, status, action, handle););
+    }
+    if (err != KErrNone)
+    {
+        ELOG1(EJavaRuntime, "ERROR!!! consumeRigthsImpl() %d", err);
+        status = "General OS error code: ";
+        status += java::util::JavaCommonUtils::intToString(err);
+    }
+}