upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 0 7f85d04be362
--- a/upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp	Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpavcontroller/upnpavcontrollerclient/src/upnpavrenderingactive.cpp	Mon Nov 01 12:37:49 2010 +0200
@@ -1,791 +1,753 @@
-/*
-* Copyright (c) 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:      AO for rendering commands
-*
-*/
-
-
-
-
-
-
-#include "upnpavrenderingactive.h"
-
-#include "upnpavcontrollerclient.h"
-#include "upnpavrenderingsessionimpl.h"
-#include "upnpavrequest.h"
-
-_LIT( KComponentLogfile, "upnpavcontrollerclient.txt");
-#include "upnplog.h"
-
-const TInt KPositionInfoSize = 15;
-
-// ======== MEMBER FUNCTIONS ========
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::NewL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-CUPnPAVRenderingActive* CUPnPAVRenderingActive::NewL(
-    RUPnPAVControllerClient& aServer, TInt aId )
-    {
-    CUPnPAVRenderingActive* self = new (ELeave) CUPnPAVRenderingActive(
-        aServer, aId );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::CUPnPAVRenderingActive
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-CUPnPAVRenderingActive::CUPnPAVRenderingActive(
-    RUPnPAVControllerClient& aServer, TInt aId ):
-    CActive( EPriorityStandard ),
-    iServer( aServer ),
-    iId( aId ),
-    iBufferPtr( 0, 0 ),
-    iBufferPtr2( 0, 0 ),
-    iRespBufSizePkg( iRespBufSize )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::~CUPnPAVRenderingActive
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-CUPnPAVRenderingActive::~CUPnPAVRenderingActive()
-    {
-    __LOG( "CUPnPAVRenderingActive::~CUPnPAVRenderingActive" );
-    
-    Cancel();
-    
-    delete iBuffer;
-    delete iBuffer2;
-
-    if( iMediaServerResourceReserved )
-        {
-        iServer.ReleaseMediaServer( iId );
-        }    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::ConstructL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::ConstructL()
-    {  
-    __LOG( "CUPnPAVRenderingActive::ConstructL" );  
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::RunL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::RunL()
-    {
-    __LOG( "CUPnPAVRenderingActive::RunL" );
-    
-    switch( iPendingOperation )
-        {
-        case ESetURI:
-            {
-            SetURICompleteL();
-            }
-            break;
-
-        case ESetNextURI:
-            {
-            SetNextURICompleteL();
-            }
-            break;
-
-        case EPlay:
-            {
-            PlayCompleteL();
-            }
-            break;
-
-        case EStop:
-            {
-            StopCompleteL();
-            }
-            break;
-
-        case EPause:
-            {
-            PauseCompleteL();
-            }
-            break;
-
-        case ESetVolume:
-            {
-            SetVolumeCompleteL();
-            }
-            break;
-
-        case EGetVolume:
-            {
-            GetVolumeCompleteL();
-            }
-            break;
-
-        case ESetMute:
-            {
-            SetMuteCompleteL();
-            }
-            break;
-
-        case EGetMute:
-            {
-            GetMuteCompleteL();
-            }
-            break;
-
-        case EPositionInfo:
-            {
-            PositionInfoCompleteL();
-            }
-            break;
-            
-        case EStartMediaServer:
-            {
-            StartMediaServerCompleteL();
-            }
-            break;
-            
-        default:
-            __PANICD( __FILE__, __LINE__ );
-            break;            
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::DoCancel
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::DoCancel()
-    {
-    __LOG( "CUPnPAVRenderingActive::DoCancel" );
-    
-    switch( iPendingOperation )
-        {
-        case ESetURI:
-            {
-            iServer.CancelSetURI( iId );
-            }
-            break;
-
-        case ESetNextURI:
-            {
-            iServer.CancelSetNextURI( iId );
-            }
-            break;
-
-        case EPlay:
-            {
-            iServer.CancelPlay( iId );
-            }
-            break;
-
-        case EStop:
-            {
-            iServer.CancelStop( iId );
-            }
-            break;
-
-        case EPause:
-            {
-            iServer.CancelPause( iId );
-            }
-            break;
-
-        case ESetVolume:
-            {
-            iServer.CancelSetVolume( iId );
-            }
-            break;
-
-        case EGetVolume:
-            {
-            iServer.CancelGetVolume( iId );
-            }
-            break;
-
-        case ESetMute:
-            {
-            iServer.CancelSetMute( iId );
-            }
-            break;
-
-        case EGetMute:
-            {
-            iServer.CancelGetMute( iId );
-            }
-            break;
-
-        case EPositionInfo:
-            {
-            iServer.CancelGetPositionInfo( iId );
-            }
-            break;
-
-        case EStartMediaServer:
-            {
-            iServer.CancelReserveMediaServer( iId );
-            }
-            break;          
-                       
-        default:
-            __PANICD( __FILE__, __LINE__ );
-            break;            
-        }    
-    }
-    
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::RunError
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-TInt CUPnPAVRenderingActive::RunError( TInt /*aError*/ )
-    {
-    return KErrNone;
-    }
-
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetObserver
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetObserver( 
-                                 MUPnPAVRenderingSessionObserver& aObserver )
-    {
-    // Set the observer and make an async request to the server to receive
-    // device callbacks
-    __ASSERTD( !iObserver, __FILE__, __LINE__ );
-
-        
-    iObserver = &aObserver;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::Observer
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-MUPnPAVRenderingSessionObserver* CUPnPAVRenderingActive::Observer() const
-    {
-    return iObserver;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::RemoveObserver
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::RemoveObserver()
-    {
-    iObserver = NULL;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::ReserveLocalMSServicesL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::ReserveLocalMSServicesL()
-    {
-    __LOG( "CUPnPAVRenderingActive::ReserveLocalMSServicesL" );
-    
-    ResetL();
-    
-    if( iMediaServerResourceReserved )
-        {
-        if( iObserver )
-            {
-            iObserver->ReserveLocalMSServicesCompleted( KErrNone );
-            }
-        }
-    else
-        {
-        iPendingOperation = EStartMediaServer;
-        iServer.ReserveMediaServer( iId, iStatus );
-        SetActive();    
-        
-        }    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::CancelReserveLocalMSServicesL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::CancelReserveLocalMSServicesL()
-    {
-    __LOG( "CUPnPAVRenderingActive::CancelReserveLocalMSServicesL" );
-    
-    if( iPendingOperation == EStartMediaServer )
-        {
-        Cancel();
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::ReleaseLocalMSServicesL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::ReleaseLocalMSServicesL()
-    {
-    __LOG( "CUPnPAVRenderingActive::ReleaseLocalMSServicesL" );
-    
-    ResetL();
-    
-    if( iMediaServerResourceReserved )
-        {
-        iMediaServerResourceReserved = EFalse;
-        
-        User::LeaveIfError( iServer.ReleaseMediaServer( iId ) );        
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetURIL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetURIL( const TDesC8& aURI,
-    const CUpnpItem& aItem )
-    {
-    __LOG( "CUPnPAVRenderingActive::SetURIL" );
-    
-    ResetL();
-        
-    CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
-    tempRequest->SetURIL( aURI );
-    
-    iBuffer = tempRequest->ToDes8L();
-    iBufferPtr.Set( iBuffer->Des() );
-    
-    iBuffer2 = aItem.ToDes8L();
-    iBufferPtr2.Set( iBuffer2->Des() );
-    
-    CleanupStack::PopAndDestroy( tempRequest );
-
-    iPendingOperation = ESetURI;
-        
-    iServer.SetURI( iId, iBufferPtr, iBufferPtr2, iStatus );
-    SetActive();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetNextURIL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetNextURIL( const TDesC8& aURI,
-    const CUpnpItem& aItem )    
-    {
-    __LOG( "CUPnPAVRenderingActive::SetNextURIL" );
-    
-    ResetL();
-    
-    CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
-    tempRequest->SetURIL( aURI );
-    
-    iBuffer = tempRequest->ToDes8L();
-    iBufferPtr.Set( iBuffer->Des() );
-
-    iBuffer2 = aItem.ToDes8L();
-    iBufferPtr2.Set( iBuffer2->Des() );
-    
-    CleanupStack::PopAndDestroy( tempRequest );
-            
-    iPendingOperation = ESetNextURI;
-    
-    iServer.SetNextURI( iId, iBufferPtr, iBufferPtr2, iStatus );
-    SetActive();        
-    }
-
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::PlayL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::PlayL()
-    {
-    __LOG( "CUPnPAVRenderingActive::PlayL" );
-    
-    ResetL();
-    iPendingOperation = EPlay;
-    iServer.Play( iId, iStatus );
-    SetActive();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::StopL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::StopL()
-    {
-    __LOG( "CUPnPAVRenderingActive::StopL" );
-    
-    ResetL();
-    iPendingOperation = EStop;
-    iServer.Stop( iId, iStatus );
-    SetActive();    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::PauseL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::PauseL()
-    {
-    __LOG( "CUPnPAVRenderingActive::PauseL" );
-    
-    ResetL();
-    iPendingOperation = EPause;
-    iServer.Pause( iId, iStatus );
-    SetActive();    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetVolumeL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetVolumeL( TInt aVolumeLevel )
-    {
-    __LOG( "CUPnPAVRenderingActive::SetVolumeL" );
-    
-    ResetL();
-    iPendingOperation = ESetVolume;
-    iServer.SetVolume( iId, aVolumeLevel, iRespBufSizePkg, iStatus );
-    SetActive();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::GetVolumeL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::GetVolumeL()
-    {
-    __LOG( "CUPnPAVRenderingActive::GetVolumeL" );
-    
-    ResetL();
-    iPendingOperation = EGetVolume;
-    iServer.GetVolume( iId, iRespBufSizePkg, iStatus );
-    SetActive();    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetMuteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetMuteL( TBool aMute )
-    {
-    __LOG( "CUPnPAVRenderingActive::SetMuteL" );
-    
-    ResetL();
-    iPendingOperation = ESetMute;
-    iServer.SetMute( iId, aMute, iRespBufSizePkg, iStatus );
-    SetActive();        
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::NewL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::GetMuteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::GetMuteL" );
-    
-    ResetL();
-    iPendingOperation = EGetMute;
-    iServer.GetMute( iId, iRespBufSizePkg, iStatus );
-    SetActive();            
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::GetPositionInfoL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::GetPositionInfoL()
-    {
-    __LOG( "CUPnPAVRenderingActive::GetPositionInfoL" );
-    
-    ResetL();
-  
-    iBuffer = HBufC8::NewL( KPositionInfoSize );
-    iBufferPtr.Set( iBuffer->Des() );
-    iBuffer2 = HBufC8::NewL( KPositionInfoSize );
-    iBufferPtr2.Set( iBuffer2->Des() );
-    iPendingOperation = EPositionInfo;
-    iServer.GetPositionInfo( iId, iBufferPtr, iBufferPtr2, iStatus );
-    SetActive();                
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::ResetL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::ResetL()
-    {
-    __LOG( "CUPnPAVRenderingActive::ResetL" );
-    
-    if( IsActive() )
-        {
-        User::Leave( KErrServerBusy );
-        }
-
-    delete iBuffer; iBuffer = NULL;
-    delete iBuffer2; iBuffer2 = NULL;
-    iPendingOperation = ENone;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetURICompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetURICompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::SetURICompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerSetURICompleted )
-            {
-            iObserver->SetURIResult( KErrNone );    
-            }
-        else
-            {
-            iObserver->SetURIResult( iStatus.Int() );    
-            }
-        }    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetNextURICompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetNextURICompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::SetNextURICompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerSetNextURICompleted )
-            {
-            iObserver->SetNextURIResult( KErrNone );    
-            }
-        else
-            {
-            iObserver->SetNextURIResult( iStatus.Int() );    
-            }
-        }    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::PlayCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::PlayCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::PlayCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerPlayCompleted )
-            {
-            iObserver->InteractOperationComplete( KErrNone, EUPnPAVPlay );    
-            }
-        else
-            {
-            iObserver->InteractOperationComplete( iStatus.Int(), 
-                                                  EUPnPAVPlay ); 
-            }
-        }        
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::StopCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::StopCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::StopCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerStopCompleted )
-            {
-            iObserver->InteractOperationComplete( KErrNone, EUPnPAVStop );    
-            }
-        else
-            {
-            iObserver->InteractOperationComplete( iStatus.Int(), 
-                                                  EUPnPAVStop ); 
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::PauseCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::PauseCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::PauseCompleteL" );
-
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerPauseCompleted )
-            {
-            iObserver->InteractOperationComplete( KErrNone,
-                                                  EUPnPAVPause );
-            }
-        else
-            {
-            iObserver->InteractOperationComplete( iStatus.Int(), 
-                                                  EUPnPAVPause );    
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetVolumeCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetVolumeCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::SetVolumeCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerSetVolumeCompleted )
-            {
-            iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );    
-            }
-        else
-            {
-            iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
-            }
-        }        
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::GetVolumeCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::GetVolumeCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::GetVolumeCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerGetVolumeCompleted )
-            {
-            iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );    
-            }
-        else
-            {
-            iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
-            }
-        }    
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::SetMuteCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::SetMuteCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::SetMuteCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerSetMuteCompleted )
-            {
-            iObserver->MuteResult( KErrNone, (TBool)iRespBufSize, ETrue );    
-            }
-        else
-            {
-            iObserver->MuteResult( iStatus.Int(), 0, ETrue );
-            }
-        }        
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::GetMuteCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::GetMuteCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::GetMuteCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerGetMuteCompleted )
-            {
-            iObserver->MuteResult( KErrNone, iRespBufSize, ETrue );    
-            }
-        else
-            {
-            iObserver->MuteResult( iStatus.Int(), 0, ETrue );
-            }
-        }        
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::PositionInfoCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::PositionInfoCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::PositionInfoCompleteL" );
-    
-    if( iObserver )
-        {
-        if( iStatus.Int() == EAVControllerPositionInfoCompleted )
-            {
-            iObserver->PositionInfoResult( KErrNone, *iBuffer2, *iBuffer );  
-            }
-        else
-            {
-            iObserver->PositionInfoResult( iStatus.Int(), 
-                                           KNullDesC8, 
-                                           KNullDesC8 );
-            }
-        }            
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPAVRenderingActive::StartMediaServerCompleteL
-// See upnpavrenderingactive.h
-// --------------------------------------------------------------------------
-void CUPnPAVRenderingActive::StartMediaServerCompleteL()
-    {
-    __LOG( "CUPnPAVRenderingActive::StartMediaServerCompleteL" );
-    
-    if( iObserver )
-        {
-
-        if( iStatus.Int() == EAVControllerStartMediaServerCompleted )
-            {
-            iMediaServerResourceReserved = ETrue;
-            iObserver->ReserveLocalMSServicesCompleted( KErrNone );
-            }
-        else
-            {
-            iObserver->ReserveLocalMSServicesCompleted( iStatus.Int() );
-            }
-        
-        }
-    }    
-// end of file
+/*
+* Copyright (c) 2006-2009 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:      AO for rendering commands
+*
+*/
+
+
+
+
+
+#include <utf.h>
+
+#include "upnpavrenderingactive.h"
+
+#include "upnpavcontrollerclient.h"
+#include "upnpavrenderingsessionimpl.h"
+#include "upnpavrequest.h"
+
+_LIT( KComponentLogfile, "upnpavcontrollerclient.txt");
+#include "upnplog.h"
+
+const TInt KPositionInfoSize = 15;
+static const TInt KSeekTargetMaxLength = 8; // "00:00:20" -> 8
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::NewL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive* CUPnPAVRenderingActive::NewL(
+    RUPnPAVControllerClient& aServer, TInt aId )
+    {
+    CUPnPAVRenderingActive* self = new (ELeave) CUPnPAVRenderingActive(
+        aServer, aId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::CUPnPAVRenderingActive
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive::CUPnPAVRenderingActive(
+    RUPnPAVControllerClient& aServer, TInt aId ):
+    CActive( EPriorityStandard ),
+    iServer( aServer ),
+    iId( aId ),
+    iBufferPtr( 0, 0 ),
+    iBufferPtr2( 0, 0 ),
+    iRespBufSizePkg( iRespBufSize )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::~CUPnPAVRenderingActive
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+CUPnPAVRenderingActive::~CUPnPAVRenderingActive()
+    {
+    __LOG1( "CUPnPAVRenderingActive::~CUPnPAVRenderingActive %d", this );
+    
+    Cancel();
+    
+    delete iBuffer;
+    delete iBuffer2;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ConstructL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ConstructL()
+    {  
+    __LOG1( "CUPnPAVRenderingActive::ConstructL %d", this );  
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RunL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::RunL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::RunL %d", this );
+    
+    switch( iPendingOperation )
+        {
+        case ESetURI:
+            {
+            SetURICompleteL();
+            }
+            break;
+
+        case ESetNextURI:
+            {
+            SetNextURICompleteL();
+            }
+            break;
+
+        case EPlay:
+            {
+            PlayCompleteL();
+            }
+            break;
+
+        case EStop:
+            {
+            StopCompleteL();
+            }
+            break;
+
+        case EPause:
+            {
+            PauseCompleteL();
+            }
+            break;
+
+        case ESetVolume:
+            {
+            SetVolumeCompleteL();
+            }
+            break;
+
+        case EGetVolume:
+            {
+            GetVolumeCompleteL();
+            }
+            break;
+
+        case ESetMute:
+            {
+            SetMuteCompleteL();
+            }
+            break;
+
+        case EGetMute:
+            {
+            GetMuteCompleteL();
+            }
+            break;
+
+        case EPositionInfo:
+            {
+            PositionInfoCompleteL();
+            }
+            break;
+            
+        case ESeekRelTime:
+            {
+            SeekRelTimeComplete();
+            }
+            break;
+            
+        default:
+            {
+            __PANICD( __FILE__, __LINE__ );
+            }
+            break;            
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::DoCancel
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::DoCancel()
+    {
+    __LOG1( "CUPnPAVRenderingActive::DoCancel %d", this );
+    
+    switch( iPendingOperation )
+        {
+        case ESetURI:
+            {
+            iServer.CancelSetURI( iId );
+            }
+            break;
+
+        case ESetNextURI:
+            {
+            iServer.CancelSetNextURI( iId );
+            }
+            break;
+
+        case EPlay:
+            {
+            iServer.CancelPlay( iId );
+            }
+            break;
+
+        case EStop:
+            {
+            iServer.CancelStop( iId );
+            }
+            break;
+
+        case EPause:
+            {
+            iServer.CancelPause( iId );
+            }
+            break;
+
+        case ESetVolume:
+            {
+            iServer.CancelSetVolume( iId );
+            }
+            break;
+
+        case EGetVolume:
+            {
+            iServer.CancelGetVolume( iId );
+            }
+            break;
+
+        case ESetMute:
+            {
+            iServer.CancelSetMute( iId );
+            }
+            break;
+
+        case EGetMute:
+            {
+            iServer.CancelGetMute( iId );
+            }
+            break;
+
+        case EPositionInfo:
+            {
+            iServer.CancelGetPositionInfo( iId );
+            }
+            break;
+                       
+        case ESeekRelTime:
+            {
+            iServer.CancelSeekRelTime( iId );
+            }
+            break;
+                       
+        default:
+            {
+            __PANICD( __FILE__, __LINE__ );
+            }
+            break;            
+        }    
+    }
+    
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RunError
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+TInt CUPnPAVRenderingActive::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetObserver
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetObserver( 
+                                 MUPnPAVRenderingSessionObserver& aObserver )
+    {
+    // Set the observer and make an async request to the server to receive
+    // device callbacks
+    __ASSERTD( !iObserver, __FILE__, __LINE__ );
+
+        
+    iObserver = &aObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::Observer
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+MUPnPAVRenderingSessionObserver* CUPnPAVRenderingActive::Observer() const
+    {
+    return iObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::RemoveObserver
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::RemoveObserver()
+    {
+    iObserver = NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetURIL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetURIL( const TDesC8& aURI,
+    const CUpnpItem& aItem )
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetURIL %d", this );
+    
+    ResetL();
+        
+    CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
+    tempRequest->SetURIL( aURI );
+    
+    iBuffer = tempRequest->ToDes8L();
+    iBufferPtr.Set( iBuffer->Des() );
+    
+    iBuffer2 = aItem.ToDes8L();
+    iBufferPtr2.Set( iBuffer2->Des() );
+    
+    CleanupStack::PopAndDestroy( tempRequest );
+
+    iPendingOperation = ESetURI;
+        
+    iServer.SetURI( iId, iBufferPtr, iBufferPtr2, iStatus );
+    SetActive();
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetNextURIL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetNextURIL( const TDesC8& aURI,
+    const CUpnpItem& aItem )    
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetNextURIL %d", this );
+    
+    ResetL();
+    
+    CUpnpAVRequest* tempRequest = CUpnpAVRequest::NewLC();
+    tempRequest->SetURIL( aURI );
+    
+    iBuffer = tempRequest->ToDes8L();
+    iBufferPtr.Set( iBuffer->Des() );
+
+    iBuffer2 = aItem.ToDes8L();
+    iBufferPtr2.Set( iBuffer2->Des() );
+    
+    CleanupStack::PopAndDestroy( tempRequest );
+            
+    iPendingOperation = ESetNextURI;
+    
+    iServer.SetNextURI( iId, iBufferPtr, iBufferPtr2, iStatus );
+    SetActive();        
+    }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PlayL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PlayL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::PlayL %d", this );
+    
+    ResetL();
+    iPendingOperation = EPlay;
+    iServer.Play( iId, iStatus );
+    SetActive();
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::StopL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::StopL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::StopL %d", this );
+    
+    ResetL();
+    iPendingOperation = EStop;
+    iServer.Stop( iId, iStatus );
+    SetActive();    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PauseL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PauseL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::PauseL %d", this );
+    
+    ResetL();
+    iPendingOperation = EPause;
+    iServer.Pause( iId, iStatus );
+    SetActive();    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetVolumeL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetVolumeL( TInt aVolumeLevel )
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetVolumeL %d", this );
+    
+    ResetL();
+    iPendingOperation = ESetVolume;
+    iServer.SetVolume( iId, aVolumeLevel, iRespBufSizePkg, iStatus );
+    SetActive();
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetVolumeL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetVolumeL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::GetVolumeL %d", this );
+    
+    ResetL();
+    iPendingOperation = EGetVolume;
+    iServer.GetVolume( iId, iRespBufSizePkg, iStatus );
+    SetActive();    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetMuteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetMuteL( TBool aMute )
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetMuteL %d", this );
+    
+    ResetL();
+    iPendingOperation = ESetMute;
+    iServer.SetMute( iId, aMute, iRespBufSizePkg, iStatus );
+    SetActive();        
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::NewL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetMuteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::GetMuteL %d", this );
+    
+    ResetL();
+    iPendingOperation = EGetMute;
+    iServer.GetMute( iId, iRespBufSizePkg, iStatus );
+    SetActive();            
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetPositionInfoL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetPositionInfoL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::GetPositionInfoL %d", this );
+    
+    ResetL();
+  
+    iBuffer = HBufC8::NewL( KPositionInfoSize );
+    iBufferPtr.Set( iBuffer->Des() );
+    iBuffer2 = HBufC8::NewL( KPositionInfoSize );
+    iBufferPtr2.Set( iBuffer2->Des() );
+    iPendingOperation = EPositionInfo;
+    iServer.GetPositionInfo( iId, iBufferPtr, iBufferPtr2, iStatus );
+    SetActive();                
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SeekRelTimeL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SeekRelTimeL( const TTime& aDesiredTime ) 
+    {
+    __LOG1( "CUPnPAVRenderingActive::SeekRelTimeL %d", this );
+    
+    ResetL();
+  
+    _LIT16( KHourMinSecFormatString, "%:0%*H%:1%T%:2%S%:3" ); //Current value equals to R_QTN_TIME_DURAT_LONG.
+    TBuf<KSeekTargetMaxLength> desiredTimeString;
+    aDesiredTime.FormatL( desiredTimeString, KHourMinSecFormatString );
+
+    iBuffer = CnvUtfConverter::ConvertFromUnicodeToUtf8L( desiredTimeString );
+    iBufferPtr.Set( iBuffer->Des() );
+    iPendingOperation = ESeekRelTime;
+    iServer.SeekRelTime( iId, iBufferPtr, iStatus );
+    SetActive();   
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::ResetL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::ResetL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::ResetL %d", this );
+    
+    if( IsActive() )
+        {
+        User::Leave( KErrServerBusy );
+        }
+
+    delete iBuffer; iBuffer = NULL;
+    delete iBuffer2; iBuffer2 = NULL;
+    iPendingOperation = ENone;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetURICompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetURICompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetURICompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerSetURICompleted )
+            {
+            iObserver->SetURIResult( KErrNone );    
+            }
+        else
+            {
+            iObserver->SetURIResult( iStatus.Int() );    
+            }
+        }    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetNextURICompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetNextURICompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetNextURICompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerSetNextURICompleted )
+            {
+            iObserver->SetNextURIResult( KErrNone );    
+            }
+        else
+            {
+            iObserver->SetNextURIResult( iStatus.Int() );    
+            }
+        }    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PlayCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PlayCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::PlayCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerPlayCompleted )
+            {
+            iObserver->InteractOperationComplete( KErrNone, EUPnPAVPlay );    
+            }
+        else
+            {
+            iObserver->InteractOperationComplete( iStatus.Int(), 
+                                                  EUPnPAVPlay ); 
+            }
+        }        
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::StopCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::StopCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::StopCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerStopCompleted )
+            {
+            iObserver->InteractOperationComplete( KErrNone, EUPnPAVStop );    
+            }
+        else
+            {
+            iObserver->InteractOperationComplete( iStatus.Int(), 
+                                                  EUPnPAVStop ); 
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PauseCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PauseCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::PauseCompleteL %d", this );
+
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerPauseCompleted )
+            {
+            iObserver->InteractOperationComplete( KErrNone,
+                                                  EUPnPAVPause );
+            }
+        else
+            {
+            iObserver->InteractOperationComplete( iStatus.Int(), 
+                                                  EUPnPAVPause );    
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetVolumeCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetVolumeCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetVolumeCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerSetVolumeCompleted )
+            {
+            iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );    
+            }
+        else
+            {
+            iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
+            }
+        }        
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetVolumeCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetVolumeCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::GetVolumeCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerGetVolumeCompleted )
+            {
+            iObserver->VolumeResult( KErrNone, iRespBufSize, ETrue );    
+            }
+        else
+            {
+            iObserver->VolumeResult( iStatus.Int(), 0, ETrue );
+            }
+        }    
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SetMuteCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SetMuteCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::SetMuteCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerSetMuteCompleted )
+            {
+            iObserver->MuteResult( KErrNone, (TBool)iRespBufSize, ETrue );    
+            }
+        else
+            {
+            iObserver->MuteResult( iStatus.Int(), 0, ETrue );
+            }
+        }        
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::GetMuteCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::GetMuteCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::GetMuteCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerGetMuteCompleted )
+            {
+            iObserver->MuteResult( KErrNone, iRespBufSize, ETrue );    
+            }
+        else
+            {
+            iObserver->MuteResult( iStatus.Int(), 0, ETrue );
+            }
+        }        
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::PositionInfoCompleteL
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::PositionInfoCompleteL()
+    {
+    __LOG1( "CUPnPAVRenderingActive::PositionInfoCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerPositionInfoCompleted )
+            {
+            iObserver->PositionInfoResult( KErrNone, *iBuffer2, *iBuffer );  
+            }
+        else
+            {
+            iObserver->PositionInfoResult( iStatus.Int(), 
+                                           KNullDesC8, 
+                                           KNullDesC8 );
+            }
+        }            
+    }
+    
+// --------------------------------------------------------------------------
+// CUPnPAVRenderingActive::SeekRelTimeComplete
+// See upnpavrenderingactive.h
+// --------------------------------------------------------------------------
+void CUPnPAVRenderingActive::SeekRelTimeComplete()
+    {
+    __LOG1( "CUPnPAVRenderingActive::SeekRelTimeCompleteL %d", this );
+    
+    if( iObserver )
+        {
+        if( iStatus.Int() == EAVControllerSeekCompleted )
+            {
+            iObserver->InteractOperationComplete( KErrNone, EUPnPAVSeek );    
+            }
+        else
+            {
+            iObserver->InteractOperationComplete( iStatus.Int(),EUPnPAVSeek); 
+            }
+        }
+    }
+
+// end of file