os/security/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentdata.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of the License "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include <caf/caf.h>
sl@0
    20
#include "f32agentdata.h"
sl@0
    21
#include "f32defaultattributes.h"
sl@0
    22
#include <caf/virtualpath.h>
sl@0
    23
#include <caf/f32agentui.h>
sl@0
    24
#include <e32def.h>
sl@0
    25
sl@0
    26
using namespace ContentAccess;
sl@0
    27
sl@0
    28
CF32AgentData* CF32AgentData::NewL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
sl@0
    29
	{
sl@0
    30
	CF32AgentData* self = new (ELeave) CF32AgentData;
sl@0
    31
	CleanupStack::PushL(self);
sl@0
    32
	self->ConstructL(aVirtualPath, aShareMode);
sl@0
    33
	CleanupStack::Pop(self);
sl@0
    34
	return self;
sl@0
    35
	}
sl@0
    36
sl@0
    37
CF32AgentData* CF32AgentData::NewL(RFile& aFile, const TDesC& aUniqueId)
sl@0
    38
	{
sl@0
    39
	CF32AgentData* self = new (ELeave) CF32AgentData;
sl@0
    40
	CleanupStack::PushL(self);
sl@0
    41
	self->ConstructL(aFile, aUniqueId);
sl@0
    42
	CleanupStack::Pop(self);
sl@0
    43
	return self;
sl@0
    44
	}
sl@0
    45
sl@0
    46
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
    47
sl@0
    48
CF32AgentData* CF32AgentData::NewL(const TDesC8& aHeaderData)
sl@0
    49
	{
sl@0
    50
	CF32AgentData* self = new (ELeave) CF32AgentData;
sl@0
    51
	CleanupStack::PushL(self);
sl@0
    52
	self->ConstructL(aHeaderData);
sl@0
    53
	CleanupStack::Pop(self);
sl@0
    54
	return self;
sl@0
    55
	}
sl@0
    56
	
sl@0
    57
void CF32AgentData::ConstructL(const TDesC8& aHeaderData)
sl@0
    58
	{
sl@0
    59
	if(aHeaderData.Length() > 0)
sl@0
    60
		iHeaderData = aHeaderData.AllocL();
sl@0
    61
	else
sl@0
    62
		User::Leave(KErrMissingWmdrmHeaderData);
sl@0
    63
	}
sl@0
    64
	
sl@0
    65
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
    66
sl@0
    67
CF32AgentData::CF32AgentData()
sl@0
    68
	{
sl@0
    69
	}
sl@0
    70
sl@0
    71
CF32AgentData::~CF32AgentData()
sl@0
    72
	{
sl@0
    73
	// Tidy up RFile and RFs
sl@0
    74
	iFile.Close();
sl@0
    75
	if(iVirtualPath) // opened by name
sl@0
    76
		{
sl@0
    77
		iFs.Close();
sl@0
    78
		}
sl@0
    79
sl@0
    80
	delete iVirtualPath;
sl@0
    81
	
sl@0
    82
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
    83
	delete iHeaderData;			
sl@0
    84
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
    85
	}
sl@0
    86
  
sl@0
    87
void CF32AgentData::ConstructL(const TVirtualPathPtr& aVirtualPath, TContentShareMode aShareMode)
sl@0
    88
	{
sl@0
    89
	iVirtualPath = CVirtualPath::NewL(aVirtualPath);
sl@0
    90
	
sl@0
    91
	// Check that the client hasn't specified some incorrect UniqueId
sl@0
    92
	User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aVirtualPath.UniqueId()));
sl@0
    93
sl@0
    94
	TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode);
sl@0
    95
	User::LeaveIfError(iFs.Connect());
sl@0
    96
sl@0
    97
	// Make the file session shareable
sl@0
    98
	User::LeaveIfError(iFs.ShareAuto());
sl@0
    99
sl@0
   100
	User::LeaveIfError(iFile.Open(iFs, aVirtualPath.URI(), mode));
sl@0
   101
	}
sl@0
   102
sl@0
   103
void CF32AgentData::ConstructL(RFile& aFile, const TDesC& aUniqueId)
sl@0
   104
	{
sl@0
   105
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API		
sl@0
   106
	TInt64 pos = 0;
sl@0
   107
#else
sl@0
   108
	TInt pos = 0;
sl@0
   109
#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   110
sl@0
   111
	// Check that the client hasn't specified some incorrect UniqueId
sl@0
   112
	User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId));	
sl@0
   113
	
sl@0
   114
	// When creating a CData from a file handle we must duplicate the file handle
sl@0
   115
	// before doing anything
sl@0
   116
	User::LeaveIfError(iFile.Duplicate(aFile));
sl@0
   117
	User::LeaveIfError(iFile.Seek(ESeekStart, pos));  // reset to start of file
sl@0
   118
	}
sl@0
   119
sl@0
   120
void CF32AgentData::DataSizeL(TInt &aSize)
sl@0
   121
	{
sl@0
   122
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   123
	TInt64 size;
sl@0
   124
	User::LeaveIfError(iFile.Size(size));
sl@0
   125
	aSize=size;
sl@0
   126
#else
sl@0
   127
	User::LeaveIfError(iFile.Size(aSize));
sl@0
   128
#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   129
	}
sl@0
   130
sl@0
   131
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   132
void CF32AgentData::DataSize64L(TInt64 &aSize)
sl@0
   133
	{
sl@0
   134
	User::LeaveIfError(iFile.Size(aSize));
sl@0
   135
	}
sl@0
   136
#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   137
sl@0
   138
TInt CF32AgentData::EvaluateIntent(TIntent /*aIntent*/)
sl@0
   139
	{
sl@0
   140
	return KErrNone;
sl@0
   141
	}
sl@0
   142
sl@0
   143
TInt CF32AgentData::ExecuteIntent(TIntent /*aIntent*/)
sl@0
   144
	{
sl@0
   145
	return KErrNone;
sl@0
   146
	}
sl@0
   147
sl@0
   148
TInt CF32AgentData::Read(TDes8& aDes) 
sl@0
   149
	{
sl@0
   150
	return iFile.Read(aDes);
sl@0
   151
	}
sl@0
   152
sl@0
   153
TInt CF32AgentData::Read(TDes8& aDes,TInt aLength) 
sl@0
   154
	{
sl@0
   155
	return iFile.Read(aDes,aLength);
sl@0
   156
	}
sl@0
   157
sl@0
   158
void CF32AgentData::Read(TDes8& aDes,TRequestStatus& aStatus) 
sl@0
   159
	{
sl@0
   160
	iFile.Read(aDes, aStatus);
sl@0
   161
	}
sl@0
   162
sl@0
   163
void CF32AgentData::Read(TDes8& aDes,
sl@0
   164
							 TInt aLength, 
sl@0
   165
							 TRequestStatus& aStatus) 
sl@0
   166
	{
sl@0
   167
	iFile.Read(aDes, aLength, aStatus);
sl@0
   168
	}
sl@0
   169
	
sl@0
   170
TInt CF32AgentData::Read(TInt aPos, TDes8& aDes,
sl@0
   171
							 TInt aLength, 
sl@0
   172
							 TRequestStatus& aStatus) 
sl@0
   173
	{
sl@0
   174
	iFile.Read(aPos, aDes, aLength, aStatus);
sl@0
   175
	return KErrNone;
sl@0
   176
	}
sl@0
   177
sl@0
   178
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   179
TInt CF32AgentData::Read64(TInt64 aPos, TDes8& aDes,
sl@0
   180
							 TInt aLength, 
sl@0
   181
							 TRequestStatus& aStatus) 
sl@0
   182
	{
sl@0
   183
	iFile.Read(aPos, aDes, aLength, aStatus);
sl@0
   184
	return KErrNone;
sl@0
   185
	}
sl@0
   186
#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   187
	
sl@0
   188
void CF32AgentData::ReadCancel(TRequestStatus& aStatus)
sl@0
   189
	{
sl@0
   190
	iFile.ReadCancel(aStatus);
sl@0
   191
	}
sl@0
   192
sl@0
   193
TInt CF32AgentData::Seek(TSeek aMode, TInt& aPos) 
sl@0
   194
	{
sl@0
   195
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   196
	TInt64 pos = aPos;
sl@0
   197
	TInt offset = iFile.Seek(aMode, pos);
sl@0
   198
	aPos = I64INT(pos);
sl@0
   199
#else
sl@0
   200
	TInt offset = iFile.Seek(aMode, aPos);
sl@0
   201
#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   202
	return offset;
sl@0
   203
	}
sl@0
   204
sl@0
   205
#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   206
TInt CF32AgentData::Seek64(TSeek aMode, TInt64& aPos) 
sl@0
   207
	{
sl@0
   208
	return iFile.Seek(aMode, aPos);
sl@0
   209
	}
sl@0
   210
#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
sl@0
   211
sl@0
   212
sl@0
   213
TInt CF32AgentData::SetProperty(TAgentProperty aProperty, TInt aValue)
sl@0
   214
	{
sl@0
   215
	
sl@0
   216
	if(aProperty==EAgentPropertyAgentUI)
sl@0
   217
		//	should only pass type EAgentPropertyAgentUI 
sl@0
   218
		{
sl@0
   219
		CF32AgentUi* ui = NULL;
sl@0
   220
	
sl@0
   221
		// get a pointer to the UI
sl@0
   222
		TRAPD(err, ui = &AgentUiL());
sl@0
   223
		if(err)
sl@0
   224
			{
sl@0
   225
			return err;
sl@0
   226
			}
sl@0
   227
		return ui->SetProperty(aProperty, aValue);
sl@0
   228
		}
sl@0
   229
	else
sl@0
   230
		{
sl@0
   231
		return KErrCANotSupported;
sl@0
   232
		}
sl@0
   233
	}
sl@0
   234
sl@0
   235
TInt CF32AgentData::GetAttribute(TInt aAttribute, TInt& aValue)
sl@0
   236
	{
sl@0
   237
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   238
	if(iHeaderData)
sl@0
   239
		{
sl@0
   240
		return TF32DefaultAttributes::GetAttribute(*iHeaderData, aAttribute, aValue);
sl@0
   241
		}
sl@0
   242
		
sl@0
   243
	else if(iVirtualPath)
sl@0
   244
		{
sl@0
   245
		return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iVirtualPath->URI());
sl@0
   246
		}
sl@0
   247
		
sl@0
   248
	else
sl@0
   249
		{
sl@0
   250
		return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile);
sl@0
   251
		}
sl@0
   252
#else
sl@0
   253
	if(iVirtualPath)
sl@0
   254
		{
sl@0
   255
		return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iVirtualPath->URI());
sl@0
   256
		}
sl@0
   257
	else
sl@0
   258
		{
sl@0
   259
		return TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile);
sl@0
   260
		}
sl@0
   261
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   262
	}
sl@0
   263
sl@0
   264
TInt CF32AgentData::GetAttributeSet(RAttributeSet& aAttributeSet)
sl@0
   265
	{
sl@0
   266
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   267
	if(iHeaderData)
sl@0
   268
		{
sl@0
   269
		return TF32DefaultAttributes::GetAttributeSet(*iHeaderData, aAttributeSet);
sl@0
   270
		}
sl@0
   271
		
sl@0
   272
	else if(iVirtualPath)
sl@0
   273
		{
sl@0
   274
		return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iVirtualPath->URI());
sl@0
   275
		}
sl@0
   276
			
sl@0
   277
	else
sl@0
   278
		{
sl@0
   279
		return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile);
sl@0
   280
		}
sl@0
   281
#else
sl@0
   282
	if(iVirtualPath)
sl@0
   283
		{
sl@0
   284
		return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iVirtualPath->URI());
sl@0
   285
		}	
sl@0
   286
	else
sl@0
   287
		{
sl@0
   288
		return TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile);
sl@0
   289
		}	
sl@0
   290
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT		
sl@0
   291
	}
sl@0
   292
sl@0
   293
TInt CF32AgentData::GetStringAttribute(TInt aAttribute, TDes& aValue)
sl@0
   294
	{
sl@0
   295
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   296
	if(iHeaderData)
sl@0
   297
		{
sl@0
   298
		return TF32DefaultAttributes::GetStringAttribute(*iHeaderData, aAttribute, aValue);
sl@0
   299
		}
sl@0
   300
	
sl@0
   301
	else if(iVirtualPath)
sl@0
   302
		{
sl@0
   303
		return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iVirtualPath->URI());
sl@0
   304
		}
sl@0
   305
	else
sl@0
   306
		{
sl@0
   307
		return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile);
sl@0
   308
		}
sl@0
   309
#else
sl@0
   310
	if(iVirtualPath)
sl@0
   311
		{
sl@0
   312
		return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iVirtualPath->URI());
sl@0
   313
		}
sl@0
   314
	else
sl@0
   315
		{
sl@0
   316
		return TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile);
sl@0
   317
		}
sl@0
   318
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT	
sl@0
   319
	}
sl@0
   320
sl@0
   321
TInt CF32AgentData::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet)
sl@0
   322
	{
sl@0
   323
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   324
	if(iHeaderData)
sl@0
   325
		{
sl@0
   326
		return TF32DefaultAttributes::GetStringAttributeSet(*iHeaderData, aStringAttributeSet);
sl@0
   327
		}
sl@0
   328
		
sl@0
   329
	else if(iVirtualPath)
sl@0
   330
		{
sl@0
   331
		return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iVirtualPath->URI());
sl@0
   332
		}
sl@0
   333
	else
sl@0
   334
		{
sl@0
   335
		return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile);
sl@0
   336
		}
sl@0
   337
#else
sl@0
   338
	if(iVirtualPath)
sl@0
   339
		{
sl@0
   340
		return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iVirtualPath->URI());
sl@0
   341
		}
sl@0
   342
	else
sl@0
   343
		{
sl@0
   344
		return TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile);
sl@0
   345
		}
sl@0
   346
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   347
	}
sl@0
   348
sl@0
   349
CF32AgentUi& CF32AgentData::AgentUiL()
sl@0
   350
	{
sl@0
   351
	if(!iAgentUi)
sl@0
   352
		{
sl@0
   353
		// load agent UI from f32AgentUi.dll
sl@0
   354
		iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL();
sl@0
   355
		}
sl@0
   356
	return *iAgentUi;
sl@0
   357
	}
sl@0
   358
sl@0
   359
#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0
   360
sl@0
   361
TInt CF32AgentData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputDataPacket)
sl@0
   362
	{
sl@0
   363
	if(aEncryptedInputDataPacket.Length() <= 0)
sl@0
   364
		{
sl@0
   365
		return KErrInsufficientDataPacketLength;
sl@0
   366
		}
sl@0
   367
	
sl@0
   368
	aDecryptedOutputDataPacket = aEncryptedInputDataPacket;
sl@0
   369
	return KErrNone;
sl@0
   370
	}
sl@0
   371
			
sl@0
   372
void CF32AgentData::Read(const TDesC8& aEncryptedInputDataPacket, TDes8& aDecryptedOutputDataPacket, TRequestStatus& aStatus)
sl@0
   373
	{
sl@0
   374
	TRequestStatus* status = &aStatus;
sl@0
   375
	if(aEncryptedInputDataPacket.Length() <= 0)
sl@0
   376
		{
sl@0
   377
		User::RequestComplete(status, KErrInsufficientDataPacketLength);		
sl@0
   378
		}
sl@0
   379
	
sl@0
   380
	aDecryptedOutputDataPacket = aEncryptedInputDataPacket;
sl@0
   381
	User::RequestComplete(status, KErrNone);
sl@0
   382
	}
sl@0
   383
sl@0
   384
#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT