devsoundextensions/drmaudioplayer/DRMPlayUtility/src/MediaClientDrm.cpp
author hgs
Mon, 18 Oct 2010 12:47:26 +0100
changeset 4 9d4397b300d1
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk44_01

/*
* Copyright (c) 2005-2006 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:   DRM PlayUtility
*
*/




// INCLUDE FILES
#include <DrmAudioSamplePlayer.h>
#include "DRMPlayClientServer.h"
#include "mmfclientdrmaudioplayer.h"
#include <mmf/common/mmfcontrollerpluginresolver.h>
#include <mmf/common/mmfbase.h>
#include <mmf/common/mmfdrmcustomcommands.h>
#include "drmaudioplayeradaptation.h"

// This is the UID defined by custom interface builder
const TUid KUidCustomInterfaceBuilderImpl = {0x10207A8E};

#ifdef _DEBUG
#define DEP_PRN0(str)   RDebug::Print(str)
#define DEP_PRN1(str, v1)   RDebug::Print(str, v1)
#define DEP_PRN2(str, v1, v2)   RDebug::Print(str, v1, v2)
#else
#define DEP_PRN0(str)
#define DEP_PRN1(str, v1)
#define DEP_PRN2(str, v1, v2)
#endif // _DEBUG


// ============================= LOCAL FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::NewL
// Constructs and initialises a new instance of the audio player utility.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C CDrmPlayerUtility* CDrmPlayerUtility::NewL(
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CDrmPlayerUtility* self = new(ELeave) CDrmPlayerUtility();
    CleanupStack::PushL(self);
    self->iProperties = CDrmAudioPlayerAdaptation::NewL( aCallback, aPriority, aPref );
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::NewFilePlayerL
// Constructs and initialises a new instance of the audio player utility for
// playing sampled audio data from a file. The audio data must be in a supported
// format (e.g. WAV and AU).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C CDrmPlayerUtility* CDrmPlayerUtility::NewFilePlayerL(
    const TDesC& aFileName,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CDrmPlayerUtility* self = new(ELeave) CDrmPlayerUtility();
    CleanupStack::PushL(self);
    self->iProperties = CDrmAudioPlayerAdaptation::NewFilePlayerL(aFileName, aCallback, aPriority, aPref);
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::NewDesPlayerL
// Constructs and initialises a new instance of the audio player utility for
// playing sampled audio data from a descriptor.  The audio data must be in a
// supported format (e.g. WAV and AU).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C CDrmPlayerUtility* CDrmPlayerUtility::NewDesPlayerL(
    const TDesC8& aData,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CDrmPlayerUtility* self = new(ELeave) CDrmPlayerUtility();
    CleanupStack::PushL(self);
    self->iProperties = CDrmAudioPlayerAdaptation::NewDesPlayerL( aData, aCallback, aPriority, aPref );
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::NewDesPlayerReadOnlyL
// Constructs and initialises a new instance of the audio player utility for
// playing sampled audio data from a read only descriptor.  The audio data must
// be in a supported format (e.g. WAV and AU).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C CDrmPlayerUtility* CDrmPlayerUtility::NewDesPlayerReadOnlyL(
    const TDesC8& aData,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CDrmPlayerUtility* self = new(ELeave) CDrmPlayerUtility();
    CleanupStack::PushL(self);
    self->iProperties = CDrmAudioPlayerAdaptation::NewDesPlayerReadOnlyL(aData, aCallback, aPriority, aPref);
    CleanupStack::Pop(self);
    return self;
    }

// Destructor
EXPORT_C CDrmPlayerUtility::~CDrmPlayerUtility()
    {
    delete iProperties;
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::Play
// Begins playback of the initialised audio sample at the current volume and
// priority levels.  When playing of the audio sample is complete, successfully
// or otherwise, the callback function MMdaAudioPlayerCallback::MapcPlayComplete()
// is called.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::Play()
    {
    iProperties->Play();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::Stop
// Stops playback of the audio sample as soon as possible.  If the audio sample
// is playing, playback is stopped as soon as possible. If playback is already
// complete, nothing further happens as a result of calling this function. The
// callback function MMdaAudioPlayerCallback::MapcPlayComplete() is not called.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::Stop()
    {
    iProperties->Stop();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::Pause
// Pauses the playback of the audio clip.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::Pause()
    {
    return iProperties->Pause();
    }


// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetVolume
// Changes the current playback volume to a specified value.  The volume can be
// changed before or during playback and is effective immediately.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::SetVolume(
    TInt aVolume)
    {
    iProperties->SetVolume(aVolume);
    }


// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetRepeats
// Sets the number of times the audio sample is to be repeated during the playback
// operation.  A period of silence can follow each playing of the sample. The
// audio sample can be repeated indefinitely.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::SetRepeats(
    TInt aRepeatNumberOfTimes,
    const TTimeIntervalMicroSeconds& aTrailingSilence)
    {
    iProperties->SetRepeats(aRepeatNumberOfTimes,aTrailingSilence);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetVolumeRamp
// Defines the period over which the volume level is to rise smoothly from nothing
// to the normal volume level.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::SetVolumeRamp(
    const TTimeIntervalMicroSeconds& aRampDuration)
    {
    iProperties->SetVolumeRamp(aRampDuration);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::Duration
// Returns the duration of the audio sample.  The function raises a
// CMdaAudioPlayerUtility 1 panic if the audio player utility is not initialised.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C const TTimeIntervalMicroSeconds& CDrmPlayerUtility::Duration()
    {
    return iProperties->Duration();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::MaxVolume
// Returns an integer representing the maximum volume.  This is the maximum value
// which can be passed to CMdaAudioPlayerUtility::SetVolume().
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::MaxVolume()
    {
    return iProperties->MaxVolume();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::OpenFileL
// Opens an audio clip from a file.  The audio data must be in a supported
// format (for example, WAV or AU).  This function leaves with KErrInUse if there
// is a previous open statement awaiting notification of completion.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::OpenFileL(
    const TDesC &aFileName)
    {
    iProperties->OpenFileL(aFileName);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::OpenFileL
// Opens an audio clip from a file.  The audio data must be in a supported
// format (for example, WAV or AU).  This function leaves with KErrInUse if there
// is a previous open statement awaiting notification of completion.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::OpenFileL(
    const RFile& aFile)
    {
    iProperties->OpenFileL(aFile);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::OpenFileL
// Opens an audio clip from a file.  The audio data must be in a supported
// format (for example, WAV or AU).  This function leaves with KErrInUse if there
// is a previous open statement awaiting notification of completion.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::OpenFileL(
#ifdef SYMBIAN_CAF_V2
    const TMMSource& aSource
#else
    const TMMSource& /*aSource*/
#endif
    )
    {
#ifdef SYMBIAN_CAF_V2
    iProperties->OpenFileL(aSource);
#else
    User::Leave(KErrNotSupported);
#endif
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::OpenDesL
// Opens an audio clip from a descriptor.  The audio data must be in a supported
// format (for example, WAV or AU).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::OpenDesL(
    const TDesC8& aDescriptor)
    {
    iProperties->OpenDesL(aDescriptor);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::OpenUrlL
// Opens an audio clip from a URL.  The audio data must be in a supported format
// (for example, WAV or AU).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::OpenUrlL(
    const TDesC& aUrl,
    TInt aIapId,
    const TDesC8& aMimeType)
    {
    iProperties->OpenUrlL(aUrl,aIapId,aMimeType);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::Close
// Closes the current audio clip (allowing another clip to be opened).
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::Close()
   {
   iProperties->Close();
   }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetPosition
// Returns the current playback position in microseconds from the start
// of the clip.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::GetPosition(
    TTimeIntervalMicroSeconds& aPosition)
    {
    return iProperties->GetPosition(aPosition);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetPosition
// Sets the current playback position in microseconds from the start of the clip.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::SetPosition(
    const TTimeIntervalMicroSeconds& aPosition)
    {
    iProperties->SetPosition(aPosition);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetPriority
// Sets the priority for playback. This is used to arbitrate between multiple
// objects trying to access a single sound device.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::SetPriority(
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    return iProperties->SetPriority(aPriority,aPref);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetVolume
// Returns the current playback volume.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::GetVolume(
    TInt& aVolume)
    {
    return iProperties->GetVolume(aVolume);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetNumberOfMetaDataEntries
// Returns the number of meta data entries in the current audio clip.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::GetNumberOfMetaDataEntries(
    TInt& aNumEntries)
    {
    return iProperties->GetNumberOfMetaDataEntries(aNumEntries);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetMetaDataEntryL
// Returns the requested meta data entry.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C CMMFMetaDataEntry* CDrmPlayerUtility::GetMetaDataEntryL(
    TInt aMetaDataIndex)
    {
    return iProperties->GetMetaDataEntryL(aMetaDataIndex);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetPlayWindow
// Sets the current playback window.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::SetPlayWindow(
    const TTimeIntervalMicroSeconds& aStart,
    const TTimeIntervalMicroSeconds& aEnd)
    {
    return  iProperties->SetPlayWindow(aStart,aEnd);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::ClearPlayWindow
// Clears the current playback window.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::ClearPlayWindow()
    {
    return iProperties->ClearPlayWindow();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::SetBalance
// Sets the current playback balance.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::SetBalance(
    TInt aBalance)
    {
    return iProperties->SetBalance(aBalance);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetBalance
// Returns the current playback balance.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::GetBalance(
    TInt& aBalance)
    {
    return iProperties->GetBalance(aBalance);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetBitRate
// Returns the bit rate of the audio clip
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::GetBitRate(
    TUint& aBitRate)
    {
    return iProperties->GetBitRate(aBitRate);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::RegisterForAudioLoadingNotification
// Registers callback object to receive notifications of audio loading/rebuffering.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::RegisterForAudioLoadingNotification(
    MAudioLoadingObserver& aCallback)
    {
    iProperties->RegisterForAudioLoadingNotification(aCallback);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::GetAudioLoadingProgressL
// Returns the current progress of audio loading
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::GetAudioLoadingProgressL(
    TInt& aPercentageProgress)
    {
    iProperties->GetAudioLoadingProgressL(aPercentageProgress);
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::ControllerImplementationInformationL
// Returns the controller implementation information associated with the current controller.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C const CMMFControllerImplementationInformation& CDrmPlayerUtility::ControllerImplementationInformationL()
    {
    return iProperties->ControllerImplementationInformationL();
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::CustomCommandSync
// Sends a synchronous custom command to the controller.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::CustomCommandSync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TDes8& aDataFrom)
    {
      TInt status( KErrAccessDenied );
      status = iProperties->CustomCommandSync(aDestination,aFunction,aDataTo1,aDataTo2,aDataFrom);

    return status;
    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::CustomCommandSync
// Sends a synchronous custom command to the controller.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CDrmPlayerUtility::CustomCommandSync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2)
    {

      TInt status( KErrAccessDenied );
      status = iProperties->CustomCommandSync(aDestination,aFunction,aDataTo1,aDataTo2);
    return status;

    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::CustomCommandAsync
// Sends an asynchronous custom command to the controller
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::CustomCommandAsync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TDes8& aDataFrom,
    TRequestStatus& aStatus)
    {

        iProperties->CustomCommandAsync(aDestination,aFunction,aDataTo1,aDataTo2,aDataFrom,aStatus);

    }

// -----------------------------------------------------------------------------
// CDrmPlayerUtility::CustomCommandAsync
// Sends an asynchronous custom command to the controller
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void CDrmPlayerUtility::CustomCommandAsync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TRequestStatus& aStatus)
    {

        iProperties->CustomCommandAsync(aDestination,aFunction,aDataTo1,aDataTo2,aStatus);

    }
//=========================================================================================================================




// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::NewL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFDrmAudioPlayerUtility* CMMFDrmAudioPlayerUtility::NewL(
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CMMFDrmAudioPlayerUtility* self = new(ELeave) CMMFDrmAudioPlayerUtility(aCallback,EPriorityStandard);
    CleanupStack::PushL(self);
    self->ConstructL(aPriority, aPref);
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::NewFilePlayerL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFDrmAudioPlayerUtility* CMMFDrmAudioPlayerUtility::NewFilePlayerL(
    const TDesC& aFileName,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CMMFDrmAudioPlayerUtility* self = new(ELeave) CMMFDrmAudioPlayerUtility(aCallback,EPriorityStandard);
    CleanupStack::PushL(self);
    self->ConstructL(aFileName,aPriority,aPref);
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::NewDesPlayerL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFDrmAudioPlayerUtility* CMMFDrmAudioPlayerUtility::NewDesPlayerL(
    const TDesC8& aData,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CMMFDrmAudioPlayerUtility* self = new(ELeave) CMMFDrmAudioPlayerUtility(aCallback,EPriorityStandard);
    CleanupStack::PushL(self);
    self->ConstructL(aData,aPriority,aPref);
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::NewDesPlayerReadOnlyL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFDrmAudioPlayerUtility* CMMFDrmAudioPlayerUtility::NewDesPlayerReadOnlyL(
    const TDesC8& aData,
    MDrmAudioPlayerCallback& aCallback,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    CMMFDrmAudioPlayerUtility* self = new(ELeave) CMMFDrmAudioPlayerUtility(aCallback,EPriorityStandard);
    CleanupStack::PushL(self);
    self->ConstructReadOnlyL(aData,aPriority,aPref);
    CleanupStack::Pop(self);
    return self;
    }


// Destructor
CMMFDrmAudioPlayerUtility::~CMMFDrmAudioPlayerUtility()
    {
    Stop();
    Cancel();
    delete iDrm;
    delete iMetaDataBuffer;
    if(iDrmSession)
      {
      iDrmSession->Disconnect();
      iDrmSession->Close();
      delete iDrmSession;
      iDrmSession = NULL;
      }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::CMMFDrmAudioPlayerUtility
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFDrmAudioPlayerUtility::CMMFDrmAudioPlayerUtility(
    MDrmAudioPlayerCallback& aCallback,
    TInt aActivePriority)
    : CActive(aActivePriority),
    iCallback(aCallback)
    {
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ConstructL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::ConstructL(
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    ConnectL();
    TDataStruct theStruct;

    theStruct.iPriority = aPriority;
    theStruct.iPref = aPref;

    TDataStructPckgBuf pckg(theStruct);
    iState = EInitializing;
    iDrmSession->Send(EDRMPlayServNewPlayerL,TIpcArgs(&iAsyncCallback,&pckg,&iErrorDurationStruct));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ConstructL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::ConstructL(
    const TDesC& aFileName,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    ConnectL();

    iDrmSession->Send(EDRMPlayServSetPriorityPreference,TIpcArgs(aPriority,aPref));
    TDataStructPckgBuf pckgBuf;
    TDataStruct &theStruct = pckgBuf();



    theStruct.iPriority = aPriority;
    theStruct.iPref = aPref;
    iFileName = aFileName;

    iState = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServNewFilePlayerL,TIpcArgs(&iAsyncCallback,&pckgBuf,&iErrorDurationStruct,&iFileName),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ConstructL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::ConstructL(
    const TDesC8& aData,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    ConnectL();
    TDataStruct theStruct;

    theStruct.iData = aData;
    iDrmSession->Send(EDRMPlayServSetPriorityPreference,TIpcArgs(aPriority,aPref));

    TDataStructPckgBuf pckg(theStruct);

    iState = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServNewDesPlayerL,TIpcArgs(&iAsyncCallback,&pckg,&iErrorDurationStruct),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ConstructReadOnlyL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::ConstructReadOnlyL(
    const TDesC8& aData,
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    ConnectL();
    TDataStruct theStruct;

    theStruct.iData = aData;
    iDrmSession->Send(EDRMPlayServSetPriorityPreference,TIpcArgs(aPriority,aPref));

    TDataStructPckgBuf pckg(theStruct);

    iState = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServNewDesPlayerReadOnlyL,TIpcArgs(&iAsyncCallback,&pckg,&iErrorDurationStruct),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ConnectL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::ConnectL()
    {
    CActiveScheduler::Add(this);
    iDrmSession = new(ELeave) RDrmSession();
    User::LeaveIfError( iDrmSession->Connect() );
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::OpenFileL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::OpenFileL(
    const TDesC& aFileName)
    {
    iState = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServOpenFile,TIpcArgs(&iAsyncCallback,&aFileName,&iErrorDurationStruct),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::OpenFileL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::OpenFileL(
    const RFile& aFile)
    {
    TIpcArgs ipcArgs;
    aFile.TransferToServer(ipcArgs, 1, 3);
    ipcArgs.Set(0,&iAsyncCallback);
    ipcArgs.Set(2,&iErrorDurationStruct);
    iState = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServOpenFileByHandle,ipcArgs,iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::OpenFileL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
#ifdef SYMBIAN_CAF_V2
void CMMFDrmAudioPlayerUtility::OpenFileL(const TMMSource& aSource)
    {
    if (aSource.SourceType()==KUidMMFileHandleSource)
        {
#ifdef SYMBIAN_SECURITY_CAF_RFILE_HANDLE
        RFile& fileHandle = static_cast<const TMMFileHandleSource&>(aSource).Handle();
        OpenFileL(fileHandle);
#else
        User::Leave(KErrNotSupported);
#endif
        }
    if (aSource.SourceType()==KUidMMFileSource)
        {
        const TDesC& fileName = static_cast<const TMMFileSource&>(aSource).Name();
        OpenFileL(fileName);
        }
    }
#endif


// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::OpenDesL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::OpenDesL(
    const TDesC8& aDescriptor)
    {
    iStatus = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServOpenDes,TIpcArgs(&iAsyncCallback,&aDescriptor,&iErrorDurationStruct),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::OpenUrlL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::OpenUrlL(
    const TDesC& aUrl,
    const TInt aIapId,
    const TDesC8& aMimeType)
    {
    TUrlStruct theStruct;

    theStruct.iUrl = aUrl;
    theStruct.iIapId = aIapId;
    theStruct.iMimeType = aMimeType;

    TUrlStructPckgBuf pckg(theStruct);
    iStatus = EInitializing;
    if (!IsActive())
        {
        iDrmSession->Send(EDRMPlayServOpenUrl,TIpcArgs(&iAsyncCallback,&pckg,&iErrorDurationStruct),iStatus);
        SetActive();
        }
    else
        {
        User::Leave(KErrNotReady);
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::Play
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::Play()
    {
    if (iState != EPlaying)
        {
        iState = EPlaying;
        if (!IsActive())
            {
            SetActive();
            iDrmSession->Send(EDRMPlayServPlay,TIpcArgs(&iAsyncCallback,0,&iErrorDurationStruct),iStatus);
            }
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::Stop
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::Stop()
    {
    iDrmSession->Send(EDRMPlayServStop);
    if (IsActive())
            {
            Cancel();
            }

    iState = EIdle;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::Pause
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::Pause()
    {
    iDrmSession->Send(EDRMPlayServPause);
    iState = EPaused;
    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::Close
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::Close()
    {
    if (IsActive())
            {
                Cancel();
            }
    iDrmSession->Send(EDRMPlayServClose);
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetVolume
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::SetVolume(
    TInt aVolume)
    {
    iDrmSession->Send(EDRMPlayServSetVolume,TIpcArgs(aVolume));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetRepeats
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::SetRepeats(
    TInt aRepeatNumberOfTimes,
    const TTimeIntervalMicroSeconds& aTrailingSilence)
    {

    TPckgTTimeIntervalMicroSeconds trailingSilencePckg(aTrailingSilence);
    iDrmSession->Send(EDRMPlayServSetRepeats,TIpcArgs(aRepeatNumberOfTimes,&trailingSilencePckg));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetVolumeRamp
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::SetVolumeRamp(
    const TTimeIntervalMicroSeconds& aRampDuration)
    {

    TPckgTTimeIntervalMicroSeconds volumeRampPckg(aRampDuration);
    iDrmSession->Send(EDRMPlayServSetVolumeRamp,TIpcArgs(&volumeRampPckg));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetPriority
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::SetPriority(
    TInt aPriority,
    TMdaPriorityPreference aPref)
    {
    return iDrmSession->Send(EDRMPlayServSetPriority,TIpcArgs(aPriority,aPref));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::Duration
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TTimeIntervalMicroSeconds& CMMFDrmAudioPlayerUtility::Duration()
    {
    TPckgBufTTimeIntervalMicroSeconds pckg;
    iDrmSession->Send(EDRMPlayServDuration,TIpcArgs(&pckg));
    return pckg();
    }


// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::MaxVolume
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::MaxVolume()
    {
    return iDrmSession->Send(EDRMPlayServMaxVolume);
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetPosition
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::GetPosition(
    TTimeIntervalMicroSeconds& aPosition)
    {
    TPckgTTimeIntervalMicroSeconds thePositionPckg(aPosition);
    TInt ret = iDrmSession->Send(EDRMPlayServGetPosition,TIpcArgs(&thePositionPckg));
    aPosition = thePositionPckg();
    return ret;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetPosition
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::SetPosition(
    const TTimeIntervalMicroSeconds& aPosition)
    {
    TSetPositionStruct sendPckg;
    sendPckg.iPosition = aPosition;

    TSetPositionStructBuf pckg(sendPckg);
    iDrmSession->Send(EDRMPlayServSetPosition,TIpcArgs(&pckg));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetVolume
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::GetVolume(TInt& aVolume)
    {
    TInt theReturnValue;
    TPckgBufTInt theVolume;
    theReturnValue = iDrmSession->Send(EDRMPlayServGetVolume,TIpcArgs(&theVolume));
    aVolume = theVolume();
    return theReturnValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetNumberOfMetaDataEntries
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::GetNumberOfMetaDataEntries(
    TInt& aNumEntries)
    {
    TPckgBufTInt theNumEntries;
    TInt retValue = iDrmSession->Send(EDRMPlayServGetNumberOfMetaDataEntries,TIpcArgs(&theNumEntries));
    aNumEntries = theNumEntries();
    return retValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetMetaDataEntryL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMMFMetaDataEntry* CMMFDrmAudioPlayerUtility::GetMetaDataEntryL(
    TInt aMetaDataIndex)
    {
    TBuf8<100> data;
    iDrmSession->Send(EDRMPlayServGetMetaDataEntry,TIpcArgs(aMetaDataIndex,&data));
    delete iMetaDataBuffer;
    iMetaDataBuffer = NULL;
    iMetaDataBuffer = CBufFlat::NewL(32);
    HBufC8* theData = data.Alloc();
    iMetaDataBuffer->InsertL(0,theData->Des());
    RBufReadStream s;
    s.Open(*iMetaDataBuffer);
    CleanupClosePushL(s);
    CMMFMetaDataEntry* theMetaDataEntry  = CMMFMetaDataEntry::NewL();
    CleanupStack::PushL(theMetaDataEntry);
    theMetaDataEntry->InternalizeL(s);
    CleanupStack::Pop(theMetaDataEntry);
    CleanupStack::PopAndDestroy();//s
    return theMetaDataEntry;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetPlayWindow
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::SetPlayWindow(
    const TTimeIntervalMicroSeconds& aPlayStart,
    const TTimeIntervalMicroSeconds& aPlayEnd)
    {
    TPlayWindowStruct sendPckg;
    sendPckg.iPlayStart = aPlayStart;
    sendPckg.iPlayEnd = aPlayEnd;

    TPlayWindowStructBuf pckg(sendPckg);

    return iDrmSession->Send(EDRMPlayServSetPlayWindow,TIpcArgs(&pckg));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ClearPlayWindow
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::ClearPlayWindow()
    {
    return iDrmSession->Send(EDRMPlayServClearPlayWindow);
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::SetBalance
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::SetBalance(
    TInt aBalance)
    {
    return iDrmSession->Send(EDRMPlayServSetBalance,TIpcArgs(aBalance));
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetBitRate
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::GetBitRate(
    TUint& aBitRate)
    {
    TPckgBufTUint pckg;
    TInt retValue = iDrmSession->Send(EDRMPlayServGetBitRate,TIpcArgs(&pckg));
    aBitRate = pckg();
    return retValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::ControllerImplementationInformationL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const CMMFControllerImplementationInformation& CMMFDrmAudioPlayerUtility::ControllerImplementationInformationL()
    {
    TUid theUid;
    iDrmSession->Send(EDRMPlayServControllerImplementationInformation,TIpcArgs(&theUid));
    iControllerImplementationInformation = CMMFControllerImplementationInformation::NewL(theUid);
    return *iControllerImplementationInformation;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetAudioLoadingProgressL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::GetAudioLoadingProgressL(
    TInt& aPercentageProgress)
    {
    TPckgBufTInt pckg;
    iDrmSession->Send(EDRMPlayServGetAudioLoadingProgress,TIpcArgs(&pckg));
    aPercentageProgress = pckg();
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::CustomCommandSync
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::CustomCommandSync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TDes8& aDataFrom)
    {
    TInt theReturnValue(KErrPermissionDenied);

    TPckgCustomCommand thePckg;
    thePckg().iDestination = aDestination;
    thePckg().iFunction = aFunction;
/*
    RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandSync:IFId[%x]DestHndl[%x]Fn[%d]RetDesLen[%d]"),
                                thePckg().iDestination().InterfaceId(),
                                thePckg().iDestination().DestinationHandle(),
                                thePckg().iFunction,
                                aDataFrom.Length());
*/
     // Only Pass 'Allowed CustomCommand
     if ( IsValidCustomCommandDestination(aDestination().InterfaceId(), aDataTo1) )
        {
        theReturnValue = iDrmSession->Send( EDRMPlayServCustomCommandSyncWithReturn,
                                            TIpcArgs(&thePckg, &aDataTo1, &aDataTo2, &aDataFrom));
        }
    return theReturnValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::CustomCommandSync
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::CustomCommandSync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2)
    {
    TInt theReturnValue(KErrPermissionDenied);

    TPckgCustomCommand thePckg;
    thePckg().iDestination = aDestination;
    thePckg().iFunction = aFunction;
/*
    RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandSync:IFId[%x]DestHndl[%x]Fn[%d]"),
                                thePckg().iDestination().InterfaceId(),
                                thePckg().iDestination().DestinationHandle(),
                                thePckg().iFunction);
*/
    // Only Pass 'Allowed CustomCommand
    if ( IsValidCustomCommandDestination(aDestination().InterfaceId(), aDataTo1) )
        {
        theReturnValue = iDrmSession->Send( EDRMPlayServCustomCommandSyncWithoutReturn,
                                            TIpcArgs(&thePckg, &aDataTo1, &aDataTo2));
        }
    return theReturnValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::CustomCommandAsync
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::CustomCommandAsync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TDes8& aDataFrom,
    TRequestStatus& aStatus )
    {
    TPckgCustomCommand thePckg;
    thePckg().iDestination = aDestination;
    thePckg().iFunction = aFunction;
    TInt status(KErrPermissionDenied);
/*
    RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandAsync:IFId[%x]DestHndl[%x]Fn[%d]Data1[Len:%d]Data2Len[Len:%d]RetDesLen[Len:%d:MaxLen:%d]"),
                                thePckg().iDestination().InterfaceId(),
                                thePckg().iDestination().DestinationHandle(),
                                thePckg().iFunction,
                                aDataTo1.Length(),
                                aDataTo2.Length(),
                                aDataFrom.Length(),
                                aDataFrom.MaxLength() );
*/
    // Only Pass 'Allowed CustomCommand
    if ( IsValidCustomCommandDestination(aDestination().InterfaceId(), aDataTo1) )
        {
        // Send in two steps, data in first step and async request in second step
        // othewise thePckg will become invalid when tried to read from server
        status = iDrmSession->Send( EDRMPlayServCustomCommandAsyncWithReturnStep1,
                                    TIpcArgs(&thePckg, &aDataTo1, &aDataTo2) );
        if ( status == KErrNone )
            {
            // Pass descriptor place holder to get data back in the async call
            iDrmSession->Send( EDRMPlayServCustomCommandAsyncWithReturnStep2,
                               TIpcArgs(&aDataFrom),
                               aStatus );
            }
#ifdef _DEBUG
        else
            {
            RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandAsync:IFId[%x]DestHndl[%x]Fn[%d]Data1[Len:%d]Data2Len[Len:%d]RetDesLen[Len:%d:MaxLen:%d]DRM Proxy CustCmdAsyncWRet Step1[%d]"),
                                        thePckg().iDestination().InterfaceId(),
                                        thePckg().iDestination().DestinationHandle(),
                                        thePckg().iFunction,
                                        aDataTo1.Length(),
                                        aDataTo2.Length(),
                                        aDataFrom.Length(),
                                        aDataFrom.MaxLength(),
                                        status );
            }
#endif // _DEBUG
        }
     if ( status != KErrNone )
        {
        TRequestStatus* s = &aStatus;
        User::RequestComplete( s , status );
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::CustomCommandAsync
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::CustomCommandAsync(
    const TMMFMessageDestinationPckg& aDestination,
    TInt aFunction,
    const TDesC8& aDataTo1,
    const TDesC8& aDataTo2,
    TRequestStatus& aStatus)
    {
    TPckgCustomCommand thePckg;
    thePckg().iDestination = aDestination;
    thePckg().iFunction = aFunction;

    TInt status(KErrPermissionDenied);
/*
    RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandAsync:IFId[%x]DestHndl[%x]Fn[%d]Data1[Len:%d]Data2Len[Len:%d]"),
                                thePckg().iDestination().InterfaceId(),
                                thePckg().iDestination().DestinationHandle(),
                                thePckg().iFunction,
                                aDataTo1.Length(),
                                aDataTo2.Length() );
*/
     // Only Pass 'Allowed CustomCommand
    if ( IsValidCustomCommandDestination(aDestination().InterfaceId(), aDataTo1) )
        {
        // Send in two steps, data in first step and async request in second step
        // othewise thePckg will become invalid when tried to read from server
        status = iDrmSession->Send( EDRMPlayServCustomCommandAsyncWithoutReturnStep1,
                                    TIpcArgs(&thePckg, &aDataTo1, &aDataTo2) );
        if ( status == KErrNone )
            {
            iDrmSession->Send( EDRMPlayServCustomCommandAsyncWithoutReturnStep2,
                               TIpcArgs(),
                               aStatus );
            }
#ifdef _DEBUG
        else
            {
            RDebug::Print(_L("CMMFDrmAudioPlayerUtility::CustomCommandAsync:IFId[%x]DestHndl[%x]Fn[%d]Data1[Len:%d]Data2Len[Len:%d]DRM Proxy CustCmdAsyncWoRet Step1[%d]"),
                                        thePckg().iDestination().InterfaceId(),
                                        thePckg().iDestination().DestinationHandle(),
                                        thePckg().iFunction,
                                        aDataTo1.Length(),
                                        aDataTo2.Length(),
                                        status );
            }
#endif // _DEBUG
        }
     if ( status != KErrNone )
        {
        TRequestStatus* s = &aStatus;
        User::RequestComplete( s , status );
        }
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::GetBalance
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CMMFDrmAudioPlayerUtility::GetBalance(
    TInt& aBalance)
    {
    TPckgBufTInt theBalance;

    TInt retValue = iDrmSession->Send(EDRMPlayServGetBalance,TIpcArgs(&theBalance));
    aBalance = theBalance();
    return retValue;
    }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::RegisterForAudioLoadingNotification
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::RegisterForAudioLoadingNotification(
    MAudioLoadingObserver& aLoadingObserver)
    {
    iAsyncCallback() = ELoadingStarted;
    iLoadingObserver = &aLoadingObserver;
    iDrmSession->Send(EDRMPlayServRegisterForAudioLoadingNotification,TIpcArgs(&iAsyncCallback));
    }


// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::DoCancel
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::DoCancel()
   {
   }

// -----------------------------------------------------------------------------
// CMMFDrmAudioPlayerUtility::RunL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CMMFDrmAudioPlayerUtility::RunL()
   {
    DEP_PRN1(_L("CMMFDrmAudioPlayerUtility::RunL:iStatus[%d]"), iStatus.Int());

    if (iState == EPaused)
        {
        return;
        }
    if ( iStatus.Int() == KErrCancel )
        return;
    switch (iAsyncCallback())
        {
        case EInitComplete:
            if (iState != EIdle)
                {
                DEP_PRN0(_L("CMMFDrmAudioPlayerUtility::RunL - InitComplete"));
                iState = EIdle;
                iCallback.MdapcInitComplete(iErrorDurationStruct().iError, iErrorDurationStruct().iDuration);
                }
        break;

        case EPlayComplete:
            DEP_PRN0(_L("CMMFDrmAudioPlayerUtility::RunL - PlayComplete"));
            iState = EIdle;
            iCallback.MdapcPlayComplete(iErrorDurationStruct().iError);
        break;

        case ELoadingStarted:
            DEP_PRN0(_L("CMMFDrmAudioPlayerUtility::RunL - MaloLoadingStarted"));

            iDrmSession->Send(EDRMPlayServRegisterForAudioLoadingNotification,TIpcArgs(&iAsyncCallback),iStatus);
            SetActive();
            iLoadingObserver->MaloLoadingStarted();
        break;

        case ELoadingComplete:
            DEP_PRN0(_L("CMMFDrmAudioPlayerUtility::RunL - MaloLoadingComplete"));

            iAsyncCallback() = ELoadingStarted;
            iLoadingObserver->MaloLoadingComplete();
        break;

        default:
        break;
        }
   }

TBool CMMFDrmAudioPlayerUtility::IsValidCustomCommandDestination(TUid aDestinationUid, const TDesC8& aParam)
    {
    TBool retValue(ETrue);
    if (aDestinationUid == KUidInterfaceMMFDRMControl)
        {
        retValue = EFalse;
        }
    else if ( aDestinationUid == KUidCustomInterfaceBuilderImpl )
        {
             TRAPD(err, retValue = CheckCustomInterfaceBuilderImplL(aParam));
             if((err != KErrNone) || (retValue == EFalse))
                retValue = EFalse;
        }
    return retValue;
    }

TBool CMMFDrmAudioPlayerUtility::CheckCustomInterfaceBuilderImplL(const TDesC8& aParam)
{
    TBool retValue(ETrue);
    RDesReadStream stream(aParam);
    CleanupClosePushL(stream);
    TUid paramUid;
    paramUid.iUid = stream.ReadInt32L();
    CleanupStack::PopAndDestroy(&stream);
    if ( paramUid == KUidAudioOutput )
         {
         retValue = EFalse;
         }
   return retValue;
}

// End of file