mmfenh/progressivedownload/ProgressiveDownloadUtility/src/mmfclientutility.cpp
changeset 16 43d09473c595
parent 14 80975da52420
child 22 128eb6a32b84
--- a/mmfenh/progressivedownload/ProgressiveDownloadUtility/src/mmfclientutility.cpp	Mon May 03 12:59:52 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2308 +0,0 @@
-/*
-* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Progressive Download Utility  Audio, MIDI and Video client utility functions.
-*
-*/
-
-
-#include <e32std.h>
-#include <f32file.h>
-#include <bautils.h>
-#include <caf/content.h>
-#include <caf/data.h>
-using namespace ContentAccess;
-
-#include "mmfclientutility.h"
-#include <mmf/common/mmfpaniccodes.h>
-
-const TInt KMaxMimeLength = 256;
-const TInt KMaxHeaderSize = 256;
-#ifdef __WINDOWS_MEDIA
-_LIT8(KWMAMimeType,"audio/x-ms-wma");
-#endif
-
-void CUPanic(TInt aCUPanicCode)
-	{
-	_LIT(KMMFMediaClientUtilityPaanicCategory, "MMFClientUtility");
-	User::Panic(KMMFMediaClientUtilityPaanicCategory, aCUPanicCode);
-	}
-
-/**
- * @internalComponent
- */
- TUid CMMFClientUtility::ConvertMdaFormatUidToECOMWrite(TUid aMdaFormatUid)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::ConvertMdaFormatUidToECOMWrite\n"));
-    #endif
-	TUid ECOMUid = KNullUid;
-	if (aMdaFormatUid == KUidMdaClipFormatWav)
-		ECOMUid = TUid::Uid(KMmfUidFormatWAVWrite);
-	else if (aMdaFormatUid == KUidMdaClipFormatAu)
-		ECOMUid = TUid::Uid(KMmfUidFormatAUWrite);
-	else if (aMdaFormatUid == KUidMdaClipFormatRawAudio)
-		ECOMUid = TUid::Uid(KMmfUidFormatRAWWrite);
-	else if (aMdaFormatUid == KUidMdaClipFormatRawAmr)
-		ECOMUid = TUid::Uid(KAdvancedUidFormatAMRWrite);
-
-	return ECOMUid;
-	}
-
-/**
- * @internalComponent
- */
- TUid CMMFClientUtility::ConvertMdaFormatUidToECOMRead(TUid aMdaFormatUid)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::ConvertMdaFormatUidToECOMRead\n"));
-    #endif
-	TUid ECOMUid = KNullUid;
-	if (aMdaFormatUid == KUidMdaClipFormatWav)
-		ECOMUid = TUid::Uid(KMmfUidFormatWAVRead);
-	else if (aMdaFormatUid == KUidMdaClipFormatAu)
-		ECOMUid = TUid::Uid(KMmfUidFormatAURead);
-	else if (aMdaFormatUid == KUidMdaClipFormatRawAudio)
-		ECOMUid = TUid::Uid(KMmfUidFormatRAWRead);
-	else if (aMdaFormatUid == KUidMdaClipFormatRawAmr)
-		ECOMUid = TUid::Uid(KAdvancedUidFormatAMRRead);
-
-	return ECOMUid;
-	}
-
-/**
- * @internalComponent
- */
- TInt CMMFClientUtility::GetFileHeaderData(const TDesC& aFileName, TDes8& aHeaderData, TInt aMaxLength)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::GetFileHeaderData***\n"));
-    #endif
-	RFs fsSession;
-	RFile file;
-	TInt error = KErrNone;
-	TInt size = 0;
-	if ((error = fsSession.Connect()) == KErrNone)
-		{
-		//rj  if ((error = file.Open(fsSession, aFileName, EFileShareReadersOnly)) == KErrNone)
-        if ((error = file.Open(fsSession, aFileName, EFileShareAny)) == KErrNone)
-			{
-
-
-			if ((error = file.Size(size)) == KErrNone)
-				{
-				if (size > 0)
-					{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::GetFileHeaderData actual size= %d  \n"),size);
-    #endif
-					if (size > aMaxLength)
-						size = aMaxLength;
-
-					error = file.Read(aHeaderData, size);
-					}
-				}
-			file.Close();
-			}
-		fsSession.Close();
-
-
-		}
-
-	#if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::GetFileHeaderData err %d  header %d\n"),error,size);
-    #endif
-
-	return error;
-	}
-
-/**
- * @internalComponent
- */
- TFourCC CMMFClientUtility::ConvertMdaCodecToFourCC(TMdaPackage& aCodec)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::ConvertMdaCodecToFourCC\n"));
-    #endif
-	TFourCC dataType = KMMFFourCCCodeNULL;
-	switch (aCodec.Uid().iUid)
-		{
-		case KUidMdaWavPcmCodecDefine:
-			{
-			TMdaPcmWavCodec* pcmWavCodec = (TMdaPcmWavCodec*)&aCodec;
-			if (pcmWavCodec->iBits == TMdaPcmWavCodec::E8BitPcm)
-				dataType = KMMFFourCCCodePCMU8; //8 bit PCM
-			else
-				dataType = KMMFFourCCCodePCM16; //16 bit PCM
-			break;
-			}
-		case KUidMdaAu8PcmCodecDefine:
-			dataType = KMMFFourCCCodePCM8;
-			break;
-		case KUidMdaAuCodecDefine:
-		case KUidMdaAu16PcmCodecDefine:
-			dataType = KMMFFourCCCodePCM16B;
-			break;
-
-		case KUidMdaAuMulawCodecDefine:
-		case KUidMdaWavMulawCodecDefine:
-		case KUidMdaRawAudioMulawCodecDefine:  //uLAW
-			dataType = KMMFFourCCCodeMuLAW;
-			break;
-		case KUidMdaAuAlawCodecDefine:
-		case KUidMdaWavAlawCodecDefine:
-		case KUidMdaRawAudioAlawCodecDefine:	 //ALAW
-			dataType = KMMFFourCCCodeALAW;
-			break;
-		case KUidMdaRawAudioS8PcmCodecDefine:	 //  P8
-			dataType = KMMFFourCCCodePCM8;
-			break;
-		case KUidMdaRawAudioU8PcmCodecDefine:	  // PU8
-			dataType = KMMFFourCCCodePCMU8;
-			break;
-		case KUidMdaRawAudioSL16PcmCodecDefine: // P16
-			dataType = KMMFFourCCCodePCM16;
-			break;
-		case KUidMdaRawAudioSB16PcmCodecDefine: //P16B
-			dataType = KMMFFourCCCodePCM16B;
-			break;
-		case KUidMdaRawAudioUL16PcmCodecDefine: //PU16
-			dataType = KMMFFourCCCodePCMU16;
-			break;
-		case KUidMdaRawAudioUB16PcmCodecDefine: //PU6B
-			dataType = KMMFFourCCCodePCMU16B;
-			break;
-		case KUidMdaGsmWavCodecDefine: //GSM6
-			dataType = KMMFFourCCCodeGSM610;
-			break;
-		case KUidMdaWavImaAdpcmCodecDefine:
-			dataType = KMMFFourCCCodeIMAD;
-			break;
-		case KUidMdaRawAmrCodecDefine:
-			dataType = KMMFFourCCCodeAMR;
-			break;
-		default:	// Not a Uid we recognise
-			dataType = KMMFFourCCCodeNULL;
-			break;
-		}
-	return dataType;
-	}
-
-
-CMMFUtilityFileInfo* CMMFUtilityFileInfo::NewL(TMMSource& aSource)
-	{
-	CMMFUtilityFileInfo* self = CMMFUtilityFileInfo::NewLC(aSource);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-
-CMMFUtilityFileInfo* CMMFUtilityFileInfo::NewLC(TMMSource& aSource)
-	{
-	CMMFUtilityFileInfo* self = new (ELeave) CMMFUtilityFileInfo;
-	CleanupStack::PushL(self);
-	self->ConstructL(aSource);
-	return self;
-	}
-
-
-void CMMFUtilityFileInfo::ConstructL(const TMMSource& aSource)
-	{
-	if (aSource.SourceType()==KUidMMFileSource)
-		{
-		const TMMFileSource& fileSource = static_cast<const TMMFileSource&>(aSource);
-		iData = CData::NewL(TVirtualPathPtr(fileSource.Name(), fileSource.UniqueId()),
-							EContentShareReadWrite/*EContentShareReadOnly*/);
-		}
-
-	if (aSource.SourceType()==KUidMMFileHandleSource)
-		{
-		const TMMFileHandleSource& fileHandleSource = static_cast<const TMMFileHandleSource&>(aSource);
-		iData = CData::NewL(fileHandleSource.Handle(), fileHandleSource.UniqueId());
-		}
-
-	TInt err = iData->SetProperty(EAgentPropertyAgentUI, aSource.IsUIEnabled());
-
-	if (err != KErrNone && err != KErrCANotSupported)
-		{
-		// KErrCANotSupported isn't a problem for us so eat the error code.
-		User::Leave(err);
-		}
-
-	err = iData->EvaluateIntent(aSource.Intent());
-	User::LeaveIfError(err);
-	}
-
-TInt CMMFUtilityFileInfo::EvaluateIntent(TIntent aIntent)
-	{
-	return iData->EvaluateIntent(aIntent);
-	}
-/**
- * @internalComponent
- */
-TBool CMMFUtilityFileInfo::GetFileMimeTypeL(TDes8& aMimeType)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFUtilityFileInfo::GetFileMimeTypeL\n"));
-    #endif
-	return iData->GetMimeTypeL(aMimeType);
-	}
-
-/**
- * @internalComponent
- */
-void CMMFUtilityFileInfo::GetFileHeaderDataL(TDes8& aHeaderData, TInt aMaxLength)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFUtilityFileInfo::GetFileHeaderDataL\n"));
-    #endif
-	TInt size = 0;
-	iData->DataSizeL(size);
-	if (size > 0)
-		{
-		if (size > aMaxLength)
-			size = aMaxLength;
-		TInt pos = 0;
-		User::LeaveIfError(iData->Seek(ESeekStart, pos));
-		User::LeaveIfError(iData->Read(aHeaderData, size));
-		}
-	}
-
-/**
- * @internalComponent
- */
- HBufC8* CMMFClientUtility::GetFileExtensionL(const TDesC& aFileName)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::GetFileExtensionL\n"));
-    #endif
-	TParse fileName;
-	fileName.Set(aFileName,NULL,NULL);
-	HBufC8* fileSuffix = NULL;
-	if(fileName.ExtPresent())
-		{
-		TPtrC fileSuffixPtr(fileName.Ext());
-		fileSuffix = HBufC8::NewL(fileSuffixPtr.Length());
-		fileSuffix->Des().Copy(fileSuffixPtr);
-		}
-	else
-		{
-		fileSuffix = KNullDesC8().AllocL();
-		}
-	return fileSuffix;
-	}
-
-
-/**
- * @internalComponent
- */
-CMMFUtilityFileInfo::~CMMFUtilityFileInfo()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::~CMMFUtilityFileInfo\n"));
-    #endif
-	delete iData;
-	}
-
-/*
- * @internalComponent
- *
- * Returns an integer rating indicating how well the supplied format matches
- * the header data and file extension supplied.
- * 3 brownie points awarded for data & suffix match.
- * 2 brownie points awarded for data match alone.
- * 1 brownie point awarded for suffix match alone.
- */
-TInt CMMFClientUtility::GetBestMatchL(const CMMFFormatImplementationInformation* format, const TDesC8& aHeaderData, const TDesC8& aFileExtension)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFClientUtility::GetBestMatchL\n"));
-    #endif
-	TInt browniePoints = 0;
-
-	if (aHeaderData.Length() > 0) // Non empty file
-		{
-		if (aFileExtension.Length() > 0) // With a file extension
-			{
-			if (format->SupportsHeaderDataL(aHeaderData) &&
-				format->SupportsFileExtension(aFileExtension))
-				{
-				browniePoints = 3;
-				}
-			else if (format->SupportsHeaderDataL(aHeaderData))
-				{
-				browniePoints = 2;
-				}
-			else
-				{
-				// See if this format has any 'empty' match data or no match data, indicating
-				// that this format will match extension alone even if data present.
-				// (A format may have more than one match data string.)
-				const CDesC8Array& supportedHeaderData = format->SupportedHeaderData();
-
-				if (supportedHeaderData.Count() == 0)
-					{
-					// No header data indicated.
-					if (format->SupportsFileExtension(aFileExtension))
-						{
-							browniePoints = 1;
-						}
-					}
-				else
-					{
-					for (register TInt i = 0; i < supportedHeaderData.Count(); i++)
-						{
-						if ((supportedHeaderData[i].Length() == 0) &&
-							format->SupportsFileExtension(aFileExtension))
-							{
-							browniePoints = 1;
-							}
-						}
-					}
-				}
-			}
-		else
-			{
-			// No file suffix, so must match header data alone.
-			if (format->SupportsHeaderDataL(aHeaderData))
-				{
-				browniePoints = 2;
-				}
-			}
-		}
-	else // Empty File
-		{
-		// We have no choice but to match extension, if there is one.
-		if ((aFileExtension.Length() > 0) && format->SupportsFileExtension(aFileExtension))
-			{
-			browniePoints = 1;
-			}
-		}
-
-	return browniePoints;
-}
-
-/**
- * @internalComponent
- *
- * This function parses all the play & record formats in the given list of controllers,
- * looking for controllers & formats that best match the requirements.
- * Play controllers will be returned before record controllers, and
- * in cases of equal priority between formats, ECom order will be maintained.
- *
- * @param	"aControllers"
- *			A reference to a user supplied list of controllers retrieved from ECom.
- *			This list may be have been filtered for audio/video/play/record.
- * @param	"aHeaderDataPlayback"
- *			A descriptor reference containing the file's header data.
- *          for matching against a controller's play formats. May be KNullDesC8
- * @param	"aFileExtensionPlayback"
- *			A descriptor reference containing the filename's extension.
- *          for matching against a controller's play formats. May be KNullDesC8
- * @param	"aHeaderDataRecord"
- *			A descriptor reference containing the file's header data.
- *          for matching against a controller's record formats. May be KNullDesC8
- * @param	"aFileExtensionRecord"
- *			A descriptor reference containing the filename's extension.
- *          for matching against a controller's record formats. May be KNullDesC8
- * @param	"aPrioritisedControllers"
- *			A reference to a user supplied list through which the list of
- *			prioritised controllers will be returned.
- * @since	7.0s
- * @lib	"MediaClientUtility.lib"
- */
-void CMMFClientUtility::PrioritiseControllersL(
-	const RMMFControllerImplInfoArray& aControllers,
-	const TDesC8& aHeaderDataPlayback,
-	const TDesC8& aFileExtensionPlayback,
-	const TDesC8& aHeaderDataRecord,
-	const TDesC8& aFileExtensionRecord,
-	RMMFControllerImplInfoArray& prioritisedControllers)
-	{
-	RMMFControllerImplInfoArray fullMatchControllers; // data AND suffix
-	CleanupClosePushL(fullMatchControllers);
-	RMMFControllerImplInfoArray partMatchControllers; // data OR suffix
-	CleanupClosePushL(partMatchControllers);
-
-	TBool checkingPlaybackFormats = EFalse;
-	TBool checkingRecordFormats = EFalse;
-
-	if (aHeaderDataPlayback != KNullDesC8 || aFileExtensionPlayback != KNullDesC8)
-		checkingPlaybackFormats = ETrue;
-	if (aHeaderDataRecord != KNullDesC8 || aFileExtensionRecord != KNullDesC8)
-		checkingRecordFormats = ETrue;
-
-	// Examine each format for each controller. We only want to know at this stage
-	// if the controller has suitable formats, so as soon as we know it has, we can
-	// add it to out list, ranked by how well it matched.
-	for (register TInt i = 0; i < aControllers.Count(); i++)
-		{
-		const CMMFControllerImplementationInformation* controller = aControllers[i];
-		TInt savedBrowniePointsPlayback = 0;
-		TInt savedBrowniePointsRecord = 0;
-
-		if (checkingPlaybackFormats)
-			{
-			for (register TInt p = 0; p < controller->PlayFormats().Count(); p++)
-				{
-				const CMMFFormatImplementationInformation* format = controller->PlayFormats()[p];
-
-				TInt browniePoints = GetBestMatchL(format, aHeaderDataPlayback, aFileExtensionPlayback);
-
-				if (browniePoints >= savedBrowniePointsPlayback)
-					savedBrowniePointsPlayback = browniePoints;
-				}
-			}
-
-		if (checkingRecordFormats)
-			{
-			for (register TInt r = 0; r < controller->RecordFormats().Count(); r++)
-				{
-				const CMMFFormatImplementationInformation* format = controller->RecordFormats()[r];
-
-				TInt browniePoints = GetBestMatchL(format, aHeaderDataRecord, aFileExtensionRecord);
-
-				if (browniePoints >= savedBrowniePointsRecord)
-					savedBrowniePointsRecord = browniePoints;
-				}
-			}
-
-		TInt savedBrowniePoints = 0;
-		// if we're checking both playback & record formats
-		// make sure we've found both
-		if (checkingPlaybackFormats && checkingRecordFormats)
-			{
-			savedBrowniePoints = Min(savedBrowniePointsPlayback, savedBrowniePointsRecord);
-			}
-		else if (checkingPlaybackFormats)
-			{
-			savedBrowniePoints = savedBrowniePointsPlayback;
-			}
-		else if (checkingRecordFormats)
-			{
-			savedBrowniePoints = savedBrowniePointsRecord;
-			}
-
-		// Checked all formats for this controller, now count our brownie points.
-		switch (savedBrowniePoints)
-			{
-			case 3:
-				User::LeaveIfError(fullMatchControllers.Append(controller));
-				break;
-			case 2:
-				User::LeaveIfError(partMatchControllers.Insert(controller, 0));
-				break;
-			case 1:
-				User::LeaveIfError(partMatchControllers.Append(controller));
-				break;
-			default:
-				break;
-			}
-		}
-
-	// The better the controller matches, the earlier it will be in the final list.
-	for (register TInt x = 0; x < fullMatchControllers.Count(); x++)
-		{
-		if (prioritisedControllers.Find(fullMatchControllers[x]) == KErrNotFound)
-			{
-			User::LeaveIfError(prioritisedControllers.Append(fullMatchControllers[x]));
-			}
-		}
-
-	for (register TInt y = 0; y < partMatchControllers.Count(); y++)
-		{
-		if (prioritisedControllers.Find(partMatchControllers[y]) == KErrNotFound)
-			{
-			User::LeaveIfError(prioritisedControllers.Append(partMatchControllers[y]));
-			}
-		}
-
-	CleanupStack::PopAndDestroy(2, &fullMatchControllers); // fullMatchControllers, partMatchControllers
-	}
-
-/**
- * @internalComponent
- */
- CMMFMdaObjectStateChangeObserverCallback* CMMFMdaObjectStateChangeObserverCallback::NewL(MMdaObjectStateChangeObserver& aCallback)
-	{
-	return new(ELeave) CMMFMdaObjectStateChangeObserverCallback(aCallback);
-	}
-
-/**
- * @internalComponent
- */
-CMMFMdaObjectStateChangeObserverCallback::~CMMFMdaObjectStateChangeObserverCallback()
-	{
-	Cancel();
-	}
-
-/**
- * @internalComponent
- */
- void CMMFMdaObjectStateChangeObserverCallback::CallBack(CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
-	{
-	iObject = aObject;
-	iPreviousState = aPreviousState;
-	iCurrentState = aCurrentState;
-	iErrorCode = aErrorCode;
-	if (!IsActive())
-		{
-		TRequestStatus* s = &iStatus;
-		SetActive();
-		User::RequestComplete(s, KErrNone);
-		}
-	}
-
-CMMFMdaObjectStateChangeObserverCallback::CMMFMdaObjectStateChangeObserverCallback(MMdaObjectStateChangeObserver& aCallback) :
-	CActive(CActive::EPriorityHigh),
-	iCallback(aCallback)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFMdaObjectStateChangeObserverCallback::CMMFMdaObjectStateChangeObserverCallback\n"));
-    #endif
-	CActiveScheduler::Add(this);
-	}
-
-void CMMFMdaObjectStateChangeObserverCallback::RunL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFMdaObjectStateChangeObserverCallback::RunL\n"));
-    #endif
-	iCallback.MoscoStateChangeEvent(iObject, iPreviousState, iCurrentState, iErrorCode);
-	}
-
-void CMMFMdaObjectStateChangeObserverCallback::DoCancel()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFMdaObjectStateChangeObserverCallback::DoCancel\n"));
-    #endif
-	//nothing to cancel
-	}
-
-
-//****************************************
-// CMMFFindAndOpenController
-//****************************************
-
-/**
- * Factory function to create a CMMFFindAndOpenController class
- *
- * @internalComponent
- */
- CMMFFindAndOpenController* CMMFFindAndOpenController::NewL(MMMFFindAndOpenControllerObserver& aObserver)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::NewL\n"));
-    #endif
-	CMMFFindAndOpenController* self = new(ELeave) CMMFFindAndOpenController(aObserver);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CMMFFindAndOpenController::~CMMFFindAndOpenController()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::~CMMFFindAndOpenController\n"));
-    #endif
-	Cancel();
-
-	// delete temporary variables
-	Close();
-
-	// this should cancel the AO
-	delete iAddDataSourceSinkAsync;
-
-	delete iPrimaryConfig;
-	delete iSecondaryConfig;
-	}
-
-/**
- * Function to free up memory after a successful open has completed
- * Useful to allow a alloc testing to work.
- * Must not be called if ReOpen() is to be called
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::Close()
-	{
-
-	Cancel();
-
-	if(iAddDataSourceSinkAsync)
-		{
-		iAddDataSourceSinkAsync->Cancel();
-		}
-
-	if (iPrimaryConfig)
-		iPrimaryConfig->Close();
-	if (iSecondaryConfig)
-		iSecondaryConfig->Close();
-
-	iPrioritisedControllers.Close();
-	iControllers.ResetAndDestroy();
-	iControllers.Close();
-
-	iFileName.SetLength(0);
-	iFileNameSecondary.SetLength(0);
-
-	delete iUrl;
-	iUrl = NULL;
-
-	delete iMimeType;
-	iMimeType = NULL;
-
-	delete iUniqueId;
-	iUniqueId = NULL;
-
-	iFileHandle.Close();
-	iUseFileHandle = EFalse;
-	}
-
-CMMFFindAndOpenController::CMMFFindAndOpenController(MMMFFindAndOpenControllerObserver& aObserver) :
-	CActive(EPriorityStandard),
-	iObserver(aObserver),
-	iDescriptor(NULL, 0)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::CMMFFindAndOpenController\n"));
-    #endif
-	CActiveScheduler::Add(this);
-	}
-
-void CMMFFindAndOpenController::ConstructL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::ConstructL\n"));
-    #endif
-	iAddDataSourceSinkAsync = CMMFAddDataSourceSinkAsync::NewL(*this);
-	iPrimaryConfig = new (ELeave)  CConfig();
-	iSecondaryConfig =  new (ELeave) CConfig;
-	iCurrentConfig =  iPrimaryConfig;
-	}
-
-void CMMFFindAndOpenController::RunL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::RunL\n"));
-    #endif
-	Process();
-	}
-
-void CMMFFindAndOpenController::DoCancel()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::DoCancel\n"));
-    #endif
-	iAddDataSourceSinkAsync->Cancel();
-	}
-
-/**
- * Defines the media ID & priority to be used when opening a controller
- * Normally called once only after class has been constructed
- *
- * @param	aMediaId
- *			the media ID to use when searching for a controller
- *			e.g. KUidMediaTypeAudio
- * @param	aPrioritySettings
- *			the priority settings to use when opening a controller
- * @param	aMediaIdMatchType
- *			Defines the type of media id match to be performed on the plugins
- *			returned from the ECOM registry.
- * @leave	can leave with KErrNoMemory
-
- * @internalComponent
- */
- void CMMFFindAndOpenController::Configure(
-	TUid aMediaId,
-	TMMFPrioritySettings aPrioritySettings,
-	CMMFPluginSelectionParameters::TMediaIdMatchType aMediaIdMatchType)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::Configure\n"));
-    #endif
-	iPrioritySettings = aPrioritySettings;
-
-	iMediaIdMatchType = aMediaIdMatchType;
-
-	iMediaId = aMediaId;
-	}
-
-void CMMFFindAndOpenController::ConfigureController(
-	CConfig& config,
-	RMMFController& aController,
-	CMMFControllerEventMonitor& aEventMonitor,
-	TControllerMode aControllerMode)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::ConfigureController\n"));
-    #endif
-	config.iController = &aController;
-	config.iEventMonitor = &aEventMonitor;
-	config.iControllerMode = aControllerMode;
-	}
-
-/**
- * Configures the primary controller
- *
- * @param	aController
- *			a reference to the client controller object to use
- * @param	aEventMonitor
- *			a reference to an event monitor object for receiving
- *			events from the controller
- * @param	aControllerMode
- *			indicates whether this controller is to be used for recording
- *          or playback
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::ConfigureController(
-	RMMFController& aController,
-	CMMFControllerEventMonitor& aEventMonitor,
-	TControllerMode aControllerMode)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::ConfigureController2\n"));
-    #endif
-	ConfigureController(
-		*iPrimaryConfig,
-		aController,
-		aEventMonitor,
-		aControllerMode);
-	}
-
-/**
- * Configures the secondary controller
- *
- * This is only needed for the audio recorder utility which opens
- * one controller for playback and another for recording
- *
- * @param	aController
- *			a reference to the client controller object to use
- * @param	aEventMonitor
- *			a reference to an event monitor object for receiving
- *			events from the controller
- * @param	aControllerMode
- *			indicates whether this controller is to be used for recording
- *          or playback or converting
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::ConfigureSecondaryController(
-	RMMFController& aController,
-	CMMFControllerEventMonitor& aEventMonitor,
-	TControllerMode aControllerMode)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::ConfigureSecondaryController\n"));
-    #endif
-	ConfigureController(
-		*iSecondaryConfig,
-		aController,
-		aEventMonitor,
-		aControllerMode);
-	}
-
-void CMMFFindAndOpenController::Init()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::Init\n"));
-    #endif
-	// This should be called prior to opening, so reset the error
-	iError = KErrNone;
-	iSourceSinkConfigured = EFalse;
-	iControllerCount = 0;
-	}
-
-void CMMFFindAndOpenController::ConfigureSourceSink(
-	CConfig& config,
-	TSourceSink aSource,
-	TSourceSink aSink)
-	{
-	TInt err;
-	TRAP(err, config.iSource = CreateSourceSinkL(aSource));
-	if (err != KErrNone)
-		{
-		iError = err;
-		return;
-		}
-
-	TRAP(err, config.iSink = CreateSourceSinkL(aSink));
-	if (err != KErrNone)
-		{
-		iError = err;
-		return;
-		}
-	}
-
-
-void CMMFFindAndOpenController::ConfigureSourceSink(
-	CConfig& config,
-	const TMMSource& aSource,
-	TSourceSink aSink)
-	{
-	TInt err;
-	TRAP(err, config.iSource = CreateSourceSinkL(aSource));
-	if (err != KErrNone)
-		{
-		iError = err;
-		return;
-		}
-
-	TRAP(err, config.iSink = CreateSourceSinkL(aSink));
-	if (err != KErrNone)
-		{
-		iError = err;
-		return;
-		}
-	}
-
-
-
-/**
- * Configure the primary controller's source and sink
- * The descriptors passed to this function are copied so they do not need to be persistent.
- * To simplify the API, any errors that occur are reported back asynchronously following
- * a subsequent call to OpenByXXX()
- *
- * @param	aSourceUid
- *			the UID of the data source
- * @param	aSourceData
- *			a reference to a descriptor used to configure the source
- * @param	aSinkUid
- *			the UID of the data sink
- * @param	aSinkData
- *			a reference to a descriptor used to configure the sink
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::ConfigureSourceSink(
-	TSourceSink aSource,
-	TSourceSink aSink)
-	{
-
-	CConfig* config = NULL;
-
-	Init();
-	config = iPrimaryConfig;
-
-
-	// must have already called ConfigureController()
-	__ASSERT_ALWAYS(config->iController != NULL, CUPanic(EMMFMediaClientUtilityBadState));
-
-	ConfigureSourceSink(
-		*config,
-		aSource,
-		aSink);
-	iCurrentConfig = config;
-
-	iSourceSinkConfigured = ETrue;
-	}
-
-
-/**
- * Configure the primary controller's source and sink
- * The descriptors passed to this function are copied so they do not need to be persistent.
- * To simplify the API, any errors that occur are reported back asynchronously following
- * a subsequent call to OpenByXXX()
- *
- * @param	aSourceUid
- *			the UID of the data source
- * @param	aSourceData
- *			a reference to a descriptor used to configure the source
- * @param	aSinkUid
- *			the UID of the data sink
- * @param	aSinkData
- *			a reference to a descriptor used to configure the sink
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::ConfigureSecondarySourceSink(
-	TSourceSink aSource,
-	TSourceSink aSink)
-	{
-	if (iError != KErrNone)
-		{
-		// if there was an error configuring the primary source/sink, do not try the secondary one
-		// Don't return the error, since the stored error will be returned by the OpenBy... method
-		return;
-		}
-
-	CConfig* config = NULL;
-
-	config = iSecondaryConfig;
-
-	// must have already configured the primary controller
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-	config = iSecondaryConfig;
-
-	// must have already called ConfigureController()
-	__ASSERT_ALWAYS(config->iController != NULL, CUPanic(EMMFMediaClientUtilityBadState));
-
-	ConfigureSourceSink(
-		*config,
-		aSource,
-		aSink);
-	iCurrentConfig = config;
-
-	iSourceSinkConfigured = ETrue;
-	}
-
-
-
-
- void CMMFFindAndOpenController::ConfigureSourceSink(
-	const TMMSource& aSource,
-	TSourceSink aSink)
-	{
-	Init();
-	CConfig* config = iPrimaryConfig;
-
-	// must have already called ConfigureController()
-	__ASSERT_ALWAYS(config->iController != NULL, CUPanic(EMMFMediaClientUtilityBadState));
-
-	ConfigureSourceSink(
-		*config,
-		aSource,
-		aSink);
-	iCurrentConfig = config;
-
-	iSourceSinkConfigured = ETrue;
-	}
-
-
-
-
-/**
- * Opens a controller using the supplied controller UID
- * and adds the source & sink
- * Completion is indicated asynchonously by a call to MfaocComplete()
- *
- * @param	aControllerUid
- *			the UID of the primary controller
- * @param	aControllerUid
- *			the UID of the secondary controller
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::OpenByControllerUid(
-		TUid aControllerUid,
-		TUid aSecondaryControllerUid)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::OpenByControllerUid\n"));
-    #endif
-	// must have already called ConfigureSourceSink()
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-
-	// Have there been any errors so far ?
-	if (iError != KErrNone)
-		{
-	    SchedSendError();
-		return;
-		}
-
-	if (iCurrentConfig == iPrimaryConfig)
-		{
-		// only do this for the playback controller
-		TRAP(iError, iCurrentConfig->iSource->EvaluateIntentL())
-
-		if (iError != KErrNone)
-			{
-	    	SchedSendError();
-			return;
-			}
-		}
-
-	iPrimaryConfig->iControllerUid = aControllerUid;
-	if (iCurrentConfig == iSecondaryConfig)
-		{
-		if (aSecondaryControllerUid == KNullUid)
-			iSecondaryConfig->iControllerUid = aControllerUid;
-		else
-			iSecondaryConfig->iControllerUid = aSecondaryControllerUid;
-		}
-
-	iMode = EOpenByControllerUid;
-	iControllerImplInfo = NULL;
-	iState = EOpenController;
-	KickState();
-	}
-
-/**
- * Opens a controller using the supplied file name
- * and adds the source & sink
- * A copy is made of the filename or file handle so that it need not be persistent
- * Completion is indicated asynchonously by a call to MfaocComplete()
- *
- * @param	aSource
- *			a reference to a TFileSource object to be used when searching
- *          for a controller
- * @param	aFileNameSecondary
- *			a reference to the seconday filename to be used when searching
- *          for a controller. This need only be supplied when converting
- *			between two files.
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::OpenByFileSource(const TMMSource& aSource, const TDesC& aFileNameSecondary)
-	{
-	// must have already called ConfigureSourceSink()
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-
-	TInt err;
-	// Have there been any errors so far ?
-	if (iError != KErrNone)
-		{
-		SchedSendError();
-		return;
-		}
-
-	if (aSource.SourceType()==KUidMMFileSource)
-		{
-		const TMMFileSource& fileSource = static_cast<const TMMFileSource&>(aSource);
-		iFileName = fileSource.Name();
-		}
-
-	if (aSource.SourceType()==KUidMMFileHandleSource)
-		{
-		const TMMFileHandleSource& fileHandleSource = static_cast<const TMMFileHandleSource&>(aSource);
-		err = iFileHandle.Duplicate(fileHandleSource.Handle());
-
-
-		if (err != KErrNone)
-			{
-			SchedSendError(err);
-			return;
-			}
-
-		iFileHandle.Name(iFileName); //ignore error return since we'll just do without the filename if not available
-
-
-		iUseFileHandle = ETrue;
-		}
-
-	TRAP(err, iUniqueId = aSource.UniqueId().AllocL());
-	iIntent = aSource.Intent();
-	if (err != KErrNone)
-		{
-		SchedSendError(err);
-		return;
-		}
-
-
-	// take a copy of the secondary file name
-	iFileNameSecondary = aFileNameSecondary;
-
-	iMode = EOpenByFileName;
-	iState = EBuildControllerList;
-	KickState();
-	}
-
-/**
- * Opens a controller using the supplied format UID
- * and adds the source & sink
- * Completion is indicated asynchonously by a call to MfaocComplete()
- *
- * @param	aFormatUid
- *			the UID of a format that must be supported by the controller
- * @param	aFormatUidSecondary
- *			the UID of a secondary format that must be supported by the controller
- *			This need only be supplied when converting between two differnet formats.
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::OpenByFormatUid(TUid aFormatUid, TUid aFormatUidSecondary)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::OpenByFormatUid\n"));
-    #endif
-	// must have already called ConfigureSourceSink()
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-
-	// Have there been any errors so far ?
-	if (iError != KErrNone)
-		{
-		SchedSendError();
-		return;
-		}
-
-	iFormatUid = aFormatUid;
-	iFormatUidSecondary = aFormatUidSecondary;
-
-	iMode = EOpenByFormatUid;
-	iState = EBuildControllerList;
-	KickState();
-	}
-
-/**
- * Opens a controller using the supplied descriptor
- * and adds the source & sink
- * Completion is indicated asynchonously by a call to MfaocComplete()
- *
- * @param	aDescriptor
- *			a reference to the descriptor to be used when searching
- *          for a controller
- *
- * @internalComponent
- */
- void  CMMFFindAndOpenController::OpenByDescriptor(const TDesC8& aDescriptor)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::OpenByDescriptor\n"));
-    #endif
-	// must have already called ConfigureSourceSink()
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-
-	// Have there been any errors so far ?
-	if (iError != KErrNone)
-		{
-		SchedSendError();
-		return;
-		}
-
-	// take a copy of the descriptor
-	TUint8* desBufferPtr = const_cast<TUint8*> (aDescriptor.Ptr());
-	iDescriptor.Set( desBufferPtr,aDescriptor.Length(),aDescriptor.Length());
-
-	iMode = EOpenByDescriptor;
-	iState = EBuildControllerList;
-	KickState();
-	}
-
-/**
- * Opens a controller using the supplied URL
- * and adds the source & sink
- * Completion is indicated asynchonously by a call to MfaocComplete()
- *
- * @param	aUrl
- *			a reference to the URL to be used when searching for a controller
- * @param	aIapId
- *          the IAP ID to be used when searching for a controller
- * @param	aMimeType
- *          the MIME type of the data to be used when searching for a controller
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::OpenByUrl(const TDesC& aUrl, TInt aIapId, const TDesC8& aMimeType)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::OpenByUrl\n"));
-    #endif
-	// must have already called ConfigureSourceSink()
-	__ASSERT_ALWAYS(iSourceSinkConfigured, CUPanic(EMMFMediaClientUtilityBadState));
-
-	// Have there been any errors so far ?
-	if (iError != KErrNone)
-		{
-		SchedSendError();
-		return;
-		}
-
-	// take a copy of the Url
-	delete iUrl;
-	iUrl = NULL;
-	iUrl = aUrl.Alloc();
-	if (iUrl == NULL)
-		{
-		SchedSendError(KErrNoMemory);
-		return;
-		}
-
-	// take a copy of the IapId
-	iIapId = aIapId;
-
-	// take a copy of the mime type
-	delete iMimeType;
-	iMimeType = NULL;
-	iMimeType = aMimeType.Alloc();
-	if (iMimeType == NULL)
-		{
-		SchedSendError(KErrNoMemory);
-		return;
-		}
-
-	iMode = EOpenByUrl;
-	iState = EBuildControllerList;
-	KickState();
-	}
-
-/**
- * Static function to return a TMMFFileConfig object
- * suitable for passing to ConfigureSourceSink()
- *
- * @param	aFileName
- *          the filename to use
- *
- * @internalComponent
- */
- TMMFFileConfig CMMFFindAndOpenController::GetConfigFile(const TDesC& aFileName)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::GetConfigFile\n"));
-    #endif
-	TMMFFileConfig sourceSinkData;
-	sourceSinkData().iPath = aFileName;
-	return sourceSinkData;
-	}
-
-/**
- * Static function to return a TMMFDescriptorConfig object
- * suitable for passing to ConfigureSourceSink()
- *
- * @param	aFileName
- *          the filename to use
- *
- * @internalComponent
- */
- TMMFDescriptorConfig CMMFFindAndOpenController::GetConfigDescriptor(const TDesC8& aDescriptor)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::GetConfigDescriptor\n"));
-    #endif
-	TMMFDescriptorConfig sourceSinkData;
-	sourceSinkData().iDes = (TAny*)&aDescriptor;
-	sourceSinkData().iDesThreadId = RThread().Id();
-	return sourceSinkData;
-	}
-
-/**
- * Static function to create a CBufFlat object
- * suitable for passing to ConfigureSourceSink()
- *
- * @param	aUrlCfgBuffer
- *          the reference to a caller-supplied pointer used to create
- *			a CBufFlat object. The caller is responsible for deletion.
- * @param	aUrl
- *			a reference to the URL to be used
- * @param	aIapId
- *          the IAP ID to be used
- * @return	can return KErrNone or KErrNoMemory
- *
- * @internalComponent
- */
- TInt CMMFFindAndOpenController::GetConfigUrl(CBufFlat*& aUrlCfgBuffer, const TDesC& aUrl, TInt aIapId)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::GetConfigDescriptor\n"));
-    #endif
-	TInt error;
-	delete aUrlCfgBuffer;
-	aUrlCfgBuffer = NULL;
-
-	CMMFUrlParams* urlCfg = NULL;
-	TRAP(error, urlCfg = CMMFUrlParams::NewL(aUrl,aIapId));
-	if (error != KErrNone)
-		return error;
-
-	TRAP(error,
-		aUrlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC();
-		CleanupStack::Pop(aUrlCfgBuffer);
-		);
-
-	delete urlCfg;
-
-	return error;
-	}
-
-/**
- * ReOpens the previously opened primary controller
- *
- * @internalComponent
- */
- void CMMFFindAndOpenController::ReOpen()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::ReOpen\n"));
-    #endif
-	// should already have a valid controller uid so just open it
-	iControllerImplInfo = NULL;
-	iState = EOpenController;
-	KickState();
-	}
-
-void CMMFFindAndOpenController::OpenPrimaryController(void)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::OpenPrimaryController\n"));
-    #endif
-	iCurrentConfig = iPrimaryConfig;
-	switch(iMode)
-		{
-		case EOpenByFileName:
-		case EOpenByFormatUid:
-		case EOpenByDescriptor:
-		case EOpenByUrl:
-			iState = EBuildControllerList;
-			break;
-		case EOpenByControllerUid:
-			iControllerImplInfo = NULL;
-			iState = EOpenController;
-			break;
-		}
-	KickState();
-	}
-
-void CMMFFindAndOpenController::KickState()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::KickState\n"));
-    #endif
-	TRequestStatus* status = &iStatus;
-	User::RequestComplete(status, KErrNone);
-	SetActive();
-	}
-
-void CMMFFindAndOpenController::CloseController()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::CloseController\n"));
-    #endif
-	if (iCurrentConfig->iEventMonitor)
-		iCurrentConfig->iEventMonitor->Cancel();
-	iCurrentConfig->iController->Close();
-	}
-
-void CMMFFindAndOpenController::Process()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::Process\n"));
-    #endif
-	switch(iState)
-		{
-		case EBuildControllerList:
-			switch(iMode)
-				{
-				case EOpenByFileName:
-					TRAP(iError, BuildControllerListFileNameL());
-					break;
-				case EOpenByDescriptor:
-					TRAP(iError, BuildControllerListDescriptorL());
-					break;
-				case EOpenByUrl:
-					TRAP(iError, BuildControllerListUrlL());
-					break;
-				case EOpenByFormatUid:
-					TRAP(iError, BuildControllerListFormatL());
-					break;
-				default:
-					CUPanic(EMMFMediaClientUtilityBadState);
-				}
-
-			if (iError != KErrNone)
-				{
-				iState = EIdle;
-				SendError();
-				break;
-				}
-
-			// try the first controller
-			iControllerIndex = -1;
-			TryNextController();
-			break;
-
-		case EOpenController:
-			// Make sure any existing controller is closed.
-			CloseController();
-
-			// Open the controller
-			if (iControllerImplInfo)
-				{
-				iError = iCurrentConfig->iController->Open(*iControllerImplInfo, iPrioritySettings);
-				}
-			else
-				{
-				iError = iCurrentConfig->iController->Open(iCurrentConfig->iControllerUid, iPrioritySettings);
-				}
-
-			if (iError)
-				{
-				TryNextController();
-				}
-			else
-				{
-
-				iCurrentConfig->iEventMonitor->Start();
-
-				if (iCurrentConfig == iSecondaryConfig)
-					{
-					iState = EAddSource;
-					KickState();
-					}
-				else
-					{
-					iState = EAddSink;
-					KickState();
-					}
-				}
-			break;
-
-		case EAddSource:
-			{
-			iState = EWaitingForSource;
-			const CMMSourceSink* source = iCurrentConfig->iSource;
-			iAddDataSourceSinkAsync->AddDataSource(*iCurrentConfig->iController,
-												   source->SourceSinkUid(),
-												   source->SourceSinkData());
-			}
-			break;
-
-		case EAddSink:
-			{
-			iState = EWaitingForSink;
-			const CMMSourceSink* sink = iCurrentConfig->iSink;
-			iAddDataSourceSinkAsync->AddDataSink(*iCurrentConfig->iController,
-												 sink->SourceSinkUid(),
-												 sink->SourceSinkData());
-			}
-			break;
-
-		case EWaitingForSource:
-			break;
-
-		case EWaitingForSink:
-			break;
-
-		case ESendError:
-			SendError();
-			iState = EIdle;
-			break;
-
-		case EIdle:
-		default:
-			break;
-		}
-	}
-
-void CMMFFindAndOpenController::TryNextController()
-	{
-
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::TryNextController\n"));
-    #endif
-	// If an error occurred close the controller.
-	if (iError != KErrNone)
-		CloseController();
-
-	// take the first available exit if we're out of memory
-	if (iError == KErrNoMemory)
-		{
-		SendError();
-		return;
-		}
-
-	if (iMode == EOpenByControllerUid || ++iControllerIndex >= iControllerCount)
-		{
-		SendError(KErrNotSupported);		// KErrNotSupported
-		return;
-		}
-
-	if (iMode == EOpenByFileName || iMode == EOpenByFormatUid)
-		{
-		iControllerImplInfo = iPrioritisedControllers[iControllerIndex];
-		}
-	else	//if (iMode == EOpenByDescriptor || iMode == EOpenByUrl)
-		{
-		iControllerImplInfo = iControllers[iControllerIndex];
-		}
-
-        // This Flag is defined so that if the Helix Controller Supports
-        // the playback of Local Media for WMA, then the ProgDL still
-        // goes through the Old WMA Controller( AdvancedAudioController)
-        // We are launching the Old WMA Controller using the UID.
-
-#ifdef __WINDOWS_MEDIA
-    HBufC8* mimeType = HBufC8::NewLC(KMaxMimeLength);
-    TPtr8 mimeTypePtr = mimeType->Des();
-    mimeTypePtr.Copy(KWMAMimeType());
-
-    TBool IsSupported = EFalse;
-    const RMMFFormatImplInfoArray& playFormatInfo = iControllerImplInfo->PlayFormats();
-
-	for (TInt p = 0; p < iControllerImplInfo->PlayFormats().Count(); p++)
-		{
-		const CMMFFormatImplementationInformation* format = iControllerImplInfo->PlayFormats()[p];
-        IsSupported = format->SupportsMimeType(*mimeType);
-        if(IsSupported)
-            break;
-        }
-
-    if(IsSupported)
-        {
-        iControllerImplInfo = NULL;
-        iCurrentConfig->iControllerUid = TUid::Uid(0x10207A9B);
-        }
-    else
-#endif
-        {
-    	iCurrentConfig->iControllerUid = iControllerImplInfo->Uid();
-        }
-
-#ifdef __WINDOWS_MEDIA
-	CleanupStack::PopAndDestroy(mimeType);
-#endif
-	iState = EOpenController;
-	KickState();
-	}
-
-void CMMFFindAndOpenController::MadssaoAddDataSourceSinkAsyncComplete(TInt aError, const TMMFMessageDestination& aHandle)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::MadssaoAddDataSourceSinkAsyncComplete\n"));
-    #endif
-	iError = aError;
-
-	// take the first available exit if we're out of memory
-	// or we've been cancelled
-	if (iError == KErrNoMemory || iError == KErrCancel)
-		{
-		SendError();
-		return;
-		}
-
-	// failed to add source or sink - try the next controller
-	if (aError != KErrNone)
-		{
-		TryNextController();
-		return;
-		}
-
-	if (iState == EWaitingForSource)
-		{
-		iSourceHandle = aHandle;
-		if (iCurrentConfig == iSecondaryConfig)
-			{
-			iState = EAddSink;
-			}
-		else	// completed ok !
-			{
-			iState = EIdle;
-			iError = KErrNone;
-			SendError();
-			return;
-			}
-		}
-	else if (iState == EWaitingForSink)
-		{
-		iSinkHandle = aHandle;
-		if (iCurrentConfig == iSecondaryConfig)	// completed ok !
-			{
-			iState = EIdle;
-			iError = KErrNone;
-			SendError();
-			return;
-			}
-		else
-			{
-			iState = EAddSource;
-			}
-		}
-
-	KickState();
-	}
-
-void CMMFFindAndOpenController::SendError(TInt aError)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::SendError err= %d\n"),aError);
-    #endif
-	if (iError == KErrNone)
-		iError = aError;
-
-	iObserver.MfaocComplete(iError, iCurrentConfig->iController, iCurrentConfig->iControllerUid, &iSourceHandle, &iSinkHandle);
-
-	// if we've just attempted to open the Secondary controller,
-	// try to open the Primary controller
-	if (iCurrentConfig == iSecondaryConfig)
-		{
-		if (iError == KErrNone)
-			OpenPrimaryController();
-		}
-
-	// if we failed to open, may as well free up some memory
-	// if open succeeded we need to preserve state in case of a re-open
-	if (iError != KErrNone)
-		Close();
-	}
-
-void CMMFFindAndOpenController::SchedSendError(TInt aError)
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::SchedSendError\n"));
-    #endif
-	if (aError != KErrNone)
-		iError = aError;
-	iState = ESendError;
-	KickState();
-	}
-
-void CMMFFindAndOpenController::BuildControllerListFileNameL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::BuildControllerListFileNameL\n"));
-    #endif
-	// Retrieve a list of possible controllers from ECOM
-	// If we don't have a match, leave with unsupported
-
-	iControllers.ResetAndDestroy();
-	iPrioritisedControllers.Reset();
-
-	TControllerMode mode = iCurrentConfig->iControllerMode;
-
-	// if we're playing, try to get the MIME type from the Content Access
-	// Framework (CAF) & use that to select a controller - if that fails,
-	// try to select a controller based on the header data/file extension
-
-	CMMFUtilityFileInfo* fileInfo = NULL;
-
-	TInt error;
-
-	//If the current CMMSourceSink is a CMMFileSourceSink
-	// Using the previous version we'd get KErrCANoPermission when calling EvaluateIntent in the
-	// CMMFUtilityFileInfo ConstructL as the intent == EUnknown, so now pass the intent as a parameter
-	// to TMMFileHandleSource and....
-	if (iUseFileHandle)
-		{
-		if (iUniqueId != NULL)
-			{
-			TMMFileHandleSource fileHandleSource(iFileHandle, (*iUniqueId), iIntent);
-			TRAP(error, fileInfo = CMMFUtilityFileInfo::NewL(fileHandleSource));
-			}
-		else
-			{
-			TMMFileHandleSource fileHandleSource(iFileHandle);
-			TRAP(error, fileInfo = CMMFUtilityFileInfo::NewL(fileHandleSource));
-			}
-		}
-	else
-		{
-		if (iUniqueId != NULL)
-			{
-			TMMFileSource fileSource(iFileName, (*iUniqueId), iIntent);
-			TRAP(error, fileInfo = CMMFUtilityFileInfo::NewL(fileSource));
-			}
-		else
-			{
-			TMMFileSource fileSource(iFileName);
-			TRAP(error, fileInfo = CMMFUtilityFileInfo::NewL(fileSource));
-			}
-		}
-
-	if (fileInfo != NULL)
-		{
-		CleanupDeletePushL(fileInfo);
-		}
-
-	if (error != KErrNone)
-		{
-		// if playback mode, leave for any error
-		// if record mode, allow KErrNotFound
-		if (mode == EPlayback || (mode != EPlayback && error != KErrNotFound))
-			{
-			User::Leave(error);
-			}
-		}
-
-	CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
-	RArray<TUid> mediaIds;
-	CleanupClosePushL(mediaIds);
-	User::LeaveIfError(mediaIds.Append(iMediaId));
-
-	cSelect->SetMediaIdsL(mediaIds, iMediaIdMatchType);
-
-
-	if (mode == EPlayback)
-		{
-		ASSERT(fileInfo!=NULL);
-		TBuf8<KMaxMimeLength> mimeType;
-		TBool mimeTypeKnown = fileInfo->GetFileMimeTypeL(mimeType);
-		if (mimeTypeKnown)
-			{
-			CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
-			fSelect->SetMatchToMimeTypeL(mimeType);
-			cSelect->SetRequiredPlayFormatSupportL(*fSelect);
-			cSelect->ListImplementationsL(iControllers);
-			CleanupStack::PopAndDestroy(fSelect);
-			}
-
-
-		// copy to the iPrioritisedControllers array - this is a NOOP if the
-		// MIME type is not known since iControllers will be empty
-		ASSERT(mimeTypeKnown || iControllers.Count() == 0);
-		for (TInt controllerIndex=0; controllerIndex < iControllers.Count(); controllerIndex++)
-			User::LeaveIfError(iPrioritisedControllers.Append(iControllers[controllerIndex]));
-
-		iControllerCount = iPrioritisedControllers.Count();
-		if (iControllerCount > 0)
-			{
-			// Clean up
-			// cSelect, mediaIds,
-			CleanupStack::PopAndDestroy(2, cSelect);
-			if (fileInfo != NULL)
-				{
-				CleanupStack::PopAndDestroy(fileInfo);
-				}
-			return;
-			}
-		}
-
-	// Retrieve header data first. If file doesn't exist, its ok.
-	HBufC8* headerData = HBufC8::NewLC(KMaxHeaderSize);
-	TPtr8 headerDataPtr = headerData->Des();
-	if (fileInfo)
-		{
-		fileInfo->GetFileHeaderDataL(headerDataPtr, KMaxHeaderSize);
-		}
-
-	// Get the filename's suffix
-	HBufC8* fileSuffix = CMMFClientUtility::GetFileExtensionL(iFileName);
-
-	CleanupStack::PushL(fileSuffix);
-	TPtr8 fileSuffixPtr = fileSuffix->Des();
-
-	// Get the secondary filename's header data (for convert)
-	HBufC8* headerDataSecondary = HBufC8::NewLC(KMaxHeaderSize);
-	TPtr8 headerDataPtrSecondary = headerDataSecondary->Des();
-	if (iFileNameSecondary.Length() > 0 && fileInfo)
-		{
-		fileInfo->GetFileHeaderDataL(headerDataPtrSecondary, KMaxHeaderSize);
-		}
-
-	// Get the secondary filename's suffix
-	HBufC8* fileSuffixSecondary = CMMFClientUtility::GetFileExtensionL(iFileNameSecondary);
-	CleanupStack::PushL(fileSuffixSecondary);
-	TPtr8 fileSuffixPtrSecondary = fileSuffixSecondary->Des();
-
-
-	CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
-
-	if (mode == EPlayback || mode == EConvert)
-		cSelect->SetRequiredPlayFormatSupportL(*fSelect);
-	if (mode == ERecord || mode == EConvert)
-		cSelect->SetRequiredRecordFormatSupportL(*fSelect);
-
-	cSelect->ListImplementationsL(iControllers);
-
-	if (iControllers.Count()==0)
-		User::Leave(KErrNotSupported);
-
-	if (mode == ERecord)
-		{
-		CMMFClientUtility::PrioritiseControllersL(
-			iControllers,
-			headerDataPtrSecondary,
-			fileSuffixPtrSecondary,
-			headerDataPtr,
-			fileSuffixPtr,
-			iPrioritisedControllers);
-		}
-	else
-		{
-		CMMFClientUtility::PrioritiseControllersL(
-			iControllers,
-			headerDataPtr,
-			fileSuffixPtr,
-			headerDataPtrSecondary,
-			fileSuffixPtrSecondary,
-			iPrioritisedControllers);
-		}
-
-	iControllerCount = iPrioritisedControllers.Count();
-	if (iControllerCount == 0)
-		User::Leave(KErrNotSupported);
-
-	// Clean up
-	// cSelect, mediaIds,
-	// headerData, fileSuffix, headerDataSecondary, fileSuffixSecondary,
-	// fSelect
-	CleanupStack::PopAndDestroy(7, cSelect);
-	if (fileInfo != NULL)
-		{
-		CleanupStack::PopAndDestroy(fileInfo);
-		}
-	}
-
-void CMMFFindAndOpenController::BuildControllerListDescriptorL()
-	{
-	// Retrieve a list of possible controllers from ECOM
-	// If we don't have a match, leave with unsupported
-
-	iControllers.ResetAndDestroy();
-
-	CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
-	CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
-
-
-	RArray<TUid> mediaIds;
-	CleanupClosePushL(mediaIds);
-	User::LeaveIfError(mediaIds.Append(iMediaId));
-
-	cSelect->SetMediaIdsL(mediaIds, iMediaIdMatchType);
-
-	TPtrC8 header = iDescriptor.Left(KMaxHeaderSize);
-	fSelect->SetMatchToHeaderDataL(header);
-
-
-	TControllerMode mode = iCurrentConfig->iControllerMode;
-	if (mode == EPlayback || mode == EConvert)
-		cSelect->SetRequiredPlayFormatSupportL(*fSelect);
-	if (mode == ERecord || mode == EConvert)
-		cSelect->SetRequiredRecordFormatSupportL(*fSelect);
-
-	cSelect->ListImplementationsL(iControllers);
-
-	iControllerCount = iControllers.Count();
-	if (iControllerCount == 0)
-		User::Leave(KErrNotSupported);
-
-	// Clean up
-	// cSelect, fSelect, mediaIds
-	CleanupStack::PopAndDestroy(3, cSelect);
-	}
-
-void CMMFFindAndOpenController::BuildControllerListUrlL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::BuildControllerListUrlL"));
-    #endif
-	// Retrieve a list of possible controllers from ECOM
-	// If we don't have a match, leave with unsupported
-
-	iControllers.ResetAndDestroy();
-
-	CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
-	CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
-
-	RArray<TUid> mediaIds;
-	CleanupClosePushL(mediaIds);
-	User::LeaveIfError(mediaIds.Append(iMediaId));
-
-	cSelect->SetMediaIdsL(mediaIds, iMediaIdMatchType);
-
-
- 	if (*iMimeType != KNullDesC8)
-		{
-		fSelect->SetMatchToMimeTypeL(*iMimeType);//We match to mime type
-		}
-	else
-		fSelect->SetMatchToUriL(*iUrl);
-
-
-	TControllerMode mode = iCurrentConfig->iControllerMode;
-	if (mode == EPlayback || mode == EConvert)
-		cSelect->SetRequiredPlayFormatSupportL(*fSelect);
-	if (mode == ERecord || mode == EConvert)
-		cSelect->SetRequiredRecordFormatSupportL(*fSelect);
-
-	cSelect->ListImplementationsL(iControllers);
-
-	iControllerCount = iControllers.Count();
-	if (iControllerCount == 0)
-		User::Leave(KErrNotSupported);
-
-	// Clean up
-	// cSelect, fSelect, mediaIds
-	CleanupStack::PopAndDestroy(3, cSelect);
-	}
-
-void CMMFFindAndOpenController::BuildControllerListFormatL()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::BuildControllerListFormatL"));
-    #endif
-	// Retrieve a list of possible controllers from ECOM
-	// If we don't have a match, leave with unsupported
-
-	iControllers.ResetAndDestroy();
-	iPrioritisedControllers.Reset();
-
-	CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC();
-
-	// Select the media IDs to allow
-	RArray<TUid> mediaIds;
-	CleanupClosePushL(mediaIds);
-	User::LeaveIfError(mediaIds.Append(iMediaId));
-
-	cSelect->SetMediaIdsL(mediaIds, iMediaIdMatchType);
-
-	CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
-
-	TControllerMode mode = iCurrentConfig->iControllerMode;
-	if (mode == EPlayback || mode == EConvert)
-		cSelect->SetRequiredPlayFormatSupportL(*fSelect);
-	if (mode == ERecord || mode == EConvert)
-		cSelect->SetRequiredRecordFormatSupportL(*fSelect);
-
-	//Obtain a list of the controllers
-	cSelect->ListImplementationsL(iControllers);
-
-	CleanupStack::PopAndDestroy(3, cSelect); // cSelect, mediaIds, fSelect
-
-	iControllerCount = iControllers.Count();
-	if (iControllerCount == 0)
-		User::Leave(KErrNotSupported);
-
-	TUid formatUidPrimary;
-	TUid formatUidSecondary;
-	if (mode == ERecord)
-		{
-		formatUidSecondary = iFormatUid;
-		formatUidPrimary = iFormatUidSecondary;
-		}
-	else
-		{
-		formatUidPrimary = iFormatUid;
-		formatUidSecondary = iFormatUidSecondary;
-		}
-
-	for (TInt controllerIndex=0; controllerIndex < iControllers.Count(); controllerIndex++)
-		{
-		const RMMFFormatImplInfoArray& recFormatInfo = iControllers[controllerIndex]->RecordFormats();
-		const RMMFFormatImplInfoArray& playFormatInfo = iControllers[controllerIndex]->PlayFormats();
-
-		TBool playFormatMatched = EFalse;
-		TBool recordFormatMatched = EFalse;
-
-		if (formatUidPrimary == KNullUid)
-			{
-			playFormatMatched = ETrue;
-			}
-		else
-			{
-			for(TInt playFormatIndex =0; playFormatIndex < playFormatInfo.Count(); playFormatIndex++)
-				{
-				if(playFormatInfo[playFormatIndex]->Uid() == formatUidPrimary)
-					{
-					playFormatMatched = ETrue;
-					break;
-					}
-				}
-			}
-
-		if (formatUidSecondary == KNullUid)
-			{
-			recordFormatMatched = ETrue;
-			}
-		else
-			{
-			for (TInt recFormatIndex =0; recFormatIndex < recFormatInfo.Count(); recFormatIndex++)
-				{
-				if (recFormatInfo[recFormatIndex]->Uid() == formatUidSecondary)
-					{
-					recordFormatMatched = ETrue;
-					break;
-					}
-				}
-			}
-
-		if (playFormatMatched && recordFormatMatched)
-			User::LeaveIfError(iPrioritisedControllers.Append(iControllers[controllerIndex]));
-		}
-
-	iControllerCount = iPrioritisedControllers.Count();
-	if (iControllerCount == 0)
-		User::Leave(KErrNotSupported);
-	}
-
-CMMSourceSink* CMMFFindAndOpenController::CreateSourceSinkL(const TSourceSink& aParams)
-	{
-	if (aParams.iUseFileHandle)
-		{
-		return CMMFileSourceSink::NewL(aParams.iUid, aParams.iFileHandle);
-		}
-	return CMMSourceSink::NewL(aParams.iUid, aParams.iConfigData);
-	}
-
-
-CMMSourceSink* CMMFFindAndOpenController::CreateSourceSinkL(const TMMSource& aSource)
-	{
-	if (!(aSource.SourceType()==KUidMMFileSource ||
-		aSource.SourceType()==KUidMMFileHandleSource))
-		User::Leave(KErrNotSupported);
-
-	return CMMFileSourceSink::NewL(KUidMmfFileSource, aSource);
-	}
-
-
-
- CMMFFindAndOpenController::TSourceSink::TSourceSink(TUid aUid, const TDesC8& aConfigData)
-	: iConfigData(aConfigData)
-	{
-	iUid = aUid;
-
-	iUseFileHandle = EFalse;
-	}
-
- CMMFFindAndOpenController::TSourceSink::TSourceSink(TUid aUid, const RFile& aFile)
-	: iConfigData(KNullDesC8)
-	{
-	iUid = aUid;
-
-	iFileHandle = aFile;
-	iUseFileHandle = ETrue;
-	}
-
-CMMFFindAndOpenController::CConfig::CConfig()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::CConfig"));
-    #endif
-	}
-
-void CMMFFindAndOpenController::CConfig::Close()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::Close"));
-    #endif
-	delete iSource;
-	iSource = NULL;
-	delete iSink;
-	iSink = NULL;
-	}
-CMMFFindAndOpenController::CConfig::~CConfig()
-	{
-    #if _DEBUG
-      RDebug::Print(_L("CMMFFindAndOpenController::~CConfig"));
-    #endif
-	Close();
-	}
-
- CMMSourceSink* CMMSourceSink::NewLC(TUid aUid, const TDesC8& aDescriptor)
-	{
-	CMMSourceSink* self = new (ELeave) CMMSourceSink(aUid);
-	CleanupStack::PushL(self);
-	self->ConstructL(aDescriptor);
-	return self;
-	}
-
- CMMSourceSink* CMMSourceSink::NewL(TUid aUid, const TDesC8& aDescriptor)
-	{
-	CMMSourceSink* sourcesink = CMMSourceSink::NewLC(aUid, aDescriptor);
-	CleanupStack::Pop(sourcesink);
-	return sourcesink;
-	}
-
-CMMSourceSink::CMMSourceSink(TUid aUid)
-	: iUid(aUid)
-	{
-	}
-
-CMMSourceSink::~CMMSourceSink()
-	{
-	delete iBuf;
-	}
-
-void CMMSourceSink::ConstructL(const TDesC8& aDescriptor)
-	{
-	iBuf = aDescriptor.AllocL();
-	}
-
-TUid CMMSourceSink::SourceSinkUid() const
-	{
-	return iUid;
-	}
-
-const TDesC8& CMMSourceSink::SourceSinkData() const
-	{
-	return *iBuf;
-	}
-
- CMMFileSourceSink* CMMFileSourceSink::NewLC(TUid aUid, const RFile& aFile)
-	{
-	CMMFileSourceSink* self = new (ELeave) CMMFileSourceSink(aUid);
-	CleanupStack::PushL(self);
-	self->ConstructL(aFile);
-	return self;
-	}
-
- CMMFileSourceSink* CMMFileSourceSink::NewL(TUid aUid, const RFile& aFile)
-	{
-	CMMFileSourceSink* sourcesink = CMMFileSourceSink::NewLC(aUid, aFile);
-	CleanupStack::Pop(sourcesink);
-	return sourcesink;
-	}
-
-CMMFileSourceSink::CMMFileSourceSink(TUid aUid)
-	: CMMSourceSink(aUid)
-	{
-	}
-
-void CMMFileSourceSink::ConstructL(const RFile& aFile)
-	{
-	iHandle.Duplicate(aFile);
-	iUsingFileHandle = ETrue;
-	iFileName = HBufC::NewMaxL(KMaxFileName);
-	TPtr fileNamePtr = iFileName->Des();
-	iHandle.Name(fileNamePtr);
-	DoCreateFileHandleSourceConfigDataL();
-	}
-const TInt KExpandSize = 100;
-
-void CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL()
-	{
-	CBufFlat* buf = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(buf);
-	RBufWriteStream stream;
-	stream.Open(*buf);
-	CleanupClosePushL(stream);
-
-	TPckgBuf<RFile*> fileptr(&iHandle);
-	stream.WriteInt32L(KMMFileHandleSourceUid.iUid);
-
-	stream.WriteL(fileptr);
-
-	TInt length = 0;
-	if (iUniqueId != NULL)
-		length = iUniqueId->Length();
-	stream.WriteInt32L(length);
-	if (length>0)
-		stream.WriteL(*iUniqueId);
-
-	stream.WriteInt32L(iEnableUI);
-
-	stream.CommitL();
-	CleanupStack::PopAndDestroy(&stream);
-
-	iSourceSinkData = buf->Ptr(0).AllocL();
-
-	CleanupStack::PopAndDestroy(buf);
-	}
-
-const TDesC8& CMMFileSourceSink::SourceSinkData() const
-	{
-	ASSERT(iSourceSinkData);
-	return *iSourceSinkData;
-	}
-
-CMMFileSourceSink::~CMMFileSourceSink()
-	{
-	iHandle.Close();
-	delete iFileName;
-	delete iSourceSinkData;
-	delete iUniqueId;
-	}
-
- CMMFileSourceSink* CMMFileSourceSink::NewLC(TUid aUid, const TMMSource& aSource)
-	{
-	CMMFileSourceSink* self = new (ELeave) CMMFileSourceSink(aUid);
-	CleanupStack::PushL(self);
-	self->ConstructL(aSource);
-	return self;
-	}
-
- CMMFileSourceSink* CMMFileSourceSink::NewL(TUid aUid, const TMMSource& aSource)
-	{
-	CMMFileSourceSink* sourcesink = CMMFileSourceSink::NewLC(aUid, aSource);
-	CleanupStack::Pop(sourcesink);
-	return sourcesink;
-	}
-
-void CMMFileSourceSink::ConstructL(const TMMSource& aSource)
-	{
-	iUniqueId = aSource.UniqueId().AllocL();
-	iIntent = aSource.Intent();
-	iEnableUI = aSource.IsUIEnabled();
-
-	if (aSource.SourceType() == KUidMMFileSource)
-		{
-		const TMMFileSource& fileSource = static_cast<const TMMFileSource&>(aSource);
-		iFileName = fileSource.Name().AllocL();
-
-		DoCreateFileSourceConfigDataL();
-		}
-	else if (aSource.SourceType() == KUidMMFileHandleSource)
-		{
-		const TMMFileHandleSource& fileHandleSource = static_cast<const TMMFileHandleSource&>(aSource);
-		iHandle.Duplicate(fileHandleSource.Handle());
-		iUsingFileHandle = ETrue;
-		iFileName = HBufC::NewMaxL(KMaxFileName);
-		TPtr fileNamePtr = iFileName->Des();
-		iHandle.Name(fileNamePtr);
-
-		DoCreateFileHandleSourceConfigDataL();
-		}
-	else
-		{
-		User::Leave(KErrNotSupported);
-		}
-	}
-
-void CMMSourceSink::EvaluateIntentL()
-	{
-	}
-
-void CMMFileSourceSink::EvaluateIntentL()
-	{
-	if (iUsingFileHandle)
-		{
-   		ContentAccess::CContent* Content = ContentAccess::CContent::NewLC(iHandle);
-   		Content->OpenContentLC(iIntent, *iUniqueId);
-   		CleanupStack::PopAndDestroy(2, Content);
-		}
-	else
-		{
-		ContentAccess::CContent* Content = ContentAccess::CContent::NewLC(*iFileName);
-   		Content->OpenContentLC(iIntent, *iUniqueId);
-   		CleanupStack::PopAndDestroy(2, Content);
-		}
-	}
-
-
-
- void CMMFileSourceSink::EvaluateIntentL(ContentAccess::TIntent aIntent)
-	{
-	if (iUsingFileHandle)
-		{
-   		ContentAccess::CContent* Content = ContentAccess::CContent::NewLC(iHandle);
-   		Content->OpenContentLC(aIntent, *iUniqueId);
-   		CleanupStack::PopAndDestroy(2, Content);
-		}
-	else
-		{
-		ContentAccess::CContent* Content = ContentAccess::CContent::NewLC(*iFileName);
-   		Content->OpenContentLC(aIntent, *iUniqueId);
-   		CleanupStack::PopAndDestroy(2, Content);
-		}
-	}
-
-void CMMFileSourceSink::DoCreateFileSourceConfigDataL()
-	{
-	CBufFlat* buf = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(buf);
-	RBufWriteStream stream;
-	stream.Open(*buf);
-	CleanupClosePushL(stream);
-
-	stream.WriteInt32L(KMMFileSourceUid.iUid);
-	stream.WriteInt32L(iFileName->Length());
-	stream.WriteL(*iFileName);
-	TInt length = 0;
-	if (iUniqueId != NULL)
-		length = iUniqueId->Length();
-	stream.WriteInt32L(length);
-	if (length>0)
-		stream.WriteL(*iUniqueId);
-
-	stream.WriteInt32L(iEnableUI);
-
-	stream.CommitL();
-	CleanupStack::PopAndDestroy(&stream);
-
-	iSourceSinkData = buf->Ptr(0).AllocL();
-
-	CleanupStack::PopAndDestroy(buf);
-	}
-
-
-