sl@0: /* sl@0: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include "f32agentdata.h" sl@0: #include "f32defaultattributes.h" sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: using namespace ContentAccess; sl@0: sl@0: CF32AgentData* CF32AgentData::NewL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode) sl@0: { sl@0: CF32AgentData* self = new (ELeave) CF32AgentData; sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aVirtualPath, aShareMode); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CF32AgentData* CF32AgentData::NewL(RFile& aFile, const TDesC& aUniqueId) sl@0: { sl@0: CF32AgentData* self = new (ELeave) CF32AgentData; sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aFile, aUniqueId); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: sl@0: CF32AgentData* CF32AgentData::NewL(const TDesC8& aHeaderData) sl@0: { sl@0: CF32AgentData* self = new (ELeave) CF32AgentData; sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aHeaderData); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: void CF32AgentData::ConstructL(const TDesC8& aHeaderData) sl@0: { sl@0: if(aHeaderData.Length() > 0) sl@0: iHeaderData = aHeaderData.AllocL(); sl@0: else sl@0: User::Leave(KErrMissingWmdrmHeaderData); sl@0: } sl@0: sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: sl@0: CF32AgentData::CF32AgentData() sl@0: { sl@0: } sl@0: sl@0: CF32AgentData::~CF32AgentData() sl@0: { sl@0: // Tidy up RFile and RFs sl@0: iFile.Close(); sl@0: if(iVirtualPath) // opened by name sl@0: { sl@0: iFs.Close(); sl@0: } sl@0: sl@0: delete iVirtualPath; sl@0: sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: delete iHeaderData; sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: } sl@0: sl@0: void CF32AgentData::ConstructL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode) sl@0: { sl@0: iVirtualPath = CVirtualPath::NewL(aVirtualPath); sl@0: sl@0: // Check that the client hasn't specified some incorrect UniqueId sl@0: User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aVirtualPath.UniqueId())); sl@0: sl@0: TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode); sl@0: User::LeaveIfError(iFs.Connect()); sl@0: sl@0: // Make the file session shareable sl@0: User::LeaveIfError(iFs.ShareAuto()); sl@0: sl@0: User::LeaveIfError(iFile.Open(iFs, aVirtualPath.URI(), mode)); sl@0: } sl@0: sl@0: void CF32AgentData::ConstructL(RFile& aFile, const TDesC& aUniqueId) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: TInt64 pos = 0; sl@0: #else sl@0: TInt pos = 0; sl@0: #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: sl@0: // Check that the client hasn't specified some incorrect UniqueId sl@0: User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId)); sl@0: sl@0: // When creating a CData from a file handle we must duplicate the file handle sl@0: // before doing anything sl@0: User::LeaveIfError(iFile.Duplicate(aFile)); sl@0: User::LeaveIfError(iFile.Seek(ESeekStart, pos)); // reset to start of file sl@0: } sl@0: sl@0: void CF32AgentData::DataSizeL(TInt &aSize) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: TInt64 size; sl@0: User::LeaveIfError(iFile.Size(size)); sl@0: aSize=size; sl@0: #else sl@0: User::LeaveIfError(iFile.Size(aSize)); sl@0: #endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: } sl@0: sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: void CF32AgentData::DataSize64L(TInt64 &aSize) sl@0: { sl@0: User::LeaveIfError(iFile.Size(aSize)); sl@0: } sl@0: #endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: sl@0: TInt CF32AgentData::EvaluateIntent(TIntent /*aIntent*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CF32AgentData::ExecuteIntent(TIntent /*aIntent*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CF32AgentData::Read(TDes8& aDes) sl@0: { sl@0: return iFile.Read(aDes); sl@0: } sl@0: sl@0: TInt CF32AgentData::Read(TDes8& aDes,TInt aLength) sl@0: { sl@0: return iFile.Read(aDes,aLength); sl@0: } sl@0: sl@0: void CF32AgentData::Read(TDes8& aDes,TRequestStatus& aStatus) sl@0: { sl@0: iFile.Read(aDes, aStatus); sl@0: } sl@0: sl@0: void CF32AgentData::Read(TDes8& aDes, sl@0: TInt aLength, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iFile.Read(aDes, aLength, aStatus); sl@0: } sl@0: sl@0: TInt CF32AgentData::Read(TInt aPos, TDes8& aDes, sl@0: TInt aLength, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iFile.Read(aPos, aDes, aLength, aStatus); sl@0: return KErrNone; sl@0: } sl@0: sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: TInt CF32AgentData::Read64(TInt64 aPos, TDes8& aDes, sl@0: TInt aLength, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: iFile.Read(aPos, aDes, aLength, aStatus); sl@0: return KErrNone; sl@0: } sl@0: #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: sl@0: void CF32AgentData::ReadCancel(TRequestStatus& aStatus) sl@0: { sl@0: iFile.ReadCancel(aStatus); sl@0: } sl@0: sl@0: TInt CF32AgentData::Seek(TSeek aMode, TInt& aPos) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: TInt64 pos = aPos; sl@0: TInt offset = iFile.Seek(aMode, pos); sl@0: aPos = I64INT(pos); sl@0: #else sl@0: TInt offset = iFile.Seek(aMode, aPos); sl@0: #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: return offset; sl@0: } sl@0: sl@0: #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: TInt CF32AgentData::Seek64(TSeek aMode, TInt64& aPos) sl@0: { sl@0: return iFile.Seek(aMode, aPos); sl@0: } sl@0: #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API sl@0: sl@0: sl@0: TInt CF32AgentData::SetProperty(TAgentProperty aProperty, TInt aValue) sl@0: { sl@0: sl@0: if(aProperty==EAgentPropertyAgentUI) sl@0: // should only pass type EAgentPropertyAgentUI sl@0: { sl@0: CF32AgentUi* ui = NULL; sl@0: sl@0: // get a pointer to the UI sl@0: TRAPD(err, ui = &AgentUiL()); sl@0: if(err) sl@0: { sl@0: return err; sl@0: } sl@0: return ui->SetProperty(aProperty, aValue); sl@0: } sl@0: else sl@0: { sl@0: return KErrCANotSupported; sl@0: } sl@0: } sl@0: sl@0: TInt CF32AgentData::GetAttribute(TInt aAttribute, TInt& aValue) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: if(iHeaderData) sl@0: { sl@0: return TF32DefaultAttributes::GetAttribute(*iHeaderData, aAttribute, aValue); sl@0: } sl@0: sl@0: else if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iVirtualPath->URI()); sl@0: } sl@0: sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile); sl@0: } sl@0: #else sl@0: if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile); sl@0: } sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: } sl@0: sl@0: TInt CF32AgentData::GetAttributeSet(RAttributeSet& aAttributeSet) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: if(iHeaderData) sl@0: { sl@0: return TF32DefaultAttributes::GetAttributeSet(*iHeaderData, aAttributeSet); sl@0: } sl@0: sl@0: else if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iVirtualPath->URI()); sl@0: } sl@0: sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile); sl@0: } sl@0: #else sl@0: if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile); sl@0: } sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: } sl@0: sl@0: TInt CF32AgentData::GetStringAttribute(TInt aAttribute, TDes& aValue) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: if(iHeaderData) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttribute(*iHeaderData, aAttribute, aValue); sl@0: } sl@0: sl@0: else if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile); sl@0: } sl@0: #else sl@0: if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile); sl@0: } sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: } sl@0: sl@0: TInt CF32AgentData::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet) sl@0: { sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: if(iHeaderData) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttributeSet(*iHeaderData, aStringAttributeSet); sl@0: } sl@0: sl@0: else if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile); sl@0: } sl@0: #else sl@0: if(iVirtualPath) sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iVirtualPath->URI()); sl@0: } sl@0: else sl@0: { sl@0: return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile); sl@0: } sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: } sl@0: sl@0: CF32AgentUi& CF32AgentData::AgentUiL() sl@0: { sl@0: if(!iAgentUi) sl@0: { sl@0: // load agent UI from f32AgentUi.dll sl@0: iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL(); sl@0: } sl@0: return *iAgentUi; sl@0: } sl@0: sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT sl@0: sl@0: TInt CF32AgentData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputDataPacket) sl@0: { sl@0: if(aEncryptedInputDataPacket.Length() <= 0) sl@0: { sl@0: return KErrInsufficientDataPacketLength; sl@0: } sl@0: sl@0: aDecryptedOutputDataPacket = aEncryptedInputDataPacket; sl@0: return KErrNone; sl@0: } sl@0: sl@0: void CF32AgentData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputDataPacket, TRequestStatus& aStatus) sl@0: { sl@0: TRequestStatus* status = &aStatus; sl@0: if(aEncryptedInputDataPacket.Length() <= 0) sl@0: { sl@0: User::RequestComplete(status, KErrInsufficientDataPacketLength); sl@0: } sl@0: sl@0: aDecryptedOutputDataPacket = aEncryptedInputDataPacket; sl@0: User::RequestComplete(status, KErrNone); sl@0: } sl@0: sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT