diff -r f5050f1da672 -r 04becd199f91 javaruntimes/midp/runtime/src.s60/platformimpl.cpp --- /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 +#include + +#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(handle); + + // In case of start we need to create instance of CDRMHelper. + if (action == CDRMHelper::EStart) + { + drmHelper = CDRMHelper::NewLC(); + handle = reinterpret_cast(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); + } +}