omadrm/drmengine/agentv2/src/Oma2AgentImportFile.cpp
changeset 23 493788a4a8a4
parent 0 95b198f216e5
equal deleted inserted replaced
5:79d62d1d7957 23:493788a4a8a4
    19 // INCLUDE FILES
    19 // INCLUDE FILES
    20 #include <e32std.h>
    20 #include <e32std.h>
    21 #include <s32mem.h>
    21 #include <s32mem.h>
    22 #include <f32file.h>
    22 #include <f32file.h>
    23 #include <caf/caf.h>
    23 #include <caf/caf.h>
       
    24 #include <caf/cafplatform.h>
    24 #include <caf/caferr.h>
    25 #include <caf/caferr.h>
    25 #include <caf/SupplierOutputFile.h>
    26 #include <caf/supplieroutputfile.h>
    26 #include "Oma2Agent.h"
    27 #include "Oma2Agent.h"
    27 #include "Oma2AgentImportfile.h"
    28 #include "Oma2AgentImportFile.h"
    28 #include "DcfCommon.h"
    29 #include "DcfCommon.h"
    29 #include "DrmRights.h"
    30 #include "DRMRights.h"
    30 #include "DrmMessageParser.h"
    31 #include "DRMMessageParser.h"
    31 #include "Oma1DcfCreator.h"
    32 #include "Oma1DcfCreator.h"
    32 #include "DrmRightsParser.h"
    33 #include "DrmRightsParser.h"
    33 #include "DrmProtectedRoParser.h"
    34 #include "DRMProtectedRoParser.h"
    34 
    35 
    35 using namespace ContentAccess;
    36 using namespace ContentAccess;
    36 
    37 
    37 // LOCAL FUNCTION PROTOTYPES
    38 // LOCAL FUNCTION PROTOTYPES
    38 template<class S>
    39 template<class S>
    57 
    58 
    58 // ============================ MEMBER FUNCTIONS ===============================
    59 // ============================ MEMBER FUNCTIONS ===============================
    59 
    60 
    60 // -----------------------------------------------------------------------------
    61 // -----------------------------------------------------------------------------
    61 // COma2AgentImportFile::
    62 // COma2AgentImportFile::
    62 // 
    63 //
    63 // -----------------------------------------------------------------------------
    64 // -----------------------------------------------------------------------------
    64 //
    65 //
    65 COma2AgentImportFile* COma2AgentImportFile::NewL(
    66 COma2AgentImportFile* COma2AgentImportFile::NewL(
    66     const TDesC8& aMimeType,
    67     const TDesC8& aMimeType,
    67     const CMetaDataArray& aMetaDataArray,
    68     const CMetaDataArray& aMetaDataArray,
    68     const TDesC& aOutputDirectory,
    69     const TDesC& aOutputDirectory,
    69     const TDesC& aSuggestedFileName)
    70     const TDesC& aSuggestedFileName)
    70 	{
    71     {
    71 	COma2AgentImportFile* self=new(ELeave) COma2AgentImportFile(EFalse);
    72     COma2AgentImportFile* self=new(ELeave) COma2AgentImportFile(EFalse);
    72 	CleanupStack::PushL(self);
    73     CleanupStack::PushL(self);
    73 	self->ConstructL(aMimeType, aMetaDataArray, aOutputDirectory,
    74     self->ConstructL(aMimeType, aMetaDataArray, aOutputDirectory,
    74 	    aSuggestedFileName);
    75         aSuggestedFileName);
    75 	CleanupStack::Pop(self);
    76     CleanupStack::Pop(self);
    76 	return self;
    77     return self;
    77 	}
    78     }
    78 
    79 
    79 // -----------------------------------------------------------------------------
    80 // -----------------------------------------------------------------------------
    80 // COma2AgentImportFile::
    81 // COma2AgentImportFile::
    81 // 
    82 //
    82 // -----------------------------------------------------------------------------
    83 // -----------------------------------------------------------------------------
    83 //
    84 //
    84 COma2AgentImportFile* COma2AgentImportFile::NewL(
    85 COma2AgentImportFile* COma2AgentImportFile::NewL(
    85     const TDesC8& aMimeType,
    86     const TDesC8& aMimeType,
    86     const CMetaDataArray& aMetaDataArray)
    87     const CMetaDataArray& aMetaDataArray)
    87 	{
    88     {
    88 	COma2AgentImportFile* self=new(ELeave) COma2AgentImportFile(EFalse);
    89     COma2AgentImportFile* self=new(ELeave) COma2AgentImportFile(EFalse);
    89 	CleanupStack::PushL(self);
    90     CleanupStack::PushL(self);
    90 	self->ConstructL(aMimeType, aMetaDataArray, KNullDesC(), KNullDesC());
    91     self->ConstructL(aMimeType, aMetaDataArray, KNullDesC(), KNullDesC());
    91 	CleanupStack::Pop(self);
    92     CleanupStack::Pop(self);
    92 	return self;
    93     return self;
    93 	}
    94     }
    94 	
    95 
    95 // -----------------------------------------------------------------------------
    96 // -----------------------------------------------------------------------------
    96 // COma2AgentImportFile::
    97 // COma2AgentImportFile::
    97 // 
    98 //
    98 // -----------------------------------------------------------------------------
    99 // -----------------------------------------------------------------------------
    99 //
   100 //
   100 COma2AgentImportFile::COma2AgentImportFile(
   101 COma2AgentImportFile::COma2AgentImportFile(
   101     TBool aAgentCreatesOutputFiles):
   102     TBool aAgentCreatesOutputFiles):
   102     iOutputDirectory(NULL),
   103     iOutputDirectory(NULL),
   106     iAgentCreatesOutputFiles(aAgentCreatesOutputFiles),
   107     iAgentCreatesOutputFiles(aAgentCreatesOutputFiles),
   107     iMessageParser(NULL),
   108     iMessageParser(NULL),
   108     iDcfCreator(NULL),
   109     iDcfCreator(NULL),
   109     iDcfRights(NULL),
   110     iDcfRights(NULL),
   110     iDcfMimeType(NULL)
   111     iDcfMimeType(NULL)
   111 	{
   112     {
   112 	iImportStatus = EInProgress;
   113     iImportStatus = EInProgress;
   113 	}
   114     }
   114 
   115 
   115 // -----------------------------------------------------------------------------
   116 // -----------------------------------------------------------------------------
   116 // COma2AgentImportFile::
   117 // COma2AgentImportFile::
   117 // 
   118 //
   118 // -----------------------------------------------------------------------------
   119 // -----------------------------------------------------------------------------
   119 //
   120 //
   120 COma2AgentImportFile::~COma2AgentImportFile()
   121 COma2AgentImportFile::~COma2AgentImportFile()
   121 	{
   122     {
   122 	if (iFileOpen)
   123     if (iFileOpen)
   123 		{
   124         {
   124 		iFile.Close();
   125         iFile.Close();
   125 		iFileOpen = EFalse;
   126         iFileOpen = EFalse;
   126 		}
   127         }
   127 	iFs.Close();
   128     iFs.Close();
   128 	delete iOutputDirectory;
   129     delete iOutputDirectory;
   129 	delete iSuggestedFileName;
   130     delete iSuggestedFileName;
   130     delete iOutputFileName;
   131     delete iOutputFileName;
   131 	delete iLastWriteData;
   132     delete iLastWriteData;
   132 	iOutputFiles.ResetAndDestroy();
   133     iOutputFiles.ResetAndDestroy();
   133 	iOutputFiles.Close();
   134     iOutputFiles.Close();
   134 	delete iMessageParser;
   135     delete iMessageParser;
   135 	delete iDcfCreator;
   136     delete iDcfCreator;
   136 	delete iDcfRights;
   137     delete iDcfRights;
   137 	delete iDcfMimeType;
   138     delete iDcfMimeType;
   138 	}
   139     }
   139   
   140 
   140 // -----------------------------------------------------------------------------
   141 // -----------------------------------------------------------------------------
   141 // COma2AgentImportFile::
   142 // COma2AgentImportFile::
   142 // 
   143 //
   143 // -----------------------------------------------------------------------------
   144 // -----------------------------------------------------------------------------
   144 //
   145 //
   145 void COma2AgentImportFile::ConstructL(
   146 void COma2AgentImportFile::ConstructL(
   146     const TDesC8& aMimeType,
   147     const TDesC8& aMimeType,
   147     const CMetaDataArray& aMetaDataArray,
   148     const CMetaDataArray& aMetaDataArray,
   148     const TDesC& aOutputDirectory,
   149     const TDesC& aOutputDirectory,
   149     const TDesC& aSuggestedFileName)
   150     const TDesC& aSuggestedFileName)
   150 	{
   151     {
   151 	RMemReadStream rights;
   152     RMemReadStream rights;
   152 	
   153 
   153 	if (aMimeType.CompareF(KOma1DrmMessageContentType) == 0 ||
   154     if (aMimeType.CompareF(KOma1DrmMessageContentType) == 0 ||
   154 	    aMimeType.CompareF(KOmaImportContentType) == 0)
   155         aMimeType.CompareF(KOmaImportContentType) == 0)
   155 	    {
   156         {
   156 	    if (aMimeType.CompareF(KOma1DrmMessageContentType) == 0)
   157         if (aMimeType.CompareF(KOma1DrmMessageContentType) == 0)
   157 	        {
   158             {
   158             iMessageParser = CDRMMessageParser::NewL();
   159             iMessageParser = CDRMMessageParser::NewL();
   159 	        iImportType = EOma1DrmMessage;
   160             iImportType = EOma1DrmMessage;
   160 	        }
   161             }
   161 	    else
   162         else
   162 	        {
   163             {
   163 	        iDcfCreator = COma1DcfCreator::NewL();
   164             iDcfCreator = COma1DcfCreator::NewL();
   164     	    iImportType = EPlainContent;
   165             iImportType = EPlainContent;
   165             const TDesC8& mimeDes = aMetaDataArray.SearchL(
   166             const TDesC8& mimeDes = aMetaDataArray.SearchL(
   166                 KOmaImportMimeTypeField);
   167                 KOmaImportMimeTypeField);
   167             if (mimeDes.Length() == 0)
   168             if (mimeDes.Length() == 0)
   168                 {
   169                 {
   169                 User::Leave(KErrArgument);
   170                 User::Leave(KErrArgument);
   170                 }
   171                 }
   171     	    iDcfMimeType = mimeDes.AllocL();
   172             iDcfMimeType = mimeDes.AllocL();
   172     	    const TDesC8& rightsDes = aMetaDataArray.SearchL(
   173             const TDesC8& rightsDes = aMetaDataArray.SearchL(
   173     	        KOmaImportRightsField);
   174                 KOmaImportRightsField);
   174             if (rightsDes.Length() > 0)
   175             if (rightsDes.Length() > 0)
   175     	        {
   176                 {
   176     	        rights.Open(rightsDes.Ptr(), rightsDes.Length());
   177                 rights.Open(rightsDes.Ptr(), rightsDes.Length());
   177     	        CleanupClosePushL(rights);
   178                 CleanupClosePushL(rights);
   178         	    iDcfRights = CDRMRights::NewL();
   179                 iDcfRights = CDRMRights::NewL();
   179     	        iDcfRights->InternalizeL(rights);
   180                 iDcfRights->InternalizeL(rights);
   180     	        CleanupStack::PopAndDestroy(); // rights
   181                 CleanupStack::PopAndDestroy(); // rights
   181     	        }
   182                 }
   182 	        }
   183             }
   183     	iOutputDirectory = aOutputDirectory.AllocL();
   184         iOutputDirectory = aOutputDirectory.AllocL();
   184     	iSuggestedFileName = aSuggestedFileName.AllocL();
   185         iSuggestedFileName = aSuggestedFileName.AllocL();
   185     	iOutputFileName = HBufC::NewL(iOutputDirectory->Des().Length() +
   186         iOutputFileName = HBufC::NewL(iOutputDirectory->Des().Length() +
   186             iSuggestedFileName->Des().Length());
   187             iSuggestedFileName->Des().Length());
   187 	    iAgentCreatesOutputFiles = ETrue;
   188         iAgentCreatesOutputFiles = ETrue;
   188 	    }
   189         }
   189     else if (aMimeType.CompareF(KOma1XmlRoContentType) == 0)
   190     else if (aMimeType.CompareF(KOma1XmlRoContentType) == 0)
   190 	    {
   191         {
   191 	    iImportType = EOma1XmlRo;
   192         iImportType = EOma1XmlRo;
   192 	    }
   193         }
   193     else if (aMimeType.CompareF(KOma1WbxmlRoContentType) == 0)
   194     else if (aMimeType.CompareF(KOma1WbxmlRoContentType) == 0)
   194 	    {
   195         {
   195 	    iImportType = EOma1WbxmlRo;
   196         iImportType = EOma1WbxmlRo;
   196 	    }
   197         }
   197     else if (aMimeType.CompareF(KOma2RoContentType) == 0)
   198     else if (aMimeType.CompareF(KOma2RoContentType) == 0)
   198 	    {
   199         {
   199 	    iImportType = EOma2Ro;
   200         iImportType = EOma2Ro;
   200 	    }
   201         }
   201     else
   202     else
   202         {
   203         {
   203 		User::Leave(KErrCANotSupported);
   204         User::Leave(KErrCANotSupported);
   204 		}
   205         }
   205 	User::LeaveIfError(iFs.Connect());
   206     User::LeaveIfError(iFs.Connect());
   206     User::LeaveIfError(iFs.ShareAuto());	
   207     User::LeaveIfError(iFs.ShareAuto());
   207 	}
   208     }
   208 
   209 
   209 // -----------------------------------------------------------------------------
   210 // -----------------------------------------------------------------------------
   210 // COma2AgentImportFile::
   211 // COma2AgentImportFile::
   211 // 
   212 //
   212 // -----------------------------------------------------------------------------
   213 // -----------------------------------------------------------------------------
   213 //
   214 //
   214 TInt COma2AgentImportFile::OpenOutputFile()
   215 TInt COma2AgentImportFile::OpenOutputFile()
   215 	{
   216     {
   216 	TInt r = KErrNone;
   217     TInt r = KErrNone;
   217 	TPtr fileNamePtr = iOutputFileName->Des();
   218     TPtr fileNamePtr = iOutputFileName->Des();
   218 	
   219 
   219 	fileNamePtr.Copy(*iOutputDirectory);
   220     fileNamePtr.Copy(*iOutputDirectory);
   220 	fileNamePtr.Append(*iSuggestedFileName);
   221     fileNamePtr.Append(*iSuggestedFileName);
   221 
   222 
   222 	r = iFile.Create(iFs, fileNamePtr, EFileShareAny  | EFileStream |
   223     r = iFile.Create(iFs, fileNamePtr, EFileShareAny  | EFileStream |
   223 	    EFileWrite);
   224         EFileWrite);
   224 	if (r == KErrNone)
   225     if (r == KErrNone)
   225 		{
   226         {
   226 		iFileOpen = ETrue;
   227         iFileOpen = ETrue;
   227 		if (iImportType == EOma1DrmMessage)
   228         if (iImportType == EOma1DrmMessage)
   228 		    {
   229             {
   229 		    TRAP(r, iMessageParser->InitializeMessageParserL(iFile));
   230             TRAP(r, iMessageParser->InitializeMessageParserL(iFile));
   230 		    }
   231             }
   231 		else
   232         else
   232 		    {
   233             {
   233 		    TRAP(r, iDcfCreator->EncryptInitializeL(iFile, *iDcfMimeType,
   234             TRAP(r, iDcfCreator->EncryptInitializeL(iFile, *iDcfMimeType,
   234 		        iDcfRights));
   235                 iDcfRights));
   235 		    }
   236             }
   236 		}
   237         }
   237     else
   238     else
   238         {
   239         {
   239         r = KErrCANewFileHandleRequired;
   240         r = KErrCANewFileHandleRequired;
   240         }
   241         }
   241     return r;
   242     return r;
   242 	}
   243     }
   243 
   244 
   244 // -----------------------------------------------------------------------------
   245 // -----------------------------------------------------------------------------
   245 // COma2AgentImportFile::
   246 // COma2AgentImportFile::
   246 // 
   247 //
   247 // -----------------------------------------------------------------------------
   248 // -----------------------------------------------------------------------------
   248 //
   249 //
   249 void COma2AgentImportFile::WriteDataL(const TDesC8& aData)
   250 void COma2AgentImportFile::WriteDataL(const TDesC8& aData)
   250     {
   251     {
   251 	CDrmRightsParser* oma1Parser = NULL;
   252     CDrmRightsParser* oma1Parser = NULL;
   252 	CDrmProtectedRoParser* oma2Parser = NULL;
   253     CDrmProtectedRoParser* oma2Parser = NULL;
   253 	RPointerArray<CDRMRights> rights;
   254     RPointerArray<CDRMRights> rights;
   254     TCleanupItem listCleanup(PointerArrayResetDestroyAndClose<CDRMRights>,
   255     TCleanupItem listCleanup(PointerArrayResetDestroyAndClose<CDRMRights>,
   255         &rights);
   256         &rights);
   256 	TInt r;
   257     TInt r;
   257 	
   258 
   258     switch (iImportType)
   259     switch (iImportType)
   259         {
   260         {
   260         case EOma1DrmMessage:
   261         case EOma1DrmMessage:
   261         	if (!iFileOpen)
   262             if (!iFileOpen)
   262         		{
   263                 {
   263         		r = OpenOutputFile();
   264                 r = OpenOutputFile();
   264         		if (r == KErrNone)
   265                 if (r == KErrNone)
   265         		    {
   266                     {
   266                     iMessageParser->ProcessMessageDataL(aData);
   267                     iMessageParser->ProcessMessageDataL(aData);
   267         		    }
   268                     }
   268         		else
   269                 else
   269         		    {
   270                     {
   270                     iLastWriteData = aData.AllocL();
   271                     iLastWriteData = aData.AllocL();
   271                     User::Leave(r);
   272                     User::Leave(r);
   272         		    }
   273                     }
   273                 }
   274                 }
   274             else
   275             else
   275                 {
   276                 {
   276                 iMessageParser->ProcessMessageDataL(aData);
   277                 iMessageParser->ProcessMessageDataL(aData);
   277                 }
   278                 }
   278             break;
   279             break;
   279         case EPlainContent:
   280         case EPlainContent:
   280         	if (!iFileOpen)
   281             if (!iFileOpen)
   281         		{
   282                 {
   282         		r = OpenOutputFile();
   283                 r = OpenOutputFile();
   283         		if (r == KErrNone)
   284                 if (r == KErrNone)
   284         		    {
   285                     {
   285                     iDcfCreator->EncryptUpdateL(aData);
   286                     iDcfCreator->EncryptUpdateL(aData);
   286         		    }
   287                     }
   287         		else
   288                 else
   288         		    {
   289                     {
   289                     iLastWriteData = aData.AllocL();
   290                     iLastWriteData = aData.AllocL();
   290                     User::Leave(r);
   291                     User::Leave(r);
   291         		    }
   292                     }
   292                 }
   293                 }
   293             else
   294             else
   294                 {
   295                 {
   295                 iDcfCreator->EncryptUpdateL(aData);
   296                 iDcfCreator->EncryptUpdateL(aData);
   296                 }
   297                 }
   312             CleanupStack::PopAndDestroy(2); // listCleanup, oma2Parser
   313             CleanupStack::PopAndDestroy(2); // listCleanup, oma2Parser
   313             __UHEAP_MARKEND;
   314             __UHEAP_MARKEND;
   314             break;
   315             break;
   315         }
   316         }
   316     }
   317     }
   317     
   318 
   318 // -----------------------------------------------------------------------------
   319 // -----------------------------------------------------------------------------
   319 // COma2AgentImportFile::
   320 // COma2AgentImportFile::
   320 // 
   321 //
   321 // -----------------------------------------------------------------------------
   322 // -----------------------------------------------------------------------------
   322 //
   323 //
   323 TInt COma2AgentImportFile::WriteData(const TDesC8& aData)
   324 TInt COma2AgentImportFile::WriteData(const TDesC8& aData)
   324 	{
   325     {
   325 	TInt r = KErrNone;
   326     TInt r = KErrNone;
   326 	TRAP(r, WriteDataL(aData));
   327     TRAP(r, WriteDataL(aData));
   327 	return r;
   328     return r;
   328 	}
   329     }
   329 
   330 
   330 // -----------------------------------------------------------------------------
   331 // -----------------------------------------------------------------------------
   331 // COma2AgentImportFile::
   332 // COma2AgentImportFile::
   332 // 
   333 //
   333 // -----------------------------------------------------------------------------
   334 // -----------------------------------------------------------------------------
   334 //
   335 //
   335 TInt COma2AgentImportFile::WriteDataComplete()
   336 TInt COma2AgentImportFile::WriteDataComplete()
   336 	{
   337     {
   337 	TInt r = KErrNone;
   338     TInt r = KErrNone;
   338 	CSupplierOutputFile *temp = NULL;
   339     CSupplierOutputFile *temp = NULL;
   339 	TPtrC8 type(NULL, 0);
   340     TPtrC8 type(NULL, 0);
   340 	
   341 
   341 	if (iFileOpen)
   342     if (iFileOpen)
   342 		{
   343         {
   343 		if (iImportType == EOma1DrmMessage)
   344         if (iImportType == EOma1DrmMessage)
   344 		    {
   345             {
   345 		    TRAP(r, iMessageParser->FinalizeMessageParserL());
   346             TRAP(r, iMessageParser->FinalizeMessageParserL());
   346 		    }
   347             }
   347 		else
   348         else
   348 		    {
   349             {
   349 		    TRAP(r, iDcfCreator->EncryptFinalizeL());
   350             TRAP(r, iDcfCreator->EncryptFinalizeL());
   350 		    }
   351             }
   351 		iFile.Close();
   352         iFile.Close();
   352 		iFileOpen = EFalse;
   353         iFileOpen = EFalse;
   353 		}
   354         }
   354 	if( r ) 
   355     if( r )
   355 	    {
   356         {
   356 		  return r;
   357           return r;
   357       }
   358       }
   358 	if (iOutputFileName)
   359     if (iOutputFileName)
   359 		{
   360         {
   360 		switch (iImportType)
   361         switch (iImportType)
   361 		    {
   362             {
   362 		    case EPlainContent:
   363             case EPlainContent:
   363             case EOma1DrmMessage:
   364             case EOma1DrmMessage:
   364                 type.Set(KOma1DcfContentType());
   365                 type.Set(KOma1DcfContentType());
   365                 break;
   366                 break;
   366             default:
   367             default:
   367                 return KErrGeneral;;
   368                 return KErrGeneral;;
   368 		    }
   369             }
   369 		TRAP(r, temp = CSupplierOutputFile::NewL(iOutputFileName->Des(),
   370         TRAP(r, temp = CSupplierOutputFile::NewL(iOutputFileName->Des(),
   370 		    EContent, type));
   371             EContent, type));
   371 		if (r == KErrNone)
   372         if (r == KErrNone)
   372 			{
   373             {
   373 			r = iOutputFiles.Append(temp);
   374             r = iOutputFiles.Append(temp);
   374 			if (r != KErrNone)
   375             if (r != KErrNone)
   375 				{
   376                 {
   376 				delete temp;
   377                 delete temp;
   377 				}
   378                 }
   378 			}
   379             }
   379 		}
   380         }
   380 	return r;
   381     return r;
   381 	}
   382     }
   382 		
   383 
   383 // -----------------------------------------------------------------------------
   384 // -----------------------------------------------------------------------------
   384 // COma2AgentImportFile::
   385 // COma2AgentImportFile::
   385 // 
   386 //
   386 // -----------------------------------------------------------------------------
   387 // -----------------------------------------------------------------------------
   387 //
   388 //
   388 void COma2AgentImportFile::WriteData(
   389 void COma2AgentImportFile::WriteData(
   389     const TDesC8& aData,
   390     const TDesC8& aData,
   390     TRequestStatus &aStatus)
   391     TRequestStatus &aStatus)
   391 	{
   392     {
   392 	TRequestStatus *ptr = &aStatus;
   393     TRequestStatus *ptr = &aStatus;
   393 	TInt r = WriteData(aData);
   394     TInt r = WriteData(aData);
   394 	User::RequestComplete(ptr,r);
   395     User::RequestComplete(ptr,r);
   395 	}
   396     }
   396 
   397 
   397 // -----------------------------------------------------------------------------
   398 // -----------------------------------------------------------------------------
   398 // COma2AgentImportFile::
   399 // COma2AgentImportFile::
   399 // 
   400 //
   400 // -----------------------------------------------------------------------------
   401 // -----------------------------------------------------------------------------
   401 //
   402 //
   402 void COma2AgentImportFile::WriteDataComplete(
   403 void COma2AgentImportFile::WriteDataComplete(
   403     TRequestStatus &aStatus)
   404     TRequestStatus &aStatus)
   404 	{
   405     {
   405 	TRequestStatus *ptr = &aStatus;
   406     TRequestStatus *ptr = &aStatus;
   406 	TInt r = WriteDataComplete();
   407     TInt r = WriteDataComplete();
   407 	User::RequestComplete(ptr,r);
   408     User::RequestComplete(ptr,r);
   408 	}
   409     }
   409 	
   410 
   410 // -----------------------------------------------------------------------------
   411 // -----------------------------------------------------------------------------
   411 // COma2AgentImportFile::
   412 // COma2AgentImportFile::
   412 // 
   413 //
   413 // -----------------------------------------------------------------------------
   414 // -----------------------------------------------------------------------------
   414 //
   415 //
   415 TInt COma2AgentImportFile::OutputFileCountL() const
   416 TInt COma2AgentImportFile::OutputFileCountL() const
   416 	{
   417     {
   417 	return iOutputFiles.Count();
   418     return iOutputFiles.Count();
   418 	}
   419     }
   419 
   420 
   420 // -----------------------------------------------------------------------------
   421 // -----------------------------------------------------------------------------
   421 // COma2AgentImportFile::
   422 // COma2AgentImportFile::
   422 // 
   423 //
   423 // -----------------------------------------------------------------------------
   424 // -----------------------------------------------------------------------------
   424 //
   425 //
   425 CSupplierOutputFile& COma2AgentImportFile::OutputFileL(
   426 CSupplierOutputFile& COma2AgentImportFile::OutputFileL(
   426     TInt aIndex)
   427     TInt aIndex)
   427 	{
   428     {
   428 	return *iOutputFiles[aIndex];
   429     return *iOutputFiles[aIndex];
   429 	}
   430     }
   430 
   431 
   431 // -----------------------------------------------------------------------------
   432 // -----------------------------------------------------------------------------
   432 // COma2AgentImportFile::
   433 // COma2AgentImportFile::
   433 // 
   434 //
   434 // -----------------------------------------------------------------------------
   435 // -----------------------------------------------------------------------------
   435 //
   436 //
   436 TImportStatus COma2AgentImportFile::GetImportStatus() const
   437 TImportStatus COma2AgentImportFile::GetImportStatus() const
   437 	{
   438     {
   438 	return iImportStatus;
   439     return iImportStatus;
   439 	}	
   440     }
   440 
   441 
   441 // -----------------------------------------------------------------------------
   442 // -----------------------------------------------------------------------------
   442 // COma2AgentImportFile::
   443 // COma2AgentImportFile::
   443 // 
   444 //
   444 // -----------------------------------------------------------------------------
   445 // -----------------------------------------------------------------------------
   445 //
   446 //
   446 TInt COma2AgentImportFile::GetSuggestedOutputFileExtension(
   447 TInt COma2AgentImportFile::GetSuggestedOutputFileExtension(
   447     TDes& aFileExtension)
   448     TDes& aFileExtension)
   448 	{
   449     {
   449 	aFileExtension.Copy(_L(".dcf"));
   450     aFileExtension.Copy(_L(".dcf"));
   450 	return KErrNone;
   451     return KErrNone;
   451 	}
   452     }
   452 
   453 
   453 // -----------------------------------------------------------------------------
   454 // -----------------------------------------------------------------------------
   454 // COma2AgentImportFile::
   455 // COma2AgentImportFile::
   455 // 
   456 //
   456 // -----------------------------------------------------------------------------
   457 // -----------------------------------------------------------------------------
   457 //
   458 //
   458 TInt COma2AgentImportFile::GetSuggestedOutputFileName(
   459 TInt COma2AgentImportFile::GetSuggestedOutputFileName(
   459     TDes& aFileName)
   460     TDes& aFileName)
   460 	{
   461     {
   461 	aFileName.Append(_L(".dcf"));
   462     aFileName.Append(_L(".dcf"));
   462 	return KErrNone;
   463     return KErrNone;
   463 	}
   464     }
   464 
   465 
   465 // -----------------------------------------------------------------------------
   466 // -----------------------------------------------------------------------------
   466 // COma2AgentImportFile::
   467 // COma2AgentImportFile::
   467 // 
   468 //
   468 // -----------------------------------------------------------------------------
   469 // -----------------------------------------------------------------------------
   469 //
   470 //
   470 TInt COma2AgentImportFile::ContinueWithNewOutputFile(
   471 TInt COma2AgentImportFile::ContinueWithNewOutputFile(
   471     RFile& aFile,
   472     RFile& aFile,
   472     const TDesC& aFileName)
   473     const TDesC& aFileName)
   473 	{
   474     {
   474 	RFile file;
   475     RFile file;
   475 	TInt r = KErrNone;
   476     TInt r = KErrNone;
   476 
   477 
   477 	if (iOutputFileName != NULL)
   478     if (iOutputFileName != NULL)
   478 	    {
   479         {
   479 	    delete iOutputFileName;
   480         delete iOutputFileName;
   480 	    iOutputFileName = NULL;
   481         iOutputFileName = NULL;
   481 	    }
   482         }
   482 	TRAP(r, iOutputFileName = aFileName.AllocL());
   483     TRAP(r, iOutputFileName = aFileName.AllocL());
   483 	if (r == KErrNone)
   484     if (r == KErrNone)
   484 	    {
   485         {
   485 	    file.Duplicate(aFile);
   486         file.Duplicate(aFile);
   486         iFile.Attach(file);
   487         iFile.Attach(file);
   487         iFileOpen = ETrue;
   488         iFileOpen = ETrue;
   488 		if (iImportType == EOma1DrmMessage)
   489         if (iImportType == EOma1DrmMessage)
   489 		    {
   490             {
   490 		    TRAP(r, iMessageParser->InitializeMessageParserL(iFile));
   491             TRAP(r, iMessageParser->InitializeMessageParserL(iFile));
   491 		    }
   492             }
   492 		else
   493         else
   493 		    {
   494             {
   494 		    TRAP(r, iDcfCreator->EncryptInitializeL(iFile, *iDcfMimeType,
   495             TRAP(r, iDcfCreator->EncryptInitializeL(iFile, *iDcfMimeType,
   495 		        iDcfRights));
   496                 iDcfRights));
   496 		    }
   497             }
   497         if (r == KErrNone)
   498         if (r == KErrNone)
   498             {
   499             {
   499             r = WriteData(*iLastWriteData);
   500             r = WriteData(*iLastWriteData);
   500             }
   501             }
   501         delete iLastWriteData;
   502         delete iLastWriteData;
   502         iLastWriteData = NULL;
   503         iLastWriteData = NULL;
   503 	    }
   504         }
   504 	return r;
   505     return r;
   505 	}
   506     }
   506 
   507 
   507 // -----------------------------------------------------------------------------
   508 // -----------------------------------------------------------------------------
   508 // COma2AgentImportFile::
   509 // COma2AgentImportFile::
   509 // 
   510 //
   510 // -----------------------------------------------------------------------------
   511 // -----------------------------------------------------------------------------
   511 //
   512 //
   512 void COma2AgentImportFile::ContinueWithNewOutputFile(
   513 void COma2AgentImportFile::ContinueWithNewOutputFile(
   513     RFile& aFile,
   514     RFile& aFile,
   514     const TDesC& aFileName,
   515     const TDesC& aFileName,
   515     TRequestStatus& aStatus)
   516     TRequestStatus& aStatus)
   516 	{
   517     {
   517 	TRequestStatus *ptr = &aStatus;
   518     TRequestStatus *ptr = &aStatus;
   518 	TInt r = ContinueWithNewOutputFile(aFile, aFileName);
   519     TInt r = ContinueWithNewOutputFile(aFile, aFileName);
   519 	User::RequestComplete(ptr,r);
   520     User::RequestComplete(ptr,r);
   520 	}
   521     }
   521 
   522 
   522 // -----------------------------------------------------------------------------
   523 // -----------------------------------------------------------------------------
   523 // COma2AgentImportFile::
   524 // COma2AgentImportFile::
   524 // 
   525 //
   525 // -----------------------------------------------------------------------------
   526 // -----------------------------------------------------------------------------
   526 //
   527 //
   527 void COma2AgentImportFile::NewMimePartL(
   528 void COma2AgentImportFile::NewMimePartL(
   528     const TDesC8& /*aMimeType*/,
   529     const TDesC8& /*aMimeType*/,
   529     const CMetaDataArray& /*aImportMetaData*/)
   530     const CMetaDataArray& /*aImportMetaData*/)
   530 	{
   531     {
   531 	User::Leave(KErrCANotSupported);
   532     User::Leave(KErrCANotSupported);
   532 	}
   533     }
   533 
   534 
   534 // -----------------------------------------------------------------------------
   535 // -----------------------------------------------------------------------------
   535 // COma2AgentImportFile::
   536 // COma2AgentImportFile::
   536 // 
   537 //
   537 // -----------------------------------------------------------------------------
   538 // -----------------------------------------------------------------------------
   538 //
   539 //
   539 void COma2AgentImportFile::EndMimePartL()
   540 void COma2AgentImportFile::EndMimePartL()
   540 	{
   541     {
   541 	User::Leave(KErrCANotSupported);
   542     User::Leave(KErrCANotSupported);
   542 	}
   543     }
   543 
   544 
   544 // End of file
   545 // End of file