backupandrestore/backupengine/src/sbpackagedatatransfer.cpp
changeset 47 63cf70d3ecd8
parent 20 6e82ae192c3a
equal deleted inserted replaced
44:a5deb6b96675 47:63cf70d3ecd8
    20  @file
    20  @file
    21 */
    21 */
    22 #include "sbedataowner.h"
    22 #include "sbedataowner.h"
    23 #include "sbebufferhandler.h"
    23 #include "sbebufferhandler.h"
    24 #include "sbpackagedatatransfer.h"
    24 #include "sbpackagedatatransfer.h"
    25 #include "sblog.h"
       
    26 
    25 
    27 #include <babackup.h>
    26 #include <babackup.h>
    28 #include <swi/backuprestore.h>
    27 #include <swi/backuprestore.h>
    29 #include <swi/sisregistryentry.h>
    28 #include <swi/sisregistryentry.h>
    30 #include <swi/sisregistrypackage.h>
    29 #include <swi/sisregistrypackage.h>
    31 
    30 
    32 #include "sbeparserdefs.h"
    31 #include "sbeparserdefs.h"
       
    32 #include "OstTraceDefinitions.h"
       
    33 #include "sbtrace.h"
       
    34 #ifdef OST_TRACE_COMPILER_IN_USE
       
    35 #include "sbpackagedatatransferTraces.h"
       
    36 #endif
    33 
    37 
    34 namespace conn
    38 namespace conn
    35 	{
    39 	{
    36 	_LIT(KSys, "?:\\sys\\*");
    40 	_LIT(KSys, "?:\\sys\\*");
    37 	_LIT(KResource, "?:\\resource\\*");
    41 	_LIT(KResource, "?:\\resource\\*");
    44 	
    48 	
    45 	@param aPid Package Id
    49 	@param aPid Package Id
    46 	@return a CPackageDataTransfer object
    50 	@return a CPackageDataTransfer object
    47 	*/
    51 	*/
    48 		{
    52 		{
       
    53 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_NEWL_ENTRY );
    49 		CPackageDataTransfer* self = CPackageDataTransfer::NewLC(aPid, aDOM);
    54 		CPackageDataTransfer* self = CPackageDataTransfer::NewLC(aPid, aDOM);
    50 		CleanupStack::Pop(self);
    55 		CleanupStack::Pop(self);
       
    56 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_NEWL_EXIT );
    51 		return self;
    57 		return self;
    52 		}
    58 		}
    53 	
    59 	
    54 	CPackageDataTransfer* CPackageDataTransfer::NewLC(TUid aPid, CDataOwnerManager* aDOM)
    60 	CPackageDataTransfer* CPackageDataTransfer::NewLC(TUid aPid, CDataOwnerManager* aDOM)
    55 	/** Standard Symbian Constructor
    61 	/** Standard Symbian Constructor
    56 	
    62 	
    57 	@param aPid Package Id
    63 	@param aPid Package Id
    58 	@return a CPackageDataTransfer object
    64 	@return a CPackageDataTransfer object
    59 	*/
    65 	*/
    60 		{
    66 		{
       
    67 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_NEWLC_ENTRY );
    61 		CPackageDataTransfer *self = new(ELeave) CPackageDataTransfer(aPid, aDOM);
    68 		CPackageDataTransfer *self = new(ELeave) CPackageDataTransfer(aPid, aDOM);
    62 		CleanupStack::PushL(self);
    69 		CleanupStack::PushL(self);
    63 		self->ConstructL();
    70 		self->ConstructL();
       
    71 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_NEWLC_EXIT );
    64 		return self;
    72 		return self;
    65 		}
    73 		}
    66 
    74 
    67 	CPackageDataTransfer::CPackageDataTransfer(TUid aPid, CDataOwnerManager* aDOM) : 
    75 	CPackageDataTransfer::CPackageDataTransfer(TUid aPid, CDataOwnerManager* aDOM) : 
    68 	/** Standard C++ Constructor
    76 	/** Standard C++ Constructor
    71 	*/
    79 	*/
    72 		iBufferSnapshotReader(NULL), 
    80 		iBufferSnapshotReader(NULL), 
    73 		iBufferFileWriter(NULL), iBufferSnapshotWriter(NULL), 
    81 		iBufferFileWriter(NULL), iBufferSnapshotWriter(NULL), 
    74 		iPackageID(aPid), iSnapshot(NULL), iMetaData(NULL), ipDataOwnerManager(aDOM), iRestored(EFalse)
    82 		iPackageID(aPid), iSnapshot(NULL), iMetaData(NULL), ipDataOwnerManager(aDOM), iRestored(EFalse)
    75 	  	{
    83 	  	{
       
    84 	  	OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_CPACKAGEDATATRANSFER_CONS_ENTRY );
    76 	  	// needed for intiliazion
    85 	  	// needed for intiliazion
    77 	  	iDriveList.SetLength(KMaxDrives);
    86 	  	iDriveList.SetLength(KMaxDrives);
    78 	  	iDriveList.FillZ();
    87 	  	iDriveList.FillZ();
    79 	  	// needed for hashes in registry on drive C (i.e. MMC card app's hash)
    88 	  	// needed for hashes in registry on drive C (i.e. MMC card app's hash)
    80 	  	iDriveList[EDriveC] = ETrue;
    89 	  	iDriveList[EDriveC] = ETrue;
       
    90 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_CPACKAGEDATATRANSFER_CONS_EXIT );
    81 		}
    91 		}
    82 		
    92 		
    83 	void CPackageDataTransfer::ConstructL()
    93 	void CPackageDataTransfer::ConstructL()
    84 	/** Standard Symbian second phase constructor
    94 	/** Standard Symbian second phase constructor
    85 	*/
    95 	*/
    86 		{
    96 		{
    87 		User::LeaveIfError(iSWIRestore.Connect());
    97 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_CONSTRUCTL_ENTRY );
    88 		User::LeaveIfError(iSWIBackup.Connect());
    98 		TInt err = iSWIRestore.Connect();
    89 		User::LeaveIfError(iFs.Connect());
    99 		LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_CONSTRUCTL, "error = %d", err));
    90 		User::LeaveIfError(iFs.ShareProtected());
   100 		err = iSWIBackup.Connect();
       
   101 		LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP1_CPACKAGEDATATRANSFER_CONSTRUCTL, "error = %d", err));
       
   102 		err = iFs.Connect();
       
   103 		LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_CONSTRUCTL, "error = %d", err));
       
   104 		err = iFs.ShareProtected();
       
   105 		LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP3_CPACKAGEDATATRANSFER_CONSTRUCTL, "error = %d", err));
    91 		iRegistrationFile = HBufC::NewL(0);
   106 		iRegistrationFile = HBufC::NewL(0);
    92 		iFileName = HBufC::NewL(KMaxFileName);
   107 		iFileName = HBufC::NewL(KMaxFileName);
    93 		iTempFileName = HBufC::NewL(KMaxFileName);
   108 		iTempFileName = HBufC::NewL(KMaxFileName);
       
   109 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_CONSTRUCTL_EXIT );
    94 		}
   110 		}
    95 
   111 
    96 	CPackageDataTransfer::~CPackageDataTransfer()
   112 	CPackageDataTransfer::~CPackageDataTransfer()
    97 	/** Standard C++ Destructor
   113 	/** Standard C++ Destructor
    98 	*/
   114 	*/
    99 	  	{
   115 	  	{
       
   116 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_CPACKAGEDATATRANSFER_DES_ENTRY );
   100 		iSWIRestore.Close();
   117 		iSWIRestore.Close();
   101 		iSWIBackup.Close();
   118 		iSWIBackup.Close();
   102 		iFileHandle.Close();
   119 		iFileHandle.Close();
   103 		iFiles.ResetAndDestroy();
   120 		iFiles.ResetAndDestroy();
   104 		iPublicSelections.ResetAndDestroy();
   121 		iPublicSelections.ResetAndDestroy();
   110 		delete iSnapshot;
   127 		delete iSnapshot;
   111 		delete iMetaData;
   128 		delete iMetaData;
   112 		delete iFileName;
   129 		delete iFileName;
   113 		delete iTempFileName;
   130 		delete iTempFileName;
   114 		iFs.Close();
   131 		iFs.Close();
       
   132 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_CPACKAGEDATATRANSFER_DES_EXIT );
   115 		}
   133 		}
   116 
   134 
   117 	
   135 	
   118 	void CPackageDataTransfer::WriteData(TAny* aItem, TPtr8& aBuffer, 
   136 	void CPackageDataTransfer::WriteData(TAny* aItem, TPtr8& aBuffer, 
   119 										 TInt aSize)
   137 										 TInt aSize)
   122 	@param aItem Item to write
   140 	@param aItem Item to write
   123 	@param aBuffer Buffer to write aItem to
   141 	@param aBuffer Buffer to write aItem to
   124 	@param aSize Size of the aItem
   142 	@param aSize Size of the aItem
   125 	*/										 
   143 	*/										 
   126 		{
   144 		{
       
   145 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_WRITEDATA_ENTRY );
   127 		TUint8 *pos = reinterpret_cast<TUint8*>(aItem);
   146 		TUint8 *pos = reinterpret_cast<TUint8*>(aItem);
   128 		for (TInt i = 0; i < aSize; ++i)
   147 		for (TInt i = 0; i < aSize; ++i)
   129 			{
   148 			{
   130 			aBuffer.Append(pos[i]);
   149 			aBuffer.Append(pos[i]);
   131 			}
   150 			}
       
   151 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_WRITEDATA_EXIT );
   132 		}
   152 		}
   133 
   153 
   134 	TUid CPackageDataTransfer::PackageId() const
   154 	TUid CPackageDataTransfer::PackageId() const
   135 	/** Returns the package Id
   155 	/** Returns the package Id
   136 	
   156 	
   147 	@param apSnapshot (OPTIONAL)A file will only be included if the file is not 
   167 	@param apSnapshot (OPTIONAL)A file will only be included if the file is not 
   148 					  in the snapshot is newer than the file in the snapshot
   168 					  in the snapshot is newer than the file in the snapshot
   149 	@param aFileNames on return the list of files
   169 	@param aFileNames on return the list of files
   150 	*/
   170 	*/
   151 		{
   171 		{
   152 		__LOG("CPackageDataTransfer::BuildPackageFileListL() - START");
   172 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_BUILDPACKAGEFILELIST_ENTRY );		
   153 		// Establish a connection to the registry and read the list of
   173 		// Establish a connection to the registry and read the list of
   154 		// filenames into array.
   174 		// filenames into array.
   155 		// 
   175 		// 
   156 		
   176 		
   157 		iDriveList.SetLength(KMaxDrives);
   177 		iDriveList.SetLength(KMaxDrives);
   158 		iDriveList.FillZ();
   178 		iDriveList.FillZ();
   159 		// also set EDriveC to True for hashesh of the registry
   179 		// also set EDriveC to True for hashesh of the registry
   160 		iDriveList[EDriveC] = ETrue;
   180 		iDriveList[EDriveC] = ETrue;
   161 		
   181 		
   162 		TUint count = iFiles.Count();
   182 		TUint count = iFiles.Count();
   163 		__LOG1("CPackageDataTransfer::BuildPackageFileListL() - No of files: %d", count);
   183 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_BUILDPACKAGEFILELIST, "No of files: %d", count);
   164 		while (count > 0)
   184 		while (count > 0)
   165 			{
   185 			{
   166 			count--;
   186 			count--;
   167 			TBool remove = EFalse;
   187 			TBool remove = EFalse;
   168 			TFileName fileName (*iFiles[count]);
   188 			TFileName fileName (*iFiles[count]);
   211 					}
   231 					}
   212 				}
   232 				}
   213 			} // for
   233 			} // for
   214 			
   234 			
   215 		
   235 		
   216 		#ifdef SBE_LOGGING_ENABLED
   236         const TUint fNameCount = iFiles.Count();
   217 			const TUint fNameCount = iFiles.Count();
   237         if  (fNameCount)
   218 	        if  (fNameCount)
   238             {
   219 	            {
   239             for(TUint k=0; k<fNameCount; k++)
   220 	            for(TUint k=0; k<fNameCount; k++)
   240                 {
   221 	                {
   241                 const TDesC& file = *iFiles[k];
   222 	                const TDesC& file = *iFiles[k];
   242                 OstTraceExt2(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_BUILDPACKAGEFILELIST, "Files Added - file entry[%03d] %S", static_cast<TInt32>(k), file);
   223 	                __LOG2("CPackageDataTransfer::BuildPackageFileListL() - Files Added - file entry[%03d] %S", k, &file);
   243                 }
   224 	                }
   244             }
   225 	            }
   245 		
   226 		#endif
   246 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_BUILDPACKAGEFILELIST_EXIT );
   227 		
       
   228 		
       
   229 		__LOG("CPackageDataTransfer::BuildPackageFileListL() - END");		
       
   230 		}
   247 		}
   231 
   248 
   232 	
   249 	
   233 	void CPackageDataTransfer::GetExpectedDataSizeL(TPackageDataType aTransferType, TDriveNumber aDriveNumber, TUint& aSize)
   250 	void CPackageDataTransfer::GetExpectedDataSizeL(TPackageDataType aTransferType, TDriveNumber aDriveNumber, TUint& aSize)
   234 	/** Get the expected data size of a request for data
   251 	/** Get the expected data size of a request for data
   236 	@param aTransferType the type of data to check the size of
   253 	@param aTransferType the type of data to check the size of
   237 	@param aDriveNumber the drive to check
   254 	@param aDriveNumber the drive to check
   238 	@param aSize on return the size of the data
   255 	@param aSize on return the size of the data
   239 	*/
   256 	*/
   240 		{
   257 		{
   241 		__LOG("CPackageDataTransfer::GetExpectedDataSizeL - Begin getmetadata");
   258 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL_ENTRY );
       
   259 		OstTrace0(TRACE_NORMAL, CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "Begin getmetadata");
   242 		if (iMetaData == NULL)
   260 		if (iMetaData == NULL)
   243 			{
   261 			{
   244 			TRAPD(err, iMetaData = iSWIBackup.GetMetaDataL(iPackageID, iFiles));
   262 			TRAPD(err, iMetaData = iSWIBackup.GetMetaDataL(iPackageID, iFiles));
   245 			
   263 			
   246 			if(KErrNotSupported == err)
   264 			if(KErrNotSupported == err)
   247 			    {//Non-Removable package, nothing to backup
   265 			    {//Non-Removable package, nothing to backup
   248 			    aSize = 0;
   266 			    aSize = 0;
   249 			    __LOG("CPackageDataTransfer::GetExpectedDataSizeL - GetMetaDataL - KErrNotSupported");
   267 			    OstTrace0(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "GetMetaDataL - KErrNotSupported");
       
   268 			    OstTraceFunctionExit0( CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL_EXIT );
   250 			    return;
   269 			    return;
   251 			    }
   270 			    }
   252 			else if(KErrNone != err)
   271 			else if(KErrNone != err)
   253 			    {
   272 			    {
   254 			    __LOG1("CPackageDataTransfer::GetExpectedDataSizeL - GetMetaDataL leave with %d", err);
   273 			    OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "GetMetaDataL leave with %d", err);
   255 			    User::Leave(err);
   274 			    User::Leave(err);
   256 			    }
   275 			    }
   257 			
   276 			
   258 			iMetaDataSize = iMetaData->Size();
   277 			iMetaDataSize = iMetaData->Size();
   259 			BuildPackageFileList();
   278 			BuildPackageFileList();
   260 			}
   279 			}
   261 		__LOG("CPackageDataTransfer::GetExpectedDataSizeL - End getmetadata");
   280 		OstTrace0(TRACE_NORMAL, DUP3_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "End getmetadata");
   262 		
   281 		
   263 		if (!IsDataOnDrive(aDriveNumber))
   282 		if (!IsDataOnDrive(aDriveNumber))
   264 			{
   283 			{
   265 			// no data on drive
   284 			// no data on drive
   266 			aSize = 0;
   285 			aSize = 0;
       
   286 			OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL_EXIT );
   267 			return;
   287 			return;
   268 			}
   288 			}
   269 		
   289 		
   270 		aSize = iMetaData->Size();
   290 		aSize = iMetaData->Size();
   271 		TUint count = iFiles.Count();
   291 		TUint count = iFiles.Count();
   272 		
   292 		
   273 		switch (aTransferType)
   293 		switch (aTransferType)
   274 			{
   294 			{
   275 			case ESystemSnapshotData:
   295 			case ESystemSnapshotData:
   276 				{
   296 				{
   277 				__LOG1("CPackageDataTransfer::GetExpectedDataSizeL() - START - ESystemSnapshotData - aDriveNumber: %c", aDriveNumber + 'A');
   297 				OstTraceExt1(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "ESystemSnapshotData - aDriveNumber: %c", aDriveNumber + 'A');
   278 				// Find all files
   298 				// Find all files
   279 				aSize = (count * sizeof(TSnapshot));
   299 				aSize = (count * sizeof(TSnapshot));
   280 				__LOG1("CPackageDataTransfer::GetExpectedDataSizeL() - passive snapshot count: %d", count);
   300 				OstTrace1(TRACE_NORMAL, DUP5_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "passive snapshot count: %d", count);
   281 				for (TUint x = 0; x < count; x++)
   301 				for (TUint x = 0; x < count; x++)
   282 					{
   302 					{
   283 					const TDesC& fileName = *iFiles[x];
   303 					const TDesC& fileName = *iFiles[x];
   284                 	const TInt fileSize = fileName.Length();;
   304                 	const TInt fileSize = fileName.Length();;
   285                 	__LOG2("CPackageDataTransfer::GetExpectedDataSizeL() - passive snapshot file: %S, size: %d", &fileName, fileSize);
   305                 	OstTraceExt2(TRACE_NORMAL, DUP6_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "passive snapshot file: %S, size: %d", fileName, fileSize);
   286 					aSize += fileSize;
   306 					aSize += fileSize;
   287 					} // for x
   307 					} // for x
   288 					
   308 					
   289 				break;
   309 				break;
   290 				}
   310 				}
   291 			case ESystemData:
   311 			case ESystemData:
   292 				{
   312 				{
   293 				__LOG1("CPackageDataTransfer::GetExpectedDataSizeL() - START - ESystemData - aDriveNumber: %c", aDriveNumber + 'A');
   313 				OstTraceExt1(TRACE_NORMAL, DUP7_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "ESystemData - aDriveNumber: %c", aDriveNumber + 'A');
   294 				
   314 				
   295 				aSize += sizeof(TInt);
   315 				aSize += sizeof(TInt);
   296 			
   316 			
   297 				TEntry entry;
   317 				TEntry entry;
   298 				__LOG1("CPackageDataTransfer::GetExpectedDataSizeL() - passive file count: %d", count);
   318 				OstTrace1(TRACE_NORMAL, DUP8_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "passive file count: %d", count);
   299 				for (TUint x = 0; x < count; x++)
   319 				for (TUint x = 0; x < count; x++)
   300 					{
   320 					{
   301 					const TDesC& fileName = *iFiles[x];
   321 					const TDesC& fileName = *iFiles[x];
   302 					TInt err = iFs.Entry(fileName, entry);
   322 					TInt err = iFs.Entry(fileName, entry);
   303 					TUint fileSize = entry.iSize;
   323 					TUint fileSize = entry.iSize;
   304 					__LOG2("CPackageDataTransfer::GetExpectedDataSizeL() - passive file: %S, size: %d", &fileName, fileSize);
   324 					OstTraceExt2(TRACE_NORMAL, DUP9_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "passive file: %S, size: %d", fileName, static_cast<TInt32>(fileSize));
   305 					switch(err)
   325 					switch(err)
   306 						{
   326 						{
   307 					case KErrNone:
   327 					case KErrNone:
   308 						aSize += fileSize;
   328 						aSize += fileSize;
   309 						break;
   329 						break;
   310 					case KErrNotFound:
   330 					case KErrNotFound:
   311 					case KErrPathNotFound:
   331 					case KErrPathNotFound:
   312 					case KErrBadName:
   332 					case KErrBadName:
   313 						__LOG2("CPackageDataTransfer::GetExpectedDataSizeL() - error getting passive file: %S, error: %d", &fileName, err);
   333 					    OstTraceExt2(TRACE_NORMAL, DUP10_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "error getting passive file: %S, error: %d", fileName, err);
   314 						break;
   334 						break;
   315 					default:
   335 					default:
       
   336 					    OstTrace1(TRACE_ERROR, DUP13_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "Leave: %d", err);
   316 						User::Leave(err);
   337 						User::Leave(err);
   317 						}
   338 						}
   318 					}
   339 					}
   319 					
   340 					
   320 				break;
   341 				break;
   321 				}
   342 				}
   322 			default:
   343 			default:
   323 				{
   344 				{
   324 				__LOG2("CPackageDataTransfer::GetExpectedDataSizeL() - No case for TransferType: %d, data owner 0x%08x", aTransferType, iPackageID.iUid);
   345 				OstTraceExt2(TRACE_ERROR, DUP11_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "No case for TransferType: %d, data owner 0x%08x", static_cast<TInt32>(aTransferType), iPackageID.iUid);
   325 				User::Leave(KErrNotSupported);
   346 				User::Leave(KErrNotSupported);
   326 				}
   347 				}
   327 			} // switch
   348 			} // switch
   328 		__LOG2("CPackageDataTransfer::GetExpectedDataSizeL() - END - size is: %d, data owner 0x%08x", aSize, iPackageID.iUid);
   349 		OstTraceExt2(TRACE_NORMAL, DUP12_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL, "size is: %d, data owner 0x%08x", static_cast<TInt32>(aSize), iPackageID.iUid);
       
   350 		OstTraceFunctionExit0( DUP2_CPACKAGEDATATRANSFER_GETEXPECTEDDATASIZEL_EXIT );
   329 		}
   351 		}
   330 	
   352 	
   331 	void CPackageDataTransfer::RequestDataL(TDriveNumber aDriveNumber, 
   353 	void CPackageDataTransfer::RequestDataL(TDriveNumber aDriveNumber, 
   332 	    									TPackageDataType aTransferType, 
   354 	    									TPackageDataType aTransferType, 
   333 	    									TPtr8& aBuffer,
   355 	    									TPtr8& aBuffer,
   340 		@param aLastSection has all the data been supplied. If all data is not
   362 		@param aLastSection has all the data been supplied. If all data is not
   341 			   supplied a further calls to the function will return the extra
   363 			   supplied a further calls to the function will return the extra
   342 			   data.
   364 			   data.
   343 		*/
   365 		*/
   344 		{
   366 		{
   345 		__LOG6("CPackageDataTransfer::RequestDataL() - START - aDrive: %c, aTransferType: %d, iSecureId: 0x%08x, iState.iState: %d, iState.iTransferType: %d, aBuffer.Length(): %d", aDriveNumber + 'A', aTransferType, iPackageID.iUid, iState.iState, iState.iTransferType, aBuffer.Length());
   367 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_REQUESTDATAL_ENTRY );
   346         //__LOGDATA("CPackageDataTransfer::RequestDataL() - %S", aBuffer.Ptr(), aBuffer.Length() );
   368 		OstTraceExt3(TRACE_NORMAL, CPACKAGEDATATRANSFER_REQUESTDATAL, "aDrive: %c, aTransferType: %d, iSecureId: 0x%08x", static_cast<TInt8>(aDriveNumber + 'A'), static_cast<TInt32>(aTransferType), static_cast<TUint32>(iPackageID.iUid));
       
   369 		OstTraceExt3(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_REQUESTDATAL, "iState.iState: %d, iState.iTransferType: %d, aBuffer.Length(): %d", static_cast<TInt32>(iState.iState), static_cast<TInt32>(iState.iTransferType), static_cast<TInt32>(aBuffer.Length()));
   347 		
   370 		
   348 		TInt err = KErrNone;
   371 		TInt err = KErrNone;
   349 		
   372 		
   350 		if (iMetaData == NULL)
   373 		if (iMetaData == NULL)
   351 			{
   374 			{
   354             if(KErrNotSupported == err)
   377             if(KErrNotSupported == err)
   355                 {//Non-Removable package, nothing to backup
   378                 {//Non-Removable package, nothing to backup
   356                 iState.iState = ENone;
   379                 iState.iState = ENone;
   357                 aLastSection = ETrue;
   380                 aLastSection = ETrue;
   358                 Cleanup();
   381                 Cleanup();
       
   382                 OstTraceFunctionExit0( CPACKAGEDATATRANSFER_REQUESTDATAL_EXIT );
   359                 return;
   383                 return;
   360                 }
   384                 }
   361             else if(KErrNone != err)
   385             else if(KErrNone != err)
   362                 {
   386                 {
   363                 iState.iState = ENone;
   387                 iState.iState = ENone;
   364                 aLastSection = ETrue;
   388                 aLastSection = ETrue;
   365                 Cleanup();
   389                 Cleanup();
       
   390                 OstTrace1(TRACE_ERROR, DUP3_CPACKAGEDATATRANSFER_REQUESTDATAL, "Leave: %d", err);
   366                 User::Leave(err);
   391                 User::Leave(err);
   367                 }
   392                 }
   368             
   393             
   369 			iMetaDataSize = iMetaData->Size();
   394 			iMetaDataSize = iMetaData->Size();
   370 			BuildPackageFileList();
   395 			BuildPackageFileList();
   373 		// Check our state
   398 		// Check our state
   374 		if (!((iState.iState == ENone) || (iState.iState == EBuffer) ||
   399 		if (!((iState.iState == ENone) || (iState.iState == EBuffer) ||
   375 		     ((iState.iState == ERequest) && (iState.iDriveNumber == aDriveNumber) && 
   400 		     ((iState.iState == ERequest) && (iState.iDriveNumber == aDriveNumber) && 
   376 		      (iState.iTransferType == aTransferType))))
   401 		      (iState.iTransferType == aTransferType))))
   377 			{
   402 			{
   378 		    __LOG("CPackageDataTransfer::RequestDataL() - bad state => ERROR => KErrNotReady");
   403 		    OstTrace0(TRACE_ERROR, DUP1_CPACKAGEDATATRANSFER_REQUESTDATAL, "bad state => ERROR => KErrNotReady");
   379 			User::Leave(KErrNotReady);			
   404 			User::Leave(KErrNotReady);			
   380 			}
   405 			}
   381 			
   406 			
   382 		// Set the state?
   407 		// Set the state?
   383 		if (iState.iState == ENone)
   408 		if (iState.iState == ENone)
   406 		
   431 		
   407 		if (err != KErrNone)
   432 		if (err != KErrNone)
   408 			{
   433 			{
   409 			iState.iState = ENone;
   434 			iState.iState = ENone;
   410 			Cleanup();
   435 			Cleanup();
   411 			__LOG1("CPackageDataTransfer::RequestDataL() - Left with error: %d", err);
   436 			OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_REQUESTDATAL, "Leave with error: %d", err);
   412 			User::Leave(err);
   437 			User::Leave(err);
   413 			} // if
   438 			} // if
   414 		__LOG("CPackageDataTransfer::RequestDataL() - END");
   439 		
       
   440 		OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_REQUESTDATAL_EXIT );
   415 		}
   441 		}
   416 
   442 
   417 
   443 
   418 	void CPackageDataTransfer::ReadData(TAny* aDestinationAddress, const TDesC8& aBuffer, TInt aSize)
   444 	void CPackageDataTransfer::ReadData(TAny* aDestinationAddress, const TDesC8& aBuffer, TInt aSize)
   419 	/** Read data from the given buffer
   445 	/** Read data from the given buffer
   421 	@param aItem the item to fill
   447 	@param aItem the item to fill
   422 	@param aBuffer the buffer to read the data from
   448 	@param aBuffer the buffer to read the data from
   423 	@param aSize the size of the item to fill
   449 	@param aSize the size of the item to fill
   424 	*/
   450 	*/
   425 		{
   451 		{
       
   452         OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_READDATA_ENTRY );
   426         TUint8* pos = reinterpret_cast<TUint8*>(aDestinationAddress);
   453         TUint8* pos = reinterpret_cast<TUint8*>(aDestinationAddress);
   427 		for (TInt i = 0; i < aSize; ++i)
   454 		for (TInt i = 0; i < aSize; ++i)
   428 			{
   455 			{
   429 			pos[i] = aBuffer[i];
   456 			pos[i] = aBuffer[i];
   430 			}
   457 			}
       
   458 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_READDATA_EXIT );
   431 		}
   459 		}
   432 
   460 
   433 	void CPackageDataTransfer::SupplyFileDataL( const TDesC8& aBuffer, TBool aLastSection)
   461 	void CPackageDataTransfer::SupplyFileDataL( const TDesC8& aBuffer, TBool aLastSection)
   434 	/** Restores files from the buffer to the package.
   462 	/** Restores files from the buffer to the package.
   435 	
   463 	
   436 	@param aBuffer the buffer to read data from
   464 	@param aBuffer the buffer to read data from
   437 	@param aLastSection has all data been supplied
   465 	@param aLastSection has all data been supplied
   438 	*/
   466 	*/
   439 		{
   467 		{
   440 		__LOG1("CPackageDataTransfer::SupplyFileDataL() - START - aLastSection: %d", aLastSection);
   468 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_SUPPLYFILEDATAL_ENTRY );
       
   469 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "aLastSection: %d", aLastSection);
   441 		TUint8* current = const_cast<TUint8*>(aBuffer.Ptr());
   470 		TUint8* current = const_cast<TUint8*>(aBuffer.Ptr());
   442 		const TUint8* end = current + aBuffer.Size();
   471 		const TUint8* end = current + aBuffer.Size();
   443 		while (current < end)
   472 		while (current < end)
   444 			{
   473 			{
   445 			if (!iFixedHeaderRead)
   474 			if (!iFixedHeaderRead)
   446 				{
   475 				{
   447 				if (ReadFromBufferF(iFixedHeader, current, end) == EFalse)
   476 				if (ReadFromBufferF(iFixedHeader, current, end) == EFalse)
   448 					{
   477 					{
   449 					__LOG("CPackageDataTransfer::SupplyFileDataL() - ReadFromBufferF() returned False so breaking!");
   478 				    OstTrace0(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "ReadFromBufferF() returned False so breaking!");
   450 					break;
   479 					break;
   451 					} // if
   480 					} // if
   452 				
   481 				
   453 				__LOG1("CPackageDataTransfer::SupplyFileDataL() - fixed header - iFileNameLength:  %d", iFixedHeader.iFileNameLength);
   482 				OstTrace1(TRACE_NORMAL, DUP2_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "fixed header - iFileNameLength:  %d", iFixedHeader.iFileNameLength);
   454                 __LOG1("CPackageDataTransfer::SupplyFileDataL() - fixed header - iFileSize:        %d", iFixedHeader.iFileSize);
   483 				OstTrace1(TRACE_NORMAL, DUP3_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "fixed header - iFileSize:        %d", iFixedHeader.iFileSize);
   455                 __LOG1("CPackageDataTransfer::SupplyFileDataL() - fixed header - iAttributes:      %d", iFixedHeader.iAttributes);
   484 				OstTrace1(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "fixed header - iAttributes:      %d", iFixedHeader.iAttributes);
   456                 
   485                 
   457                 if ((iFixedHeader.iFileNameLength > KMaxFileName) || (!iFixedHeader.iFileNameLength))
   486                 if ((iFixedHeader.iFileNameLength > KMaxFileName) || (!iFixedHeader.iFileNameLength))
   458 					{
   487 					{
   459 					__LOG1("CBufferFileReader::SupplyFileDataL() - Leaving - iFileNameLength: %d more then MaxLength", iFixedHeader.iFileNameLength);
   488                     OstTrace1(TRACE_ERROR, DUP5_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "Leave with KErrOverflow - iFileNameLength: %d more then MaxLength", iFixedHeader.iFileNameLength);
   460 					User::Leave(KErrOverflow);
   489 					User::Leave(KErrOverflow);
   461 					}
   490 					}
   462                 
   491                 
   463 				iFixedHeaderRead = ETrue;
   492 				iFixedHeaderRead = ETrue;
   464 				} //if
   493 				} //if
   467 				TPtr8 ptr(reinterpret_cast<TUint8*>(const_cast<TUint16*>(iFileName->Des().Ptr())), iBytesRead,iFixedHeader.iFileNameLength * KCharWidthInBytes);
   496 				TPtr8 ptr(reinterpret_cast<TUint8*>(const_cast<TUint16*>(iFileName->Des().Ptr())), iBytesRead,iFixedHeader.iFileNameLength * KCharWidthInBytes);
   468 				
   497 				
   469 				if (ReadFromBufferV(ptr, iFixedHeader.iFileNameLength * KCharWidthInBytes, current, end) == EFalse)
   498 				if (ReadFromBufferV(ptr, iFixedHeader.iFileNameLength * KCharWidthInBytes, current, end) == EFalse)
   470 					{
   499 					{
   471 					iBytesRead = ptr.Size();
   500 					iBytesRead = ptr.Size();
   472 					__LOG1("CPackageDataTransfer::SupplyFileDataL() - ReadFromBufferV() returned False - Filename bytes read: %d", iBytesRead);
   501 					OstTrace1(TRACE_NORMAL, DUP6_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "ReadFromBufferV() returned False - Filename bytes read: %d", iBytesRead);
   473 					break;
   502 					break;
   474 					} // if
   503 					} // if
   475 				
   504 				
   476 				if (iFixedHeader.iFileNameLength > KMaxFileName)
   505 				if (iFixedHeader.iFileNameLength > KMaxFileName)
   477 					{
   506 					{
   478 					__LOG("CBufferFileReader::SupplyFileDataL() - Leave with KErrOverflow");
   507 				    OstTrace0(TRACE_ERROR, DUP7_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "Leave with KErrOverflow");
   479 					User::Leave(KErrOverflow);
   508 					User::Leave(KErrOverflow);
   480 					}
   509 					}
   481 				
   510 				
   482 				iFileName->Des().SetLength(iFixedHeader.iFileNameLength);
   511 				iFileName->Des().SetLength(iFixedHeader.iFileNameLength);
   483 				iFileNameRead = ETrue;
   512 				iFileNameRead = ETrue;
   484 				
   513 				
   485 				__LOG1("CPackageDataTransfer::SupplyFileDataL() - FileName: %S", iFileName);
   514 				OstTraceExt1(TRACE_NORMAL, DUP8_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "FileName: %S", *iFileName);
   486 				}
   515 				}
   487 				
   516 				
   488 				if (!iFileOpen)
   517 				if (!iFileOpen)
   489 					{
   518 					{
   490 					TFileName tempPath;
   519 					TFileName tempPath;
   504 						iTempFileName = tempFile.AllocL();
   533 						iTempFileName = tempFile.AllocL();
   505 						}
   534 						}
   506 					
   535 					
   507 					if (tempErr != KErrNone)
   536 					if (tempErr != KErrNone)
   508 						{
   537 						{
   509 						__LOG2("CPackageDataTransfer::SupplyFileDataL() - Left creating temp file in: %S , with %d", &tempPath, tempErr);
   538 					    OstTraceExt2(TRACE_ERROR, DUP9_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "Leave while creating temp file in: %S , with %d", tempPath, tempErr);
   510 						User::Leave(tempErr);
   539 						User::Leave(tempErr);
   511 						}
   540 						}
   512 					
   541 					
   513 					
   542 					
   514 					iFileOpen = ETrue;
   543 					iFileOpen = ETrue;
   515 					}
   544 					}
   516 				
   545 				
   517 			// Write to the file
   546 			// Write to the file
       
   547 			TInt err;
   518 			TInt filesize;
   548 			TInt filesize;
   519 			iFileHandle.Size(filesize);
   549 			iFileHandle.Size(filesize);
   520 			
   550 			
   521 			if ((end - current) >= (iFixedHeader.iFileSize - filesize))
   551 			if ((end - current) >= (iFixedHeader.iFileSize - filesize))
   522 				{
   552 				{
   523 				TPtr8 ptr(current, iFixedHeader.iFileSize - filesize, iFixedHeader.iFileSize - filesize);
   553 				TPtr8 ptr(current, iFixedHeader.iFileSize - filesize, iFixedHeader.iFileSize - filesize);
   524 				User::LeaveIfError(iFileHandle.Write(ptr));
   554 				err = iFileHandle.Write(ptr);
       
   555 				LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP13_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "error = %d", err));
   525 				
   556 				
   526 				// Write the attributes & modified time
   557 				// Write the attributes & modified time
   527 				User::LeaveIfError(iFileHandle.Set(iFixedHeader.iModified, iFixedHeader.iAttributes, KEntryAttNormal));
   558 				err = iFileHandle.Set(iFixedHeader.iModified, iFixedHeader.iAttributes, KEntryAttNormal);
       
   559 				LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP14_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "error = %d", err));
   528 				
   560 				
   529 				TInt err = KErrNone;
   561 				TInt err = KErrNone;
   530 				if (((*iFileName).FindC(KPrimaryBackupRegistrationFile) >= 0) ||
   562 				if (((*iFileName).FindC(KPrimaryBackupRegistrationFile) >= 0) ||
   531 					((*iFileName).MatchC(KSys) >= 0) ||
   563 					((*iFileName).MatchC(KSys) >= 0) ||
   532 					((*iFileName).MatchC(KResource) >= 0) ||
   564 					((*iFileName).MatchC(KResource) >= 0) ||
   533   					((*iFileName).MatchC(KImport) >= 0) )
   565   					((*iFileName).MatchC(KImport) >= 0) )
   534 					{
   566 					{
   535 					__LOG("CPackageDataTransfer::SupplyFileDataL() - about to call RestoreFileL()");		
   567 				    OstTrace0(TRACE_NORMAL, DUP10_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "about to call RestoreFileL()");		
   536 					TRAP(err, iSWIRestore.RestoreFileL(iFileHandle, *iFileName));
   568 					TRAP(err, iSWIRestore.RestoreFileL(iFileHandle, *iFileName));
   537 					__LOG1("CPackageDataTransfer::SupplyFileDataL() - RestoreFileL() - err :%d", err);		
   569 					OstTrace1(TRACE_NORMAL, DUP11_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "RestoreFileL() - err :%d", err);		
   538 					}
   570 					}
   539 				else if ((*iFileName).MatchC(KPrivateMatch) >= 0)
   571 				else if ((*iFileName).MatchC(KPrivateMatch) >= 0)
   540 					{
   572 					{
   541 					User::LeaveIfError(iFs.MkDirAll((*iFileName)));
   573 				    err = iFs.MkDirAll((*iFileName));
   542 					User::LeaveIfError(iFileHandle.Rename((*iFileName)));
   574 					LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP15_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "error = %d", err));
       
   575 					err = iFileHandle.Rename((*iFileName));
       
   576 					LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP16_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "error = %d", err));
   543 					}
   577 					}
   544 				
   578 				
   545 								
   579 								
   546 				// Finished reset state
   580 				// Finished reset state
   547 				iFileHandle.Close();
   581 				iFileHandle.Close();
   564 				}
   598 				}
   565 			else
   599 			else
   566 				{	
   600 				{	
   567 				TInt fsize = end - current;
   601 				TInt fsize = end - current;
   568 				TPtr8 ptr(current, fsize, fsize);
   602 				TPtr8 ptr(current, fsize, fsize);
   569 				User::LeaveIfError(iFileHandle.Write(ptr));
   603 				err = iFileHandle.Write(ptr);
       
   604 				LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP17_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "error = %d", err));
   570 				break;
   605 				break;
   571 				}
   606 				}
   572 			} // while
   607 			} // while
   573 			
   608 			
   574 		if (aLastSection && iFileOpen)
   609 		if (aLastSection && iFileOpen)
   575 			{
   610 			{
       
   611 		    OstTrace0(TRACE_ERROR, DUP12_CPACKAGEDATATRANSFER_SUPPLYFILEDATAL, "Leave with KErrUnderflow");
   576 			User::Leave(KErrUnderflow);
   612 			User::Leave(KErrUnderflow);
   577 			} // if
   613 			} // if
   578 		__LOG("CPackageDataTransfer::SupplyFileDataL() - END");
   614 		
       
   615 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_SUPPLYFILEDATAL_EXIT );
   579 		} // SupplyFileDataL
   616 		} // SupplyFileDataL
   580 			
   617 			
   581 	void CPackageDataTransfer::SupplyDataL(TDriveNumber aDriveNumber, 
   618 	void CPackageDataTransfer::SupplyDataL(TDriveNumber aDriveNumber, 
   582     									   TPackageDataType aTransferType, 
   619     									   TPackageDataType aTransferType, 
   583     									   TDesC8& aBuffer,
   620     									   TDesC8& aBuffer,
   588 		@param aTransferType the type of data you require
   625 		@param aTransferType the type of data you require
   589 		@param aBuffer the buffer to write the data
   626 		@param aBuffer the buffer to write the data
   590 		@param aLastSection is this the last section
   627 		@param aLastSection is this the last section
   591 		*/
   628 		*/
   592 		{
   629 		{
   593 		__LOG5("CPackageDataTransfer::SupplyDataL() - START - aDrive: %c, aTransferType: %d, iSecureId: 0x%08x, iState.iState: %d, iState.iTransferType: %d", aDriveNumber + 'A', aTransferType, iPackageID.iUid, iState.iState, iState.iTransferType);
   630 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_SUPPLYDATAL_ENTRY );
       
   631 		OstTraceExt5(TRACE_NORMAL, CPACKAGEDATATRANSFER_SUPPLYDATAL, "aDrive: %c, aTransferType: %d, iSecureId: 0x%08x, iState.iState: %d, iState.iTransferType: %d", aDriveNumber + 'A', aTransferType, iPackageID.iUid, iState.iState, iState.iTransferType);
   594 	
   632 	
   595 		if (!iRestored)
   633 		if (!iRestored)
   596 			{
   634 			{
   597 			TInt err = KErrNone;
   635 			TInt err = KErrNone;
   598 			if (!((iState.iState == ENone) ||
   636 			if (!((iState.iState == ENone) ||
   599 			     ((iState.iState == ESupply || iState.iState == EBuffer) && (iState.iDriveNumber == aDriveNumber) && 
   637 			     ((iState.iState == ESupply || iState.iState == EBuffer) && (iState.iDriveNumber == aDriveNumber) && 
   600 			      (iState.iTransferType == aTransferType))))
   638 			      (iState.iTransferType == aTransferType))))
   601 				{
   639 				{
   602 				__LOG("CPackageDataTransfer::SupplyDataL() - bad state => ERROR => KErrNotReady");
   640 			    OstTrace0(TRACE_ERROR, DUP1_CPACKAGEDATATRANSFER_SUPPLYDATAL, "bad state => ERROR => KErrNotReady");
   603 				User::Leave(KErrNotReady);			
   641 				User::Leave(KErrNotReady);			
   604 				}
   642 				}
   605 				
   643 				
   606 			// Set the state?
   644 			// Set the state?
   607 			if (iState.iState == ENone)
   645 			if (iState.iState == ENone)
   633 				iState.iState = ENone;
   671 				iState.iState = ENone;
   634 				if (err != KErrAlreadyExists)
   672 				if (err != KErrAlreadyExists)
   635 					{
   673 					{
   636 					Cleanup();
   674 					Cleanup();
   637 					iSWIRestore.Close();
   675 					iSWIRestore.Close();
   638 					User::LeaveIfError(iSWIRestore.Connect());
   676 					TInt err1 = iSWIRestore.Connect();
   639 					}
   677 					LEAVEIFERROR(err1, OstTrace1(TRACE_ERROR, DUP3_CPACKAGEDATATRANSFER_SUPPLYDATAL, "error = %d", err1));
   640 				__LOG1("CPackageDataTransfer::SupplyDataL() - Left with error: %d", err);
   678 					}
       
   679 				OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_SUPPLYDATAL, "Left with error: %d", err);
   641 				User::Leave(err);
   680 				User::Leave(err);
   642 				} //else
   681 				} //else
   643 			}
   682 			}
   644 		
   683 		
   645 		__LOG("CPackageDataTransfer::SupplyDataL() - END");
   684 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_SUPPLYDATAL_EXIT );
   646 		
       
   647 		}
   685 		}
   648 
   686 
   649     void CPackageDataTransfer::DoSupplyDataL(TDriveNumber /*aDriveNumber*/, const TDesC8& aBuffer, TBool aLastSection)
   687     void CPackageDataTransfer::DoSupplyDataL(TDriveNumber /*aDriveNumber*/, const TDesC8& aBuffer, TBool aLastSection)
   650 	/** Handles the actual supply of package data
   688 	/** Handles the actual supply of package data
   651 	
   689 	
   652 	@param aDriveNumber not used.
   690 	@param aDriveNumber not used.
   653 	@param aBuffer the data that was supplied
   691 	@param aBuffer the data that was supplied
   654 	@param aLastSection was this the last section of data
   692 	@param aLastSection was this the last section of data
   655 	*/
   693 	*/
   656     	{
   694     	{
   657     	__LOG3("CPackageDataTransfer::DoSupplyDataL() - START - aBuffer length: %d, aLastSection: %d, iState: %d", aBuffer.Length(), aLastSection, iState.iState);
   695     	OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_DOSUPPLYDATAL_ENTRY );
   658         //__LOGDATA("CPackageDataTransfer::DoSupplyDataL() -       %S", aBuffer.Ptr(), Min( aBuffer.Length(), 1024 ));
   696     	OstTraceExt3(TRACE_NORMAL, CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "aBuffer length: %d, aLastSection: %d, iState: %d", aBuffer.Length(), aLastSection, iState.iState);        
   659 
   697 
   660 		TInt currentPos = 0;
   698 		TInt currentPos = 0;
   661         const TInt sourceBufferLength = aBuffer.Length();
   699         const TInt sourceBufferLength = aBuffer.Length();
   662 
   700 
   663         if  ( iState.iState != ESupply )
   701         if  ( iState.iState != ESupply )
   664             {
   702             {
   665 		    if (iState.iState == ENone )
   703 		    if (iState.iState == ENone )
   666 			    {
   704 			    {
   667 			    __LOG("CPackageDataTransfer::DoSupplyDataL() - iState == ENone - set up for initial meta data read...");
   705 		        OstTrace0(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "iState == ENone - set up for initial meta data read...");
   668 
   706 
   669                 // Retrieve metadata and file list from the buffer
   707                 // Retrieve metadata and file list from the buffer
   670 			    ReadData(&iMetaDataSize, aBuffer, sizeof(TInt));
   708 			    ReadData(&iMetaDataSize, aBuffer, sizeof(TInt));
   671 			    __LOG1("CPackageDataTransfer::DoSupplyDataL() - meta data size: %d", iMetaDataSize);
   709 			    OstTrace1(TRACE_NORMAL, DUP2_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "meta data size: %d", iMetaDataSize);
   672 			    currentPos += sizeof(TInt);
   710 			    currentPos += sizeof(TInt);
   673 			    
   711 			    
   674 			    if (iMetaDataSize >= (KMaxTInt/2) || iMetaDataSize < 0)
   712 			    if (iMetaDataSize >= (KMaxTInt/2) || iMetaDataSize < 0)
   675 				    {
   713 				    {
   676 				    __LOG("CPackageDataTransfer::DoSupplyDataL() - size read is too big");
   714 			        OstTrace0(TRACE_ERROR, DUP3_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "size read is too big");
   677 				    User::Leave(KErrCorrupt);
   715 				    User::Leave(KErrCorrupt);
   678 				    }
   716 				    }
   679 			    
   717 			    
   680 			    __LOG1("CPackageDataTransfer::DoSupplyDataL() - creating meta data buffer of length: %d bytes", iMetaDataSize);
   718 			    OstTrace1(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "creating meta data buffer of length: %d bytes", iMetaDataSize);
   681 			    HBufC8* metaDataBuffer = HBufC8::NewL(iMetaDataSize);
   719 			    HBufC8* metaDataBuffer = HBufC8::NewL(iMetaDataSize);
   682                 delete iMetaData;
   720                 delete iMetaData;
   683 			    iMetaData = metaDataBuffer;
   721 			    iMetaData = metaDataBuffer;
   684                 TPtr8 data(iMetaData->Des());
   722                 TPtr8 data(iMetaData->Des());
   685 
   723 
   686                 if (iMetaDataSize > sourceBufferLength )
   724                 if (iMetaDataSize > sourceBufferLength )
   687 				    {
   725 				    {
   688 				    __LOG("CPackageDataTransfer::DoSupplyDataL() - not enough source data to obtain entire meta data in one pass...");
   726                     OstTrace0(TRACE_NORMAL, DUP5_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "not enough source data to obtain entire meta data in one pass...");
   689 
   727 
   690                     if (aLastSection)
   728                     if (aLastSection)
   691 					    {
   729 					    {
   692 					    __LOG("CPackageDataTransfer::DoSupplyDataL() - Underflow1");
   730                         OstTrace0(TRACE_ERROR, DUP6_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "Underflow1");
   693 					    User::Leave(KErrUnderflow);
   731 					    User::Leave(KErrUnderflow);
   694 					    }
   732 					    }
   695                     else
   733                     else
   696                         {
   734                         {
   697                         data.Append(aBuffer.Mid(currentPos));
   735                         data.Append(aBuffer.Mid(currentPos));
   698 				        iState.iState = EBuffer;
   736 				        iState.iState = EBuffer;
   699 				        __LOG2("CPackageDataTransfer::DoSupplyDataL() - got %d bytes of meta data (%d bytes remaining) => changing state to EBuffer", data.Length(), iMetaDataSize - data.Length() );
   737 				        OstTraceExt2(TRACE_NORMAL, DUP7_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "got %d bytes of meta data (%d bytes remaining) => changing state to EBuffer", data.Length(), iMetaDataSize - data.Length() );
   700                         }
   738                         }
   701 				    }
   739 				    }
   702 			    else
   740 			    else
   703 				    {
   741 				    {
   704 				    __LOG("CPackageDataTransfer::DoSupplyDataL() - able to read entire meta data buffer in a single pass... ");
   742 			        OstTrace0(TRACE_NORMAL, DUP8_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "able to read entire meta data buffer in a single pass... ");
   705 				    data.Append(aBuffer.Mid(currentPos, iMetaDataSize));
   743 				    data.Append(aBuffer.Mid(currentPos, iMetaDataSize));
   706 				    currentPos += iMetaDataSize;
   744 				    currentPos += iMetaDataSize;
   707 				    }
   745 				    }
   708 			    }
   746 			    }
   709 		    else if (iState.iState == EBuffer)
   747 		    else if (iState.iState == EBuffer)
   710 			    {
   748 			    {
   711 			    __LOG1("CPackageDataTransfer::DoSupplyDataL() - iState == EBuffer, iMetaData length: %d", iMetaData->Length());
   749 		        OstTrace1(TRACE_NORMAL, DUP9_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "iState == EBuffer, iMetaData length: %d", iMetaData->Length());
   712 			    TPtr8 ptr( iMetaData->Des() );
   750 			    TPtr8 ptr( iMetaData->Des() );
   713 			    const TInt leftToRead = iMetaDataSize - ptr.Length();
   751 			    const TInt leftToRead = iMetaDataSize - ptr.Length();
   714                 __LOG1("CPackageDataTransfer::DoSupplyDataL() - meta data buffer left to read: %d", leftToRead);
   752 			    OstTrace1(TRACE_NORMAL, DUP10_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "meta data buffer left to read: %d", leftToRead);
   715 
   753 
   716                 if (sourceBufferLength < leftToRead)
   754                 if (sourceBufferLength < leftToRead)
   717 				    {
   755 				    {
   718 				    __LOG("CPackageDataTransfer::DoSupplyDataL() - not enough source data to obtain remaining required meta data in this pass...");
   756                     OstTrace0(TRACE_NORMAL, DUP11_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "not enough source data to obtain remaining required meta data in this pass...");
   719 
   757 
   720                     if (aLastSection)
   758                     if (aLastSection)
   721 					    {
   759 					    {
   722 					    __LOG("CPackageDataTransfer::DoSupplyDataL() - Underflow2");
   760                         OstTrace0(TRACE_ERROR, DUP12_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "Underflow2");
   723 					    User::Leave(KErrUnderflow);
   761 					    User::Leave(KErrUnderflow);
   724 					    }
   762 					    }
   725 					    
   763 					    
   726 				    ptr.Append(aBuffer);
   764 				    ptr.Append(aBuffer);
   727 				    __LOG1("CPackageDataTransfer::DoSupplyDataL() - meta data buffered again: %d", ptr.Length());
   765 				    OstTrace1(TRACE_NORMAL, DUP13_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "meta data buffered again: %d", ptr.Length());
   728 				    iState.iState = EBuffer;
   766 				    iState.iState = EBuffer;
       
   767 				    OstTraceFunctionExit0( CPACKAGEDATATRANSFER_DOSUPPLYDATAL_EXIT );
   729 				    return;
   768 				    return;
   730 				    }
   769 				    }
   731 			    else
   770 			    else
   732 				    {
   771 				    {
   733 				    __LOG("CPackageDataTransfer::DoSupplyDataL() - able to complete meta data read in this pass...");
   772 			        OstTrace0(TRACE_NORMAL, DUP14_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "able to complete meta data read in this pass...");
   734                     ptr.Append( aBuffer.Left(leftToRead) );
   773                     ptr.Append( aBuffer.Left(leftToRead) );
   735                     __LOG1("CPackageDataTransfer::DoSupplyDataL() - meta data finished buffering, meta data size is now: %d", ptr.Length());
   774                     OstTrace1(TRACE_NORMAL, DUP15_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "meta data finished buffering, meta data size is now: %d", ptr.Length());
   736 				    currentPos += leftToRead;
   775 				    currentPos += leftToRead;
   737 				    }
   776 				    }
   738 			    }
   777 			    }
   739 		    
   778 		    
   740             const TBool metaDataComplete = ( iMetaData->Length() == iMetaDataSize );
   779             const TBool metaDataComplete = ( iMetaData->Length() == iMetaDataSize );
   741     	    __LOG4("CPackageDataTransfer::DoSupplyDataL() - meta data complete?: %d ( %d bytes remaining out of total: %d with current length of: %d)", metaDataComplete, iMetaDataSize - iMetaData->Length(), iMetaDataSize, iMetaData->Length() );
   780             OstTraceExt4(TRACE_NORMAL, DUP16_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "meta data complete?: %d ( %d bytes remaining out of total: %d with current length of: %d)", metaDataComplete, iMetaDataSize - iMetaData->Length(), iMetaDataSize, iMetaData->Length() );
   742 
   781 
   743             if  ( metaDataComplete )
   782             if  ( metaDataComplete )
   744                 {
   783                 {
   745     	        __LOG("CPackageDataTransfer::DoSupplyDataL() - Asking SWI to start a package...");
   784                 OstTrace0(TRACE_NORMAL, DUP17_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "Asking SWI to start a package...");
   746 		        iState.iState = ESupply;
   785 		        iState.iState = ESupply;
   747 		        iSWIRestore.StartPackageL(iPackageID, *iMetaData);
   786 		        iSWIRestore.StartPackageL(iPackageID, *iMetaData);
   748 		        __LOG("CPackageDataTransfer::DoSupplyDataL() - SWI StartPackageL() completed OK");
   787 		        OstTrace0(TRACE_NORMAL, DUP18_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "SWI StartPackageL() completed OK");
   749                 }
   788                 }
   750             }
   789             }
   751 		
   790 		
   752         if  ( iState.iState == ESupply )
   791         if  ( iState.iState == ESupply )
   753             {
   792             {
   754 			__LOG1("CPackageDataTransfer::DoSupplyDataL() - iState == ESupply, currentPos: %d", currentPos);
   793             OstTrace1(TRACE_NORMAL, DUP19_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "iState == ESupply, currentPos: %d", currentPos);
   755 
   794 
   756             // Now restore each file and commit the changes 
   795             // Now restore each file and commit the changes 
   757             const TPtrC8 ptr( aBuffer.Mid( currentPos ) );
   796             const TPtrC8 ptr( aBuffer.Mid( currentPos ) );            
   758             //__LOGDATA("CPackageDataTransfer::DoSupplyDataL() - for supplyFileData   %S", ptr.Ptr(), Min( ptr.Length(), 1024 ));
       
   759 		    
   797 		    
   760 		    SupplyFileDataL(ptr, aLastSection);
   798 		    SupplyFileDataL(ptr, aLastSection);
   761 		    __LOG("CPackageDataTransfer::DoSupplyDataL() - SupplyFileDataL() completed OK");
   799 		    OstTrace0(TRACE_NORMAL, DUP20_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "SupplyFileDataL() completed OK");
   762 		    
   800 		    
   763 		    if (aLastSection)
   801 		    if (aLastSection)
   764 			    {
   802 			    {
   765 			    __LOG("CPackageDataTransfer::DoSupplyDataL() - aLastSection - asking SWI to commit package...");
   803 		        OstTrace0(TRACE_NORMAL, DUP21_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "aLastSection - asking SWI to commit package...");
   766 			    // now we can finalise the restore
   804 			    // now we can finalise the restore
   767 			    iSWIRestore.CommitPackageL();
   805 			    iSWIRestore.CommitPackageL();
   768 			    __LOG("CPackageDataTransfer::DoSupplyDataL() - Package commited OK");
   806 			    OstTrace0(TRACE_NORMAL, DUP22_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "Package commited OK");
   769 			    iRestored = ETrue;
   807 			    iRestored = ETrue;
   770 			    iState.iState = ENone;
   808 			    iState.iState = ENone;
   771 			    
   809 			    
   772 			    Cleanup();
   810 			    Cleanup();
   773 			    iSWIRestore.Close();
   811 			    iSWIRestore.Close();
   774 			    User::LeaveIfError(iSWIRestore.Connect());
   812 			    TInt err = iSWIRestore.Connect();
       
   813 			    LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP23_CPACKAGEDATATRANSFER_DOSUPPLYDATAL, "error = %d", err));
   775 			    }
   814 			    }
   776             }
   815             }
   777 
   816 
   778 		__LOG("CPackageDataTransfer::DoSupplyDataL() - END");
   817     	OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_DOSUPPLYDATAL_EXIT );
   779     	} // SupplyDataL
   818     	} // SupplyDataL
   780 		
   819 		
   781 	void CPackageDataTransfer::SupplySnapshotL(TDriveNumber aDriveNumber, const TDesC8& aBuffer, TBool aLastSection)
   820 	void CPackageDataTransfer::SupplySnapshotL(TDriveNumber aDriveNumber, const TDesC8& aBuffer, TBool aLastSection)
   782 	/** Handles the actual supply of snapshot data
   821 	/** Handles the actual supply of snapshot data
   783 	
   822 	
   784 	@param aDriveNumber the drive the snapshot is for
   823 	@param aDriveNumber the drive the snapshot is for
   785 	@param aBuffer the data that was supplied
   824 	@param aBuffer the data that was supplied
   786 	@param aLastSection was this the last section of data
   825 	@param aLastSection was this the last section of data
   787 	*/
   826 	*/
   788 		{
   827 		{
   789 		__LOG("CPackageDataTransfer::SupplySnapshotL() - START");
   828 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_SUPPLYSNAPSHOTL_ENTRY );
       
   829 		
   790 		TInt err = KErrNone;
   830 		TInt err = KErrNone;
   791 		if (iBufferSnapshotReader == NULL)
   831 		if (iBufferSnapshotReader == NULL)
   792 			{
   832 			{
   793 			CSnapshotHolder* snapshot = CSnapshotHolder::NewL();
   833 			CSnapshotHolder* snapshot = CSnapshotHolder::NewL();
   794 			delete iSnapshot;
   834 			delete iSnapshot;
   806 		if ((err != KErrNone) || aLastSection)
   846 		if ((err != KErrNone) || aLastSection)
   807 			{
   847 			{
   808 			delete iBufferSnapshotReader;
   848 			delete iBufferSnapshotReader;
   809 			iBufferSnapshotReader = NULL;
   849 			iBufferSnapshotReader = NULL;
   810 			
   850 			
   811 			User::LeaveIfError(err);
   851 			LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_SUPPLYSNAPSHOTL, "error = %d", err));
   812 			} // if
   852 			} // if
   813 		__LOG("CPackageDataTransfer::SupplySnapshotL() - END");
   853 		
       
   854 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_SUPPLYSNAPSHOTL_EXIT );
   814 		}
   855 		}
   815 	    
   856 	    
   816     void CPackageDataTransfer::DoRequestDataL(TDriveNumber aDriveNumber, TPtr8& aBuffer, TBool& aLastSection)
   857     void CPackageDataTransfer::DoRequestDataL(TDriveNumber aDriveNumber, TPtr8& aBuffer, TBool& aLastSection)
   817 	/** Handles the actual request for package data
   858 	/** Handles the actual request for package data
   818 	
   859 	
   821 	@param aLastSection has all the data been supplied. If all data is not
   862 	@param aLastSection has all the data been supplied. If all data is not
   822 		   supplied a further calls to the function will return the extra
   863 		   supplied a further calls to the function will return the extra
   823 		   data.
   864 		   data.
   824 	*/
   865 	*/
   825     	{
   866     	{
   826     	__LOG3("CPackageDataTransfer::DoRequestDataL() - START - iState: %d, iMetaData length: %d, iMetaDataSize: %d", iState.iState, iMetaData->Length(), iMetaDataSize);
   867     	OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_DOREQUESTDATAL_ENTRY );
       
   868     	OstTraceExt3(TRACE_NORMAL, CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState: %d, iMetaData length: %d, iMetaDataSize: %d", iState.iState, iMetaData->Length(), iMetaDataSize);
   827 	
   869 	
   828         if (iState.iState == ENone || iState.iState == EBuffer)
   870         if (iState.iState == ENone || iState.iState == EBuffer)
   829 			{
   871 			{
   830 			if (!IsDataOnDrive(aDriveNumber))
   872 			if (!IsDataOnDrive(aDriveNumber))
   831 				{
   873 				{
   832 				aLastSection = ETrue;
   874 				aLastSection = ETrue;
   833     	        __LOG("CPackageDataTransfer::DoRequestDataL() - END - no data on drive");
   875 				OstTrace0(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "no data on drive");                
   834                 //__LOGDATA("CPackageDataTransfer::DoRequestDataL() -       %S", aBuffer.Ptr(), aBuffer.Length());
   876 				OstTraceFunctionExit0( CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   835 				return;
   877 				return;
   836 				}
   878 				}
   837 			
   879 			
   838 
   880 
   839             // Now write the meta data to the buffer. 
   881             // Now write the meta data to the buffer. 
   840 			const TInt KSizeOfTInt = sizeof(TInt);
   882 			const TInt KSizeOfTInt = sizeof(TInt);
   841 			const TInt availableBuffer = aBuffer.MaxSize() - aBuffer.Size();
   883 			const TInt availableBuffer = aBuffer.MaxSize() - aBuffer.Size();
   842 			__LOG1("CPackageDataTransfer::DoRequestDataL() - available Buffer %d", availableBuffer);
   884 			OstTrace1(TRACE_NORMAL, DUP2_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "available Buffer %d", availableBuffer);
   843 			
   885 			
   844 			if (iState.iState == ENone)
   886 			if (iState.iState == ENone)
   845 				{		
   887 				{		
   846 				if ((availableBuffer - KSizeOfTInt) >= iMetaDataSize)
   888 				if ((availableBuffer - KSizeOfTInt) >= iMetaDataSize)
   847 					{
   889 					{
   848 					__LOG("CPackageDataTransfer::DoRequestDataL() - iState = ENone - can write entire meta data in single pass...");
   890 				    OstTrace0(TRACE_NORMAL, DUP3_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = ENone - can write entire meta data in single pass...");
   849 
   891 
   850                     WriteData(&iMetaDataSize, aBuffer, KSizeOfTInt);
   892                     WriteData(&iMetaDataSize, aBuffer, KSizeOfTInt);
   851 					aBuffer.Append(*iMetaData);
   893 					aBuffer.Append(*iMetaData);
   852 
   894 
   853                     __LOG1("CPackageDataTransfer::DoRequestDataL() - iState = ENone - Written Meta Data, size %d", iMetaDataSize);
   895 					OstTrace1(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = ENone - Written Meta Data, size %d", iMetaDataSize);
   854 					}
   896 					}
   855 				else if (availableBuffer - KSizeOfTInt > 0)
   897 				else if (availableBuffer - KSizeOfTInt > 0)
   856 					{
   898 					{
   857 				    // can we write metasize and something else?
   899 				    // can we write metasize and something else?
   858 					__LOG("CPackageDataTransfer::DoRequestDataL() - iState = ENone - have room for some meta data (not all)...");
   900 				    OstTrace0(TRACE_NORMAL, DUP5_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = ENone - have room for some meta data (not all)...");
   859 
   901 
   860                     WriteData(&iMetaDataSize, aBuffer, KSizeOfTInt);
   902                     WriteData(&iMetaDataSize, aBuffer, KSizeOfTInt);
   861 					
   903 					
   862                     // Write as much meta data as we can (allowing for buffer size) in this pass.
   904                     // Write as much meta data as we can (allowing for buffer size) in this pass.
   863                     const TInt amountOfMetaDataToWrite = availableBuffer - KSizeOfTInt;
   905                     const TInt amountOfMetaDataToWrite = availableBuffer - KSizeOfTInt;
   866                     // need to get rid of KSizeOfTInt
   908                     // need to get rid of KSizeOfTInt
   867 					iMetaDataLeft = iMetaDataSize - amountOfMetaDataToWrite;
   909 					iMetaDataLeft = iMetaDataSize - amountOfMetaDataToWrite;
   868 					aLastSection = EFalse;
   910 					aLastSection = EFalse;
   869 					
   911 					
   870                     iState.iState = EBuffer;
   912                     iState.iState = EBuffer;
   871                     __LOG2("CPackageDataTransfer::DoRequestDataL() - END - iState = ENone - Written MetaData %d, left %d", amountOfMetaDataToWrite, iMetaDataLeft);
   913                     OstTraceExt2(TRACE_NORMAL, DUP6_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = ENone - Written MetaData %d, left %d", amountOfMetaDataToWrite, iMetaDataLeft);
       
   914 					OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   872 					return;
   915 					return;
   873 					}
   916 					}
   874 				else
   917 				else
   875 					{
   918 					{
   876 					__LOG("CPackageDataTransfer::DoRequestDataL() - END - iState = ENone - not enough space to write MetaData, Return for more");
   919 				    OstTrace0(TRACE_NORMAL, DUP7_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = ENone - not enough space to write MetaData, Return for more");
       
   920 					OstTraceFunctionExit0( DUP2_CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   877 					return;
   921 					return;
   878 					}
   922 					}
   879 				}// if
   923 				}// if
   880 			else if (iState.iState == EBuffer)
   924 			else if (iState.iState == EBuffer)
   881 				{
   925 				{
   882 				if (availableBuffer - iMetaDataLeft >= 0)
   926 				if (availableBuffer - iMetaDataLeft >= 0)
   883 					{
   927 					{
   884                     const TInt readPosition = iMetaDataSize - iMetaDataLeft;
   928                     const TInt readPosition = iMetaDataSize - iMetaDataLeft;
   885 					__LOG2("CPackageDataTransfer::DoRequestDataL() - iState = EBuffer - enough space for remaining meta data in this pass, size %d, readPos: %d", iMetaDataLeft, readPosition);
   929                     OstTraceExt2(TRACE_NORMAL, DUP8_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = EBuffer - enough space for remaining meta data in this pass, size %d, readPos: %d", iMetaDataLeft, readPosition);
   886 					aBuffer.Append(iMetaData->Mid(readPosition));
   930 					aBuffer.Append(iMetaData->Mid(readPosition));
   887 					}
   931 					}
   888 				else 
   932 				else 
   889 					{
   933 					{
   890 				    // continute buffer
   934 				    // continute buffer
   891 					const TInt readPosition = iMetaDataSize - iMetaDataLeft;
   935 					const TInt readPosition = iMetaDataSize - iMetaDataLeft;
   892                     __LOG2("CPackageDataTransfer::DoRequestDataL() - iState = EBuffer - Still buffering Meta Data, Left to write %d, readPos: %d", iMetaDataLeft, readPosition);
   936 					OstTraceExt2(TRACE_NORMAL, DUP9_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = EBuffer - Still buffering Meta Data, Left to write %d, readPos: %d", iMetaDataLeft, readPosition);
   893 
   937 
   894 					aBuffer.Append(iMetaData->Mid(readPosition, availableBuffer));
   938 					aBuffer.Append(iMetaData->Mid(readPosition, availableBuffer));
   895 					iMetaDataLeft -= availableBuffer;
   939 					iMetaDataLeft -= availableBuffer;
   896 					aLastSection = EFalse;
   940 					aLastSection = EFalse;
   897 
   941 
   898                     __LOG1("CPackageDataTransfer::DoRequestDataL() - iState = EBuffer - END - Still buffering Meta Data, Left to write %d", iMetaDataLeft);
   942 					OstTrace1(TRACE_NORMAL, DUP10_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState = EBuffer - END - Still buffering Meta Data, Left to write %d", iMetaDataLeft);
       
   943 					OstTraceFunctionExit0( DUP3_CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   899 					return;
   944 					return;
   900 					}
   945 					}
   901 				}
   946 				}
   902 			
   947 			
   903 			TUint count = iFiles.Count();			
   948 			TUint count = iFiles.Count();			
   904 			__LOG1("CPackageDataTransfer::DoRequestDataL() - No of fileNames: %d", count);
   949 			OstTrace1(TRACE_NORMAL, DUP11_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "No of fileNames: %d", count);
   905 			
   950 			
   906 			if (count == 0)
   951 			if (count == 0)
   907 				{
   952 				{
   908 				aLastSection = ETrue;
   953 				aLastSection = ETrue;
   909     	        __LOG("CPackageDataTransfer::DoRequestDataL() - END - no files");
   954 				OstTrace0(TRACE_NORMAL, DUP12_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "no files");
       
   955 				OstTraceFunctionExit0( DUP4_CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   910 				return;
   956 				return;
   911 				}
   957 				}
   912 			
   958 			
   913 			CDesCArray* files = new (ELeave) CDesCArrayFlat(KDesCArrayGranularity);
   959 			CDesCArray* files = new (ELeave) CDesCArrayFlat(KDesCArrayGranularity);
   914 			CleanupStack::PushL(files);
   960 			CleanupStack::PushL(files);
   916 				{
   962 				{
   917 				files->AppendL(*iFiles[i]);
   963 				files->AppendL(*iFiles[i]);
   918 				}
   964 				}
   919 			
   965 			
   920 			
   966 			
   921 			__LOG("CPackageDataTransfer::DoRequestDataL() - starting buffer file writer...");
   967 			OstTrace0(TRACE_NORMAL, DUP13_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "starting buffer file writer...");
   922 			CBufferFileWriter* bufferFileWriter = CBufferFileWriter::NewL(iFs, files);
   968 			CBufferFileWriter* bufferFileWriter = CBufferFileWriter::NewL(iFs, files);
   923    			delete iBufferFileWriter;  
   969    			delete iBufferFileWriter;  
   924    			iBufferFileWriter = bufferFileWriter;
   970    			iBufferFileWriter = bufferFileWriter;
   925 			
   971 			
   926 			iBufferFileWriter->StartL(aBuffer, aLastSection);
   972 			iBufferFileWriter->StartL(aBuffer, aLastSection);
   927 			iState.iState = ERequest;
   973 			iState.iState = ERequest;
   928 			__LOG("CPackageDataTransfer::DoRequestDataL() - iState is now ERequest");
   974 			OstTrace0(TRACE_NORMAL, DUP14_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "iState is now ERequest");
   929 			
   975 			
   930 			if (aLastSection)
   976 			if (aLastSection)
   931 				{
   977 				{
   932 				delete iBufferFileWriter;
   978 				delete iBufferFileWriter;
   933 				iBufferFileWriter = NULL;
   979 				iBufferFileWriter = NULL;
   936 
   982 
   937             CleanupStack::Pop(files);
   983             CleanupStack::Pop(files);
   938 			}
   984 			}
   939 		else if (iBufferFileWriter != NULL)
   985 		else if (iBufferFileWriter != NULL)
   940 			{
   986 			{
   941 			__LOG("CPackageDataTransfer::DoRequestDataL() - continuing buffer file writer from last time...");
   987 		    OstTrace0(TRACE_NORMAL, DUP15_CPACKAGEDATATRANSFER_DOREQUESTDATAL, "continuing buffer file writer from last time...");
   942 			iBufferFileWriter->ContinueL(aBuffer, aLastSection);
   988 			iBufferFileWriter->ContinueL(aBuffer, aLastSection);
   943 			if (aLastSection)
   989 			if (aLastSection)
   944 				{
   990 				{
   945 				delete iBufferFileWriter;
   991 				delete iBufferFileWriter;
   946 				iBufferFileWriter = NULL;
   992 				iBufferFileWriter = NULL;
   947 				iState.iState = ENone;
   993 				iState.iState = ENone;
   948 				}
   994 				}
   949 			}
   995 			}
   950 
   996 
   951         //__LOGDATA("CPackageDataTransfer::DoRequestDataL() -       %S", aBuffer.Ptr(), aBuffer.Length());
   997     	OstTraceFunctionExit0( DUP5_CPACKAGEDATATRANSFER_DOREQUESTDATAL_EXIT );
   952 		__LOG("CPackageDataTransfer::DoRequestDataL() - END");			
       
   953     	} // RequestDataL
   998     	} // RequestDataL
   954 		
   999 		
   955 	void CPackageDataTransfer::RequestSnapshotL(TDriveNumber aDriveNumber, TPtr8& aBuffer, TBool& aLastSection)
  1000 	void CPackageDataTransfer::RequestSnapshotL(TDriveNumber aDriveNumber, TPtr8& aBuffer, TBool& aLastSection)
   956 	/** Handles the request for snapshot data
  1001 	/** Handles the request for snapshot data
   957 	
  1002 	
   960 	@param aLastSection has all the data been supplied. If all data is not
  1005 	@param aLastSection has all the data been supplied. If all data is not
   961 		   supplied a further calls to the function will return the extra
  1006 		   supplied a further calls to the function will return the extra
   962 		   data.
  1007 		   data.
   963 	*/
  1008 	*/
   964 		{
  1009 		{
   965 		__LOG("CPackageDataTransfer::RequestSnapshotL() - START");
  1010 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_REQUESTSNAPSHOTL_ENTRY );
       
  1011 		
   966 		if (iBufferSnapshotWriter == NULL)
  1012 		if (iBufferSnapshotWriter == NULL)
   967 			{
  1013 			{
   968 			if (!IsDataOnDrive(aDriveNumber))
  1014 			if (!IsDataOnDrive(aDriveNumber))
   969 				{
  1015 				{
   970 				aLastSection = ETrue;
  1016 				aLastSection = ETrue;
       
  1017 				OstTraceFunctionExit0( CPACKAGEDATATRANSFER_REQUESTSNAPSHOTL_EXIT );
   971 				return;
  1018 				return;
   972 				}
  1019 				}
   973 			
  1020 			
   974 			TUint count = iFiles.Count();
  1021 			TUint count = iFiles.Count();
   975 			__LOG1("CPackageDataTransfer::RequestSnapshotL() - No of fileNames: %d", count);
  1022 			OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_REQUESTSNAPSHOTL, "No of fileNames: %d", count);
   976 			if (count > 0)
  1023 			if (count > 0)
   977 				{
  1024 				{
   978 				RSnapshots* snapshots = new(ELeave) RSnapshots();
  1025 				RSnapshots* snapshots = new(ELeave) RSnapshots();
   979 				TCleanupItem cleanup(CleanupRPointerArray, snapshots);
  1026 				TCleanupItem cleanup(CleanupRPointerArray, snapshots);
   980 				CleanupStack::PushL(cleanup);
  1027 				CleanupStack::PushL(cleanup);
  1019 		if (aLastSection)
  1066 		if (aLastSection)
  1020 			{
  1067 			{
  1021 			delete iBufferSnapshotWriter;
  1068 			delete iBufferSnapshotWriter;
  1022 			iBufferSnapshotWriter = NULL;
  1069 			iBufferSnapshotWriter = NULL;
  1023 			}
  1070 			}
  1024 		__LOG("CPackageDataTransfer::RequestSnapshotL() - END");
  1071 		OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_REQUESTSNAPSHOTL_EXIT );
  1025 		}
  1072 		}
  1026 		
  1073 		
  1027 	
  1074 	
  1028 	/** Cleanup of the internal data
  1075 	/** Cleanup of the internal data
  1029 	*/
  1076 	*/
  1030 	void CPackageDataTransfer::Cleanup()
  1077 	void CPackageDataTransfer::Cleanup()
  1031 		{
  1078 		{
       
  1079 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_CLEANUP_ENTRY );
  1032 		delete iBufferFileWriter;
  1080 		delete iBufferFileWriter;
  1033   		iBufferFileWriter = NULL;
  1081   		iBufferFileWriter = NULL;
  1034    		delete iBufferSnapshotReader;
  1082    		delete iBufferSnapshotReader;
  1035   		iBufferSnapshotReader = NULL;
  1083   		iBufferSnapshotReader = NULL;
  1036    		delete iBufferSnapshotWriter;
  1084    		delete iBufferSnapshotWriter;
  1037   		iBufferSnapshotWriter = NULL;
  1085   		iBufferSnapshotWriter = NULL;
  1038    		delete iSnapshot;
  1086    		delete iSnapshot;
  1039   		iSnapshot = NULL;
  1087   		iSnapshot = NULL;
  1040   		delete iMetaData;
  1088   		delete iMetaData;
  1041   		iMetaData = NULL;
  1089   		iMetaData = NULL;
       
  1090 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_CLEANUP_EXIT );
  1042 		}
  1091 		}
  1043 		
  1092 		
  1044 	/**
  1093 	/**
  1045 	Checks if there is any data on the specified drive
  1094 	Checks if there is any data on the specified drive
  1046 	
  1095 	
  1047 	@param aDrive the drive to check on
  1096 	@param aDrive the drive to check on
  1048 	@return ETrue if there is any data
  1097 	@return ETrue if there is any data
  1049 	*/
  1098 	*/
  1050 	TBool CPackageDataTransfer::IsDataOnDrive(TDriveNumber aDrive)
  1099 	TBool CPackageDataTransfer::IsDataOnDrive(TDriveNumber aDrive)
  1051 		{
  1100 		{
       
  1101 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ISDATAONDRIVE_ENTRY );
  1052 		if (!iDriveList[aDrive])
  1102 		if (!iDriveList[aDrive])
  1053 			{
  1103 			{
       
  1104 			OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ISDATAONDRIVE_EXIT );
  1054 			return EFalse;
  1105 			return EFalse;
  1055 			}
  1106 			}
  1056 		else
  1107 		else
  1057 			{
  1108 			{
       
  1109 			OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_ISDATAONDRIVE_EXIT );
  1058 			return ETrue;
  1110 			return ETrue;
  1059 			}
  1111 			}
  1060 		
  1112 		
  1061 		}
  1113 		}
  1062 		
  1114 		
  1066 	@pre CPackageDataTransfer::ParseFilesL() must have been called
  1118 	@pre CPackageDataTransfer::ParseFilesL() must have been called
  1067 	@return the common settings of the data owner
  1119 	@return the common settings of the data owner
  1068 	@leave KErrNotReady if CPackageDataTransfer::ParseFilesL() not called
  1120 	@leave KErrNotReady if CPackageDataTransfer::ParseFilesL() not called
  1069 	*/
  1121 	*/
  1070 		{
  1122 		{
       
  1123 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_COMMONSETTINGSL_ENTRY );
  1071 		TCommonBURSettings settings = ENoOptions;
  1124 		TCommonBURSettings settings = ENoOptions;
  1072 
  1125 
  1073 		__LOG1("CPackageDataTransfer::CommonSettingsL() - System Supported: %d", iSystemInformation.iSupported);
  1126 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_COMMONSETTINGSL, "System Supported: %d", iSystemInformation.iSupported);
  1074 		if (iSystemInformation.iSupported)
  1127 		if (iSystemInformation.iSupported)
  1075 			{
  1128 			{
  1076 			settings |= EHasSystemFiles;
  1129 			settings |= EHasSystemFiles;
  1077 			}		
  1130 			}		
  1078 
  1131 
       
  1132 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_COMMONSETTINGSL_EXIT );
  1079 		return settings;
  1133 		return settings;
  1080 		}
  1134 		}
  1081 
  1135 
  1082 	TPassiveBURSettings CPackageDataTransfer::PassiveSettingsL()
  1136 	TPassiveBURSettings CPackageDataTransfer::PassiveSettingsL()
  1083 	/** Get the passive settings of the data owner
  1137 	/** Get the passive settings of the data owner
  1085 	@pre CPackageDataTransfer::ParseFilesL() must have been called
  1139 	@pre CPackageDataTransfer::ParseFilesL() must have been called
  1086 	@return the passive settings of the data owner
  1140 	@return the passive settings of the data owner
  1087 	@leave KErrNotReady if CPackageDataTransfer::ParseFilesL() not called
  1141 	@leave KErrNotReady if CPackageDataTransfer::ParseFilesL() not called
  1088 	*/
  1142 	*/
  1089 		{
  1143 		{
  1090 		__LOG1("CPackageDataTransfer::CommonSettingsL() - Public Supported: %d", iPublicInformation.iSupported);
  1144 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_PASSIVESETTINGSL_ENTRY );
       
  1145 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_PASSIVESETTINGSL, "Public Supported: %d", iPublicInformation.iSupported);
  1091 		
  1146 		
  1092 		TPassiveBURSettings settings = ENoPassiveOptions;
  1147 		TPassiveBURSettings settings = ENoPassiveOptions;
  1093 		
  1148 		
  1094 		if (iPublicInformation.iSupported)
  1149 		if (iPublicInformation.iSupported)
  1095 			{
  1150 			{
  1096 			settings |= EHasPublicFiles;
  1151 			settings |= EHasPublicFiles;
  1097 			} // if
  1152 			} // if
  1098 			
  1153 			
  1099 			
  1154 			
       
  1155 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_PASSIVESETTINGSL_EXIT );
  1100 		return settings;
  1156 		return settings;
  1101 		}
  1157 		}
  1102 
  1158 
  1103 	TActiveBURSettings CPackageDataTransfer::ActiveSettingsL()
  1159 	TActiveBURSettings CPackageDataTransfer::ActiveSettingsL()
  1104 	/** Get the active settings of the data owner
  1160 	/** Get the active settings of the data owner
  1116 	/** Set the registration file for the package
  1172 	/** Set the registration file for the package
  1117 	@param aFileName path including filename of the registration file
  1173 	@param aFileName path including filename of the registration file
  1118 	*/
  1174 	*/
  1119 	void CPackageDataTransfer::SetRegistrationFileL(const TDesC& aFileName)
  1175 	void CPackageDataTransfer::SetRegistrationFileL(const TDesC& aFileName)
  1120 		{
  1176 		{
       
  1177 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_SETREGISTRATIONFILEL_ENTRY );
  1121 		delete iRegistrationFile;
  1178 		delete iRegistrationFile;
  1122 		iRegistrationFile = aFileName.AllocL();
  1179 		iRegistrationFile = aFileName.AllocL();
       
  1180 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_SETREGISTRATIONFILEL_EXIT );
  1123 		}
  1181 		}
  1124 		
  1182 		
  1125 	/** Parses the package registration file
  1183 	/** Parses the package registration file
  1126 	@pre CPackageDataTransfer::SetRegistrationFile() must have been called
  1184 	@pre CPackageDataTransfer::SetRegistrationFile() must have been called
  1127 	*/
  1185 	*/
  1128 	void CPackageDataTransfer::ParseL()
  1186 	void CPackageDataTransfer::ParseL()
  1129 		{
  1187 		{
       
  1188 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_PARSEL_ENTRY );
  1130 		if ((*iRegistrationFile).FindF(KPrimaryBackupRegistrationFile) == KErrNotFound)
  1189 		if ((*iRegistrationFile).FindF(KPrimaryBackupRegistrationFile) == KErrNotFound)
  1131 			{
  1190 			{
       
  1191 		    OstTrace0(TRACE_ERROR, CPACKAGEDATATRANSFER_PARSEL, "Leave: KErrNotReady");
  1132 			User::Leave(KErrNotReady);
  1192 			User::Leave(KErrNotReady);
  1133 			}
  1193 			}
  1134 			
  1194 			
  1135 		ipDataOwnerManager->ParserProxy().ParseL(*iRegistrationFile, *this);
  1195 		ipDataOwnerManager->ParserProxy().ParseL(*iRegistrationFile, *this);
       
  1196 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_PARSEL_EXIT );
  1136 		}
  1197 		}
  1137 		
  1198 		
  1138 		
  1199 		
  1139 	void CPackageDataTransfer::GetRawPublicFileListL(TDriveNumber aDriveNumber, 
  1200 	void CPackageDataTransfer::GetRawPublicFileListL(TDriveNumber aDriveNumber, 
  1140 										   RRestoreFileFilterArray& aRestoreFileFilter)
  1201 										   RRestoreFileFilterArray& aRestoreFileFilter)
  1142 	
  1203 	
  1143 	@param aDriveNumber the drive to return the list for
  1204 	@param aDriveNumber the drive to return the list for
  1144 	@param aRestoreFileFilter on return the file filter
  1205 	@param aRestoreFileFilter on return the file filter
  1145 	*/
  1206 	*/
  1146 		{
  1207 		{
       
  1208 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_GETRAWPUBLICFILELISTL_ENTRY );
  1147 		// Convert drive number to letter
  1209 		// Convert drive number to letter
  1148 		TChar drive;
  1210 		TChar drive;
  1149 		User::LeaveIfError(iFs.DriveToChar(aDriveNumber, drive));
  1211 		TInt err = iFs.DriveToChar(aDriveNumber, drive);
       
  1212 		LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_GETRAWPUBLICFILELISTL, "error = %d", err));
  1150 		
  1213 		
  1151 		const TInt count = iPublicSelections.Count();
  1214 		const TInt count = iPublicSelections.Count();
  1152 		for (TInt x = 0; x < count; x++)
  1215 		for (TInt x = 0; x < count; x++)
  1153 			{
  1216 			{
  1154 			CSelection* selection = iPublicSelections[x];
  1217 			CSelection* selection = iPublicSelections[x];
  1187 			if (add)
  1250 			if (add)
  1188 				{
  1251 				{
  1189 				aRestoreFileFilter.AppendL(TRestoreFileFilter(include, filename));
  1252 				aRestoreFileFilter.AppendL(TRestoreFileFilter(include, filename));
  1190 				} // if
  1253 				} // if
  1191 			} // for x
  1254 			} // for x
       
  1255 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_GETRAWPUBLICFILELISTL_EXIT );
  1192 		}
  1256 		}
  1193 		
  1257 		
  1194 	
  1258 	
  1195 	void CPackageDataTransfer::GetPublicFileListL(TDriveNumber aDriveNumber, RFileArray& aFiles)
  1259 	void CPackageDataTransfer::GetPublicFileListL(TDriveNumber aDriveNumber, RFileArray& aFiles)
  1196 	/** Gets the public file list
  1260 	/** Gets the public file list
  1198 	Gets the public file list for the given drive
  1262 	Gets the public file list for the given drive
  1199 	@param aDriveNumber the drive to retrieve the public files for
  1263 	@param aDriveNumber the drive to retrieve the public files for
  1200 	@param aFiles on return a list of public files
  1264 	@param aFiles on return a list of public files
  1201 	*/
  1265 	*/
  1202 		{
  1266 		{
       
  1267 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_GETPUBLICFILELISTL_ENTRY );
  1203 		_LIT(KDrive, "?:");
  1268 		_LIT(KDrive, "?:");
  1204 		_LIT(KDriveAndSlash, "?:\\");
  1269 		_LIT(KDriveAndSlash, "?:\\");
  1205 		_LIT( KExclamationAsDrive, "!"); // Used to generic drives for public data as in .SIS file package
  1270 		_LIT( KExclamationAsDrive, "!"); // Used to generic drives for public data as in .SIS file package
  1206 		
  1271 		
  1207 		// Split selections into include and exclude
  1272 		// Split selections into include and exclude
  1210 		RArray<TPtrC> exclude;
  1275 		RArray<TPtrC> exclude;
  1211 		CleanupClosePushL(exclude);
  1276 		CleanupClosePushL(exclude);
  1212 		TInt count = iPublicSelections.Count();
  1277 		TInt count = iPublicSelections.Count();
  1213 
  1278 
  1214         
  1279         
  1215         __LOG("CPackageDataTransfer::GetPublicFileListL() - file selection listing...:");
  1280 		OstTrace0(TRACE_NORMAL, CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "file selection listing...:");
  1216 		for (TInt x = 0; x < count; x++)
  1281 		for (TInt x = 0; x < count; x++)
  1217 			{
  1282 			{
  1218             const TDesC& selectionName = iPublicSelections[x]->SelectionName();
  1283             const TDesC& selectionName = iPublicSelections[x]->SelectionName();
  1219             __LOG3("CPackageDataTransfer::GetPublicFileListL() - selection[%03d]: %S, type: %d", x, &selectionName, iPublicSelections[x]->SelectionType());
  1284             OstTraceExt3(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "selection[%03d]: %S, type: %d", x, selectionName, iPublicSelections[x]->SelectionType());
  1220 			if (iPublicSelections[x]->SelectionType() == EInclude)
  1285 			if (iPublicSelections[x]->SelectionType() == EInclude)
  1221 				{
  1286 				{
  1222 				include.AppendL(selectionName);
  1287 				include.AppendL(selectionName);
  1223 				} // if
  1288 				} // if
  1224 			else
  1289 			else
  1227 				} // else
  1292 				} // else
  1228 			} // for x
  1293 			} // for x
  1229 			
  1294 			
  1230 		// Loop through all includes
  1295 		// Loop through all includes
  1231 		count = include.Count();
  1296 		count = include.Count();
  1232         __LOG("CPackageDataTransfer::GetPublicFileListL() - include listing...:");
  1297 		OstTrace0(TRACE_NORMAL, DUP2_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "include listing...:");
  1233 		for (TInt x = 0; x < count; x++)
  1298 		for (TInt x = 0; x < count; x++)
  1234 			{
  1299 			{
  1235 			TFileName fileName;
  1300 			TFileName fileName;
  1236 			TChar drive;
  1301 			TChar drive;
  1237 			User::LeaveIfError(iFs.DriveToChar(aDriveNumber, drive));
  1302 			TInt err = iFs.DriveToChar(aDriveNumber, drive);
       
  1303 			LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP13_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "error = %d", err));
  1238 
  1304 
  1239             const TPtrC includeEntry( include[x] );
  1305             const TPtrC includeEntry( include[x] );
  1240             __LOG2("CPackageDataTransfer::GetPublicFileListL() - entry[%03d] is: %S", x, &includeEntry);
  1306             OstTraceExt2(TRACE_NORMAL, DUP3_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "entry[%03d] is: %S", x, includeEntry);
  1241             
  1307             
  1242             // See if the drive is specified
  1308             // See if the drive is specified
  1243 			if (include[x][0] == KBackSlash()[0])
  1309 			if (include[x][0] == KBackSlash()[0])
  1244 				{
  1310 				{
  1245 				// Add the drive
  1311 				// Add the drive
  1269 					fileName.Copy(includeEntry);
  1335 					fileName.Copy(includeEntry);
  1270 					} // else
  1336 					} // else
  1271 				
  1337 				
  1272 				} // else
  1338 				} // else
  1273 
  1339 
  1274             __LOG2("CPackageDataTransfer::GetPublicFileListL() - entry[%03d] filename is therefore: %S", x, &fileName);
  1340 			OstTraceExt2(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "entry[%03d] filename is therefore: %S", x, fileName);
  1275 			if (fileName.Length() > 0)
  1341 			if (fileName.Length() > 0)
  1276 				{
  1342 				{
  1277 				
  1343 				
  1278 				// Check to see if fileName is just a drive(we cant get an entry)
  1344 				// Check to see if fileName is just a drive(we cant get an entry)
  1279 				TBool isDrive = EFalse;
  1345 				TBool isDrive = EFalse;
  1280 				if ((fileName.MatchF(KDrive) != KErrNotFound) ||
  1346 				if ((fileName.MatchF(KDrive) != KErrNotFound) ||
  1281 				    (fileName.MatchF(KDriveAndSlash) != KErrNotFound))
  1347 				    (fileName.MatchF(KDriveAndSlash) != KErrNotFound))
  1282 					{
  1348 					{
  1283 					isDrive = ETrue;
  1349 					isDrive = ETrue;
  1284                     __LOG("CPackageDataTransfer::GetPublicFileListL() - filename is a drive");
  1350 					OstTrace0(TRACE_NORMAL, DUP5_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "filename is a drive");
  1285 					} // if
  1351 					} // if
  1286 					
  1352 					
  1287 				TEntry entry;
  1353 				TEntry entry;
  1288 				TBool isEntry = EFalse;
  1354 				TBool isEntry = EFalse;
  1289 				if (!isDrive)
  1355 				if (!isDrive)
  1290 					{
  1356 					{
  1291 					TInt err = iFs.Entry(fileName, entry);
  1357 					TInt err = iFs.Entry(fileName, entry);
  1292                     __LOG1("CPackageDataTransfer::GetPublicFileListL() - get entry error: %d", err);
  1358 					OstTrace1(TRACE_NORMAL, DUP6_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "get entry error: %d", err);
  1293 					entry.iName = fileName;
  1359 					entry.iName = fileName;
  1294 					switch (err)
  1360 					switch (err)
  1295 						{
  1361 						{
  1296 					case KErrNone:
  1362 					case KErrNone:
  1297 						isEntry = ETrue;
  1363 						isEntry = ETrue;
  1299 					case KErrNotFound:
  1365 					case KErrNotFound:
  1300 					case KErrPathNotFound:
  1366 					case KErrPathNotFound:
  1301 					case KErrBadName:
  1367 					case KErrBadName:
  1302 						break;
  1368 						break;
  1303 					default:
  1369 					default:
       
  1370 					    OstTrace1(TRACE_ERROR, DUP12_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "Leave: %d", err);
  1304 						User::Leave(err);
  1371 						User::Leave(err);
  1305 						} // switch
  1372 						} // switch
  1306 					} // if
  1373 					} // if
  1307 					
  1374 					
  1308 				if (isDrive || (isEntry && entry.IsDir()))
  1375 				if (isDrive || (isEntry && entry.IsDir()))
  1309 					{
  1376 					{
  1310                     __LOG("CPackageDataTransfer::GetPublicFileListL() - parsing directory...");
  1377 				    OstTrace0(TRACE_NORMAL, DUP7_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "parsing directory...");
  1311 					ParseDirL(fileName, exclude, aFiles);
  1378 					ParseDirL(fileName, exclude, aFiles);
  1312 
  1379 
  1313 				#ifdef SBE_LOGGING_ENABLED
       
  1314 					const TInt fNameCount = aFiles.Count();
  1380 					const TInt fNameCount = aFiles.Count();
  1315                     if  (fNameCount)
  1381                     if  (fNameCount)
  1316                         {
  1382                         {
  1317                         for(TInt k=0; k<fNameCount; k++)
  1383                         for(TInt k=0; k<fNameCount; k++)
  1318                             {
  1384                             {
  1319                             const TDesC& fileName = aFiles[k].iName;
  1385                             const TDesC& fileName = aFiles[k].iName;
  1320                             __LOG2("CPackageDataTransfer::GetPublicFileListL() - directory entry[%03d] %S", k, &fileName);
  1386                             OstTraceExt2(TRACE_NORMAL, DUP8_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "directory entry[%03d] %S", k, fileName);
  1321                             }
  1387                             }
  1322                         }
  1388                         }
  1323 
  1389 
  1324                     __LOG("CPackageDataTransfer::GetPublicFileListL() - end of parsing directory");
  1390                     OstTrace0(TRACE_NORMAL, DUP9_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "end of parsing directory");
  1325 				#endif
       
  1326 					} // if
  1391 					} // if
  1327 				else
  1392 				else
  1328 					{
  1393 					{
  1329 					if (isEntry)
  1394 					if (isEntry)
  1330 						{
  1395 						{
  1331                         const TBool isExcluded = IsExcluded(ETrue, fileName, exclude);
  1396                         const TBool isExcluded = IsExcluded(ETrue, fileName, exclude);
  1332 						if (!isExcluded)
  1397 						if (!isExcluded)
  1333 							{
  1398 							{
  1334 						    __LOG1("CPackageDataTransfer::GetPublicFileListL() - adding fully verified file: %S", &fileName);
  1399 						    OstTraceExt1(TRACE_NORMAL, DUP10_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "adding fully verified file: %S", fileName);
  1335 							// Add to list of files
  1400 							// Add to list of files
  1336 							aFiles.AppendL(entry);
  1401 							aFiles.AppendL(entry);
  1337 							} // if
  1402 							} // if
  1338                         else
  1403                         else
  1339                             {
  1404                             {
  1340                             __LOG("CPackageDataTransfer::GetPublicFileListL() - file is excluded!");
  1405                             OstTrace0(TRACE_NORMAL, DUP11_CPACKAGEDATATRANSFER_GETPUBLICFILELISTL, "file is excluded!");
  1341                             }
  1406                             }
  1342 						} // if
  1407 						} // if
  1343 					} // else
  1408 					} // else
  1344 				} // if
  1409 				} // if
  1345 			} // for x
  1410 			} // for x
  1346 			
  1411 			
  1347 		CleanupStack::PopAndDestroy(&exclude);
  1412 		CleanupStack::PopAndDestroy(&exclude);
  1348 		CleanupStack::PopAndDestroy(&include);
  1413 		CleanupStack::PopAndDestroy(&include);
  1349         __LOG("CPackageDataTransfer::GetPublicFileListL() - END");
  1414         
       
  1415 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_GETPUBLICFILELISTL_EXIT );
  1350 		}
  1416 		}
  1351 		
  1417 		
  1352 	void CPackageDataTransfer::ParseDirL(const TDesC& aDirName, const RArray<TPtrC>& aExclude, RFileArray& apFileEntries)
  1418 	void CPackageDataTransfer::ParseDirL(const TDesC& aDirName, const RArray<TPtrC>& aExclude, RFileArray& apFileEntries)
  1353 	/** Parses a directory for files.
  1419 	/** Parses a directory for files.
  1354 	
  1420 	
  1357 	@param aDirName the directory to search
  1423 	@param aDirName the directory to search
  1358 	@param aExclude a list of directories or files to exclude
  1424 	@param aExclude a list of directories or files to exclude
  1359 	@param apFileEntries Array of file entries to populate
  1425 	@param apFileEntries Array of file entries to populate
  1360 	*/							   
  1426 	*/							   
  1361 		{
  1427 		{
       
  1428 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_PARSEDIRL_ENTRY );
  1362 		CDir* pFiles = NULL;
  1429 		CDir* pFiles = NULL;
  1363 		
  1430 		
  1364 		// This function requires a / on the end otherwise it does not work!
  1431 		// This function requires a / on the end otherwise it does not work!
  1365 		TFileName path = aDirName;
  1432 		TFileName path = aDirName;
  1366 		if (path[path.Length() - 1] != KBackSlash()[0])
  1433 		if (path[path.Length() - 1] != KBackSlash()[0])
  1369 		TInt err = iFs.GetDir(path, KEntryAttMatchMask, ESortNone, pFiles);
  1436 		TInt err = iFs.GetDir(path, KEntryAttMatchMask, ESortNone, pFiles);
  1370 		CleanupStack::PushL(pFiles); // Add to cleanup stack
  1437 		CleanupStack::PushL(pFiles); // Add to cleanup stack
  1371 		
  1438 		
  1372 		if ((err != KErrNone) && (err != KErrNotFound)) // Do we need to leave?
  1439 		if ((err != KErrNone) && (err != KErrNotFound)) // Do we need to leave?
  1373 			{
  1440 			{
       
  1441 		    OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_PARSEDIRL, "Leave: %d", err);
  1374 			User::Leave(err);
  1442 			User::Leave(err);
  1375 			} // if
  1443 			} // if
  1376 
  1444 
  1377 		TUint count = pFiles->Count();
  1445 		TUint count = pFiles->Count();
  1378 		while(count--)
  1446 		while(count--)
  1398 				} // if
  1466 				} // if
  1399 			} // for x
  1467 			} // for x
  1400 			
  1468 			
  1401 		// Cleanup
  1469 		// Cleanup
  1402 		CleanupStack::PopAndDestroy(pFiles);
  1470 		CleanupStack::PopAndDestroy(pFiles);
       
  1471 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_PARSEDIRL_EXIT );
  1403 		}
  1472 		}
  1404 
  1473 
  1405 	void CPackageDataTransfer::GetDriveListL(TDriveList& aDriveList)
  1474 	void CPackageDataTransfer::GetDriveListL(TDriveList& aDriveList)
  1406 	/** Get the drive list for the data owner
  1475 	/** Get the drive list for the data owner
  1407 
  1476 
  1408 	@pre CDataOwner::ParseFilesL() must have been called
  1477 	@pre CDataOwner::ParseFilesL() must have been called
  1409 	@return the active settings of the data owner
  1478 	@return the active settings of the data owner
  1410 	@leave KErrNotReady if CDataOwner::ParseFilesL() not called
  1479 	@leave KErrNotReady if CDataOwner::ParseFilesL() not called
  1411 	*/
  1480 	*/
  1412 		{
  1481 		{
  1413         __LOG1("CPackageDataTransfer::GetDriveListL() - Begin - SID: 0x%08x", iPackageID.iUid);
  1482         OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_GETDRIVELISTL_ENTRY );
       
  1483         OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_GETDRIVELISTL, "SID: 0x%08x", iPackageID.iUid);
  1414         
  1484         
  1415 		// We now no longer return the Z drive, it has been decided that the Z drive will always be the
  1485 		// We now no longer return the Z drive, it has been decided that the Z drive will always be the
  1416 		// ROM. Backing up and restoring the ROM drive should not be possible, as what is the point
  1486 		// ROM. Backing up and restoring the ROM drive should not be possible, as what is the point
  1417 		
  1487 		
  1418 		// build package files        
  1488 		// build package files        
  1422 			
  1492 			
  1423 			if( err )
  1493 			if( err )
  1424 				{
  1494 				{
  1425 				iMetaData = NULL;
  1495 				iMetaData = NULL;
  1426 				iMetaDataSize = 0;
  1496 				iMetaDataSize = 0;
       
  1497 				OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_GETDRIVELISTL, "Leave: %d", err);
  1427 				User::Leave( err );
  1498 				User::Leave( err );
  1428 				}
  1499 				}
  1429 			else
  1500 			else
  1430 				{
  1501 				{
  1431 				iMetaDataSize = iMetaData->Size();
  1502 				iMetaDataSize = iMetaData->Size();
  1444 				}
  1515 				}
  1445 			}
  1516 			}
  1446 		
  1517 		
  1447 		aDriveList = iDriveList;
  1518 		aDriveList = iDriveList;
  1448 		
  1519 		
  1449 		__LOG1("CPackageDataTransfer::GetDriveListL() - end - SID: 0x%08x", iPackageID.iUid);
  1520 		OstTrace1(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_GETDRIVELISTL, "SID: 0x%08x", iPackageID.iUid);
       
  1521 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_GETDRIVELISTL_EXIT );
  1450 		}
  1522 		}
  1451 
  1523 
  1452 	TBool CPackageDataTransfer::IsExcluded(const TBool aIsPublic, const TDesC& aFileName, const RArray<TPtrC>& aExclude)
  1524 	TBool CPackageDataTransfer::IsExcluded(const TBool aIsPublic, const TDesC& aFileName, const RArray<TPtrC>& aExclude)
  1453 	/** Checks to see if a given file is excluded
  1525 	/** Checks to see if a given file is excluded
  1454 	
  1526 	
  1457 	@param aFileName file to check
  1529 	@param aFileName file to check
  1458 	@param aExclude list of excluded files
  1530 	@param aExclude list of excluded files
  1459 	@return ETrue if excluded otherwise EFalse
  1531 	@return ETrue if excluded otherwise EFalse
  1460 	*/
  1532 	*/
  1461 		{
  1533 		{
       
  1534 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ISEXCLUDED_ENTRY );
  1462 		_LIT(KPrivateMatch, "?:\\private\\*");
  1535 		_LIT(KPrivateMatch, "?:\\private\\*");
  1463 		_LIT(KSystem, "?:\\system\\*");
  1536 		_LIT(KSystem, "?:\\system\\*");
  1464 		_LIT(KResource, "?:\\resource\\*");
  1537 		_LIT(KResource, "?:\\resource\\*");
  1465 		_LIT(KOther, "*\\..\\*");
  1538 		_LIT(KOther, "*\\..\\*");
  1466 		TBool ret = EFalse;
  1539 		TBool ret = EFalse;
  1499 					ret = (aFileName.CompareF(aExclude[x]) == 0);
  1572 					ret = (aFileName.CompareF(aExclude[x]) == 0);
  1500 					} // else
  1573 					} // else
  1501 				} // for x
  1574 				} // for x
  1502 			} // if
  1575 			} // if
  1503 		
  1576 		
  1504         __LOG2("CDataOwner::IsExcluded() - END - returns excluded: %d for file: %S", ret, &aFileName);
  1577 		OstTraceExt2(TRACE_NORMAL, CPACKAGEDATATRANSFER_ISEXCLUDED, "returns excluded: %d for file: %S", ret, aFileName);
       
  1578 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ISEXCLUDED_EXIT );
  1505 		return ret;
  1579 		return ret;
  1506 		}
  1580 		}
  1507 		
  1581 		
  1508 		/**
  1582 		/**
  1509 	Method will be used for Sort on RPointerArray
  1583 	Method will be used for Sort on RPointerArray
  1513 	
  1587 	
  1514 	@see RArray::Sort()
  1588 	@see RArray::Sort()
  1515 	*/
  1589 	*/
  1516 	TInt CPackageDataTransfer::Compare(const CPackageDataTransfer& aFirst, const CPackageDataTransfer& aSecond)
  1590 	TInt CPackageDataTransfer::Compare(const CPackageDataTransfer& aFirst, const CPackageDataTransfer& aSecond)
  1517 		{
  1591 		{
       
  1592 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_COMPARE_ENTRY );
  1518 		if (aFirst.PackageId().iUid < aSecond.PackageId().iUid)
  1593 		if (aFirst.PackageId().iUid < aSecond.PackageId().iUid)
  1519 			{
  1594 			{
       
  1595 			OstTraceFunctionExit0( CPACKAGEDATATRANSFER_COMPARE_EXIT );
  1520 			return -1;
  1596 			return -1;
  1521 			}
  1597 			}
  1522  		else if (aFirst.PackageId().iUid > aSecond.PackageId().iUid)
  1598  		else if (aFirst.PackageId().iUid > aSecond.PackageId().iUid)
  1523  			{
  1599  			{
       
  1600  			OstTraceFunctionExit0( DUP1_CPACKAGEDATATRANSFER_COMPARE_EXIT );
  1524  			return 1;
  1601  			return 1;
  1525  			}
  1602  			}
  1526  		else 
  1603  		else 
  1527  			{
  1604  			{
       
  1605  			OstTraceFunctionExit0( DUP2_CPACKAGEDATATRANSFER_COMPARE_EXIT );
  1528  			return 0;
  1606  			return 0;
  1529  			}
  1607  			}
  1530 		}
  1608 		}
  1531 		
  1609 		
  1532 	/**
  1610 	/**
  1551 
  1629 
  1552 	void CPackageDataTransfer::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/, TInt aErrorCode)
  1630 	void CPackageDataTransfer::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/, TInt aErrorCode)
  1553 	/** MContentHandler::OnStartDocumentL()
  1631 	/** MContentHandler::OnStartDocumentL()
  1554 	*/
  1632 	*/
  1555 		{
  1633 		{
       
  1634 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ONSTARTDOCUMENTL_ENTRY );
  1556 		if (aErrorCode != KErrNone)
  1635 		if (aErrorCode != KErrNone)
  1557 			{
  1636 			{
  1558 			__LOG1("CPackageDataTransfer::OnStartDocumentL() - error = %d", aErrorCode);
  1637 		    OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_ONSTARTDOCUMENTL, "error = %d", aErrorCode);
  1559 			User::Leave(aErrorCode);
  1638 			User::Leave(aErrorCode);
  1560 			}
  1639 			}
       
  1640 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ONSTARTDOCUMENTL_EXIT );
  1561 		}
  1641 		}
  1562 		
  1642 		
  1563 	void CPackageDataTransfer::OnEndDocumentL(TInt aErrorCode)
  1643 	void CPackageDataTransfer::OnEndDocumentL(TInt aErrorCode)
  1564 	/** MContentHandler::OnEndDocumentL()
  1644 	/** MContentHandler::OnEndDocumentL()
  1565 	*/
  1645 	*/
  1566 		{
  1646 		{
       
  1647 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ONENDDOCUMENTL_ENTRY );
  1567 		// just to satisfy UREL compiler
  1648 		// just to satisfy UREL compiler
  1568 		(void) aErrorCode;
  1649 		(void) aErrorCode;
  1569 		__LOG1("CPackageDataTransfer::OnEndDocumentL() - error = %d", aErrorCode);
  1650 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_ONENDDOCUMENTL, "error = %d", aErrorCode);
       
  1651 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ONENDDOCUMENTL_EXIT );
  1570 		}
  1652 		}
  1571 		
  1653 		
  1572 	void CPackageDataTransfer::OnStartElementL(const RTagInfo& aElement, 
  1654 	void CPackageDataTransfer::OnStartElementL(const RTagInfo& aElement, 
  1573 									  const RAttributeArray& aAttributes, 
  1655 									  const RAttributeArray& aAttributes, 
  1574 									  TInt aErrorCode)
  1656 									  TInt aErrorCode)
  1575 	/** MContentHandler::OnStartElementL()
  1657 	/** MContentHandler::OnStartElementL()
  1576 
  1658 
  1577 	@leave KErrUnknown an unknown element
  1659 	@leave KErrUnknown an unknown element
  1578 	*/
  1660 	*/
  1579 		{
  1661 		{
       
  1662 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ONSTARTELEMENTL_ENTRY );
  1580 		if (aErrorCode != KErrNone)
  1663 		if (aErrorCode != KErrNone)
  1581 			{
  1664 			{
  1582 			__LOG1("CPackageDataTransfer::OnStartElementL() - error = %d", aErrorCode);
  1665 		    OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_ONSTARTELEMENTL, "error = %d", aErrorCode);
  1583 			User::Leave(aErrorCode);
  1666 			User::Leave(aErrorCode);
  1584 			}
  1667 			}
  1585 		
  1668 		
       
  1669 		TInt err;
  1586 		TPtrC8 localName = aElement.LocalName().DesC();
  1670 		TPtrC8 localName = aElement.LocalName().DesC();
  1587 		if (localName == KIncludeFile) 
  1671 		if (localName == KIncludeFile) 
  1588 			{
  1672 			{
  1589 			HandlePathL(EInclude, aAttributes, EFalse);
  1673 			HandlePathL(EInclude, aAttributes, EFalse);
  1590 			}
  1674 			}
  1600 			{
  1684 			{
  1601 			HandleBackupRegistrationL(aAttributes);
  1685 			HandleBackupRegistrationL(aAttributes);
  1602 			}
  1686 			}
  1603 		else if (!localName.CompareF(KPublicBackup))
  1687 		else if (!localName.CompareF(KPublicBackup))
  1604 			{
  1688 			{
  1605 			User::LeaveIfError(HandlePublicBackup(aAttributes));
  1689 		    err = HandlePublicBackup(aAttributes);
       
  1690 			LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP2_CPACKAGEDATATRANSFER_ONSTARTELEMENTL, "error = %d", err));
  1606 			}
  1691 			}
  1607 		else if (!localName.CompareF(KSystemBackup))
  1692 		else if (!localName.CompareF(KSystemBackup))
  1608 			{
  1693 			{
  1609 			User::LeaveIfError(HandleSystemBackup(aAttributes));
  1694 		    err = HandleSystemBackup(aAttributes);
       
  1695 			LEAVEIFERROR(err, OstTrace1(TRACE_ERROR, DUP3_CPACKAGEDATATRANSFER_ONSTARTELEMENTL, "error = %d", err));
  1610 			}
  1696 			}
  1611 		else
  1697 		else
  1612 			{
  1698 			{
  1613 			__LOG1("CPackageDataTransfer::OnStartElementL() - Unknown element while parsing 0x%08x", iPackageID.iUid);
  1699 		    OstTrace1(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_ONSTARTELEMENTL, "Unknown element while parsing 0x%08x", iPackageID.iUid);
  1614 			}
  1700 			}
  1615 			
  1701 			
       
  1702 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ONSTARTELEMENTL_EXIT );
  1616 		}
  1703 		}
  1617 
  1704 
  1618 	
  1705 	
  1619 	void CPackageDataTransfer::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
  1706 	void CPackageDataTransfer::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
  1620 	/** MContentHandler::OnEndElementL()
  1707 	/** MContentHandler::OnEndElementL()
  1621 	*/
  1708 	*/
  1622 		{
  1709 		{
       
  1710 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ONENDELEMENTL_ENTRY );
  1623 		if (aErrorCode != KErrNone)
  1711 		if (aErrorCode != KErrNone)
  1624 			{
  1712 			{
  1625 			__LOG1("CPackageDataTransfer::OnEndElementL() - error = %d", aErrorCode);
  1713 		    OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_ONENDELEMENTL, "error = %d", aErrorCode);
  1626 			User::Leave(aErrorCode);
  1714 			User::Leave(aErrorCode);
  1627 			}
  1715 			}
  1628 		
  1716 		
  1629 		TPtrC8 localName = aElement.LocalName().DesC();
  1717 		TPtrC8 localName = aElement.LocalName().DesC();
  1630 		if (!localName.CompareF(KPublicBackup))
  1718 		if (!localName.CompareF(KPublicBackup))
  1631 			{
  1719 			{
  1632 			iCurrentElement = ENoElement;
  1720 			iCurrentElement = ENoElement;
  1633 			} // if
  1721 			} // if
       
  1722 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ONENDELEMENTL_EXIT );
  1634 		}
  1723 		}
  1635 
  1724 
  1636 	void CPackageDataTransfer::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
  1725 	void CPackageDataTransfer::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
  1637 	/** MContentHandler::OnContentL()
  1726 	/** MContentHandler::OnContentL()
  1638 	*/
  1727 	*/
  1682 	/** MContentHandler::OnError()
  1771 	/** MContentHandler::OnError()
  1683 
  1772 
  1684 	@leave aErrorCode
  1773 	@leave aErrorCode
  1685 	*/
  1774 	*/
  1686 		{
  1775 		{
       
  1776 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_ONERROR_ENTRY );
  1687 		(void)aErrorCode;
  1777 		(void)aErrorCode;
  1688 		__LOG1("CPackageDataTransfer::OnError() - error = %d", aErrorCode);
  1778 		OstTrace1(TRACE_NORMAL, CPACKAGEDATATRANSFER_ONERROR, "error = %d", aErrorCode);
       
  1779 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_ONERROR_EXIT );
  1689 		}
  1780 		}
  1690 
  1781 
  1691 	TAny* CPackageDataTransfer::GetExtendedInterface(const TInt32 /*aUid*/)
  1782 	TAny* CPackageDataTransfer::GetExtendedInterface(const TInt32 /*aUid*/)
  1692 	/** MContentHandler::OnEndPrefixMappingL()
  1783 	/** MContentHandler::OnEndPrefixMappingL()
  1693 	*/
  1784 	*/
  1701 	@param aAttributes the attributes for the element
  1792 	@param aAttributes the attributes for the element
  1702 	@return KErrNone no errors
  1793 	@return KErrNone no errors
  1703 	@return KErrUnknown unknown version
  1794 	@return KErrUnknown unknown version
  1704 	*/
  1795 	*/
  1705 		{
  1796 		{
       
  1797 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_HANDLEBACKUPREGISTRATIONL_ENTRY );
  1706 		_LIT8(KVersion, "1.0");
  1798 		_LIT8(KVersion, "1.0");
  1707 		
  1799 		
  1708 		if (aAttributes.Count() == 1)
  1800 		if (aAttributes.Count() == 1)
  1709 			{
  1801 			{
  1710 			// Check the version is correct.
  1802 			// Check the version is correct.
  1711 			if (aAttributes[0].Value().DesC() != KVersion()) // Only version we know about
  1803 			if (aAttributes[0].Value().DesC() != KVersion()) // Only version we know about
  1712 				{
  1804 				{
  1713 				__LOG1("CDataOwner::HandleBackupRegistrationL() - Unknown version at SID(0x%08x)", iPackageID.iUid);
  1805 			    OstTrace1(TRACE_ERROR, CPACKAGEDATATRANSFER_HANDLEBACKUPREGISTRATIONL, "Unknown version at SID(0x%08x)", iPackageID.iUid);
  1714 				User::Leave(KErrNotSupported);
  1806 				User::Leave(KErrNotSupported);
  1715 				} // else
  1807 				} // else
  1716 			} // if
  1808 			} // if
       
  1809 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_HANDLEBACKUPREGISTRATIONL_EXIT );
  1717 		}
  1810 		}
  1718 
  1811 
  1719 
  1812 
  1720 	TInt CPackageDataTransfer::HandlePublicBackup(const RAttributeArray& aAttributes)
  1813 	TInt CPackageDataTransfer::HandlePublicBackup(const RAttributeArray& aAttributes)
  1721 	/** Handles the "public_backup" element
  1814 	/** Handles the "public_backup" element
  1722 
  1815 
  1723 	@param aAttributes the attributes for the element
  1816 	@param aAttributes the attributes for the element
  1724 	@return KErrNone
  1817 	@return KErrNone
  1725 	*/
  1818 	*/
  1726 		{
  1819 		{
       
  1820 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_HANDLEPUBLICBACKUP_ENTRY );
  1727 		iPublicInformation.iSupported = ETrue;
  1821 		iPublicInformation.iSupported = ETrue;
  1728 		
  1822 		
  1729 		if (aAttributes.Count() > 0)
  1823 		if (aAttributes.Count() > 0)
  1730 			{
  1824 			{
  1731             const TBool deleteBeforeRestore = ( aAttributes[0].Value().DesC().CompareF(KYes) == 0 );
  1825             const TBool deleteBeforeRestore = ( aAttributes[0].Value().DesC().CompareF(KYes) == 0 );
  1732 			iPublicInformation.iDeleteBeforeRestore = deleteBeforeRestore;
  1826 			iPublicInformation.iDeleteBeforeRestore = deleteBeforeRestore;
  1733 			__LOG2("CPackageDataTransfer::HandlePublicBackup(0x%08x) - iPublicInformation.iDeleteBeforeRestore: %d", iPackageID.iUid, deleteBeforeRestore);
  1827 			OstTraceExt2(TRACE_NORMAL, CPACKAGEDATATRANSFER_HANDLEPUBLICBACKUP, "(0x%08x) - iPublicInformation.iDeleteBeforeRestore: %d", iPackageID.iUid, static_cast<TInt32>(deleteBeforeRestore));
  1734 			} // if
  1828 			} // if
  1735 		
  1829 		
  1736 		iCurrentElement = EPublic;
  1830 		iCurrentElement = EPublic;
  1737 		
  1831 		
       
  1832 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_HANDLEPUBLICBACKUP_EXIT );
  1738 		return KErrNone;
  1833 		return KErrNone;
  1739 		}
  1834 		}
  1740 
  1835 
  1741 	TInt CPackageDataTransfer::HandleSystemBackup(const RAttributeArray& /*aAttributes*/)
  1836 	TInt CPackageDataTransfer::HandleSystemBackup(const RAttributeArray& /*aAttributes*/)
  1742 	/** Handles the "system_backup" element
  1837 	/** Handles the "system_backup" element
  1743 
  1838 
  1744 	@param aAttributes the attributes for the element
  1839 	@param aAttributes the attributes for the element
  1745 	@return KErrNone
  1840 	@return KErrNone
  1746 	*/
  1841 	*/
  1747 		{
  1842 		{
       
  1843 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_HANDLESYSTEMBACKUP_ENTRY );
  1748 		iSystemInformation.iSupported = ETrue;
  1844 		iSystemInformation.iSupported = ETrue;
  1749 		__LOG2("CPackageDataTransfer::HandlePublicBackup(0x%08x) - iSystemInformation.iSupported: %d", iPackageID.iUid, iSystemInformation.iSupported);
  1845 		OstTraceExt2(TRACE_NORMAL, CPACKAGEDATATRANSFER_HANDLESYSTEMBACKUP, "(0x%08x) - iSystemInformation.iSupported: %d", iPackageID.iUid, static_cast<TInt32>(iSystemInformation.iSupported));
  1750 
  1846 
       
  1847 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_HANDLESYSTEMBACKUP_EXIT );
  1751 		return KErrNone;	
  1848 		return KErrNone;	
  1752 		}
  1849 		}
  1753 
  1850 
  1754 
  1851 
  1755 	void CPackageDataTransfer::HandlePathL(const TSelectionType aType, 
  1852 	void CPackageDataTransfer::HandlePathL(const TSelectionType aType, 
  1760 	@param aType The selection type 
  1857 	@param aType The selection type 
  1761 	@param aAttributes The attributes for the element
  1858 	@param aAttributes The attributes for the element
  1762 	@param aDir The element was found in an <include_dir/> element?
  1859 	@param aDir The element was found in an <include_dir/> element?
  1763 	*/
  1860 	*/
  1764 		{
  1861 		{
       
  1862 		OstTraceFunctionEntry0( CPACKAGEDATATRANSFER_HANDLEPATHL_ENTRY );
  1765 		// Check we dont have a NULL string
  1863 		// Check we dont have a NULL string
  1766 		if (aAttributes[0].Value().DesC().Length() > 0)
  1864 		if (aAttributes[0].Value().DesC().Length() > 0)
  1767 			{
  1865 			{
  1768 			switch (iCurrentElement)
  1866 			switch (iCurrentElement)
  1769 				{
  1867 				{
  1785 							if (selectionName[1] == ':')
  1883 							if (selectionName[1] == ':')
  1786 								{
  1884 								{
  1787 								CSelection* selection = CSelection::NewLC(aType, selectionName);
  1885 								CSelection* selection = CSelection::NewLC(aType, selectionName);
  1788 								iPublicSelections.AppendL(selection);
  1886 								iPublicSelections.AppendL(selection);
  1789 								CleanupStack::Pop(selection);
  1887 								CleanupStack::Pop(selection);
  1790 								__LOG3("CPackageDataTransfer::HandlePathL(0x%08x) - Added selection: %S [type: %d]", iPackageID.iUid, &selectionName, aType);
  1888 								OstTraceExt3(TRACE_NORMAL, CPACKAGEDATATRANSFER_HANDLEPATHL, "(0x%08x) - Added selection: %S [type: %d]", iPackageID.iUid, selectionName, static_cast<TInt32>(aType));
  1791 								} //if 
  1889 								} //if 
  1792 							}// if
  1890 							}// if
  1793 						else
  1891 						else
  1794 							{
  1892 							{
  1795 							__LOG3("CPackageDataTransfer::HandlePathL(0x%08x) - Wrong format: %S [type: %d]", iPackageID.iUid, &selectionName, aType);
  1893 						    OstTraceExt3(TRACE_NORMAL, DUP1_CPACKAGEDATATRANSFER_HANDLEPATHL, "(0x%08x) - Wrong format: %S [type: %d]", iPackageID.iUid, selectionName, static_cast<TInt32>(aType));
  1796 							}
  1894 							}
  1797 						} // if
  1895 						} // if
  1798 					else
  1896 					else
  1799 						{
  1897 						{
  1800 						__LOG1("CPackageDataTransfer::HandlePathL(0x%08x) - EPublic - Could not convert filename", iPackageID.iUid);
  1898 					    OstTrace1(TRACE_NORMAL, DUP2_CPACKAGEDATATRANSFER_HANDLEPATHL, "(0x%08x) - EPublic - Could not convert filename", iPackageID.iUid);
  1801 						} // else
  1899 						} // else
  1802 					break;
  1900 					break;
  1803 					};
  1901 					};
  1804 			default:
  1902 			default:
  1805 					{
  1903 					{
  1806 					__LOG1("CPackageDataTransfer::HandlePathL(0x%08x) - Private data is Not Supported", iPackageID.iUid);		
  1904 					OstTrace1(TRACE_NORMAL, DUP3_CPACKAGEDATATRANSFER_HANDLEPATHL, "(0x%08x) - Private data is Not Supported", iPackageID.iUid);		
  1807 					}
  1905 					}
  1808 				break;
  1906 				break;
  1809 				} // switch
  1907 				} // switch
  1810 			} // if
  1908 			} // if
  1811 		else
  1909 		else
  1812 			{
  1910 			{
  1813 			__LOG1("CPackageDataTransfer::HandlePathL(0x%08x) - Path attribute error", iPackageID.iUid);
  1911 		    OstTrace1(TRACE_NORMAL, DUP4_CPACKAGEDATATRANSFER_HANDLEPATHL, "(0x%08x) - Path attribute error", iPackageID.iUid);
  1814 			} // else
  1912 			} // else
       
  1913 		OstTraceFunctionExit0( CPACKAGEDATATRANSFER_HANDLEPATHL_EXIT );
  1815 		}
  1914 		}
  1816 //					// 
  1915 //					// 
  1817 // MContentHandler //
  1916 // MContentHandler //
  1818 //
  1917 //
  1819 	
  1918