diff -r 3785f754ee62 -r 5360b7ddc251 upnpframework/upnpcommand/src/upnptaskresourceallocator.cpp --- a/upnpframework/upnpcommand/src/upnptaskresourceallocator.cpp Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpframework/upnpcommand/src/upnptaskresourceallocator.cpp Mon Nov 01 12:37:49 2010 +0200 @@ -1,541 +1,387 @@ -/* -* Copyright (c) 2007 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: A class that allocates resources for a task -* -*/ - - -// INCLUDE FILES -// upnpframework / avcontroller api -#include "upnpavcontrollerfactory.h" // UPnPAVControllerFactory -#include "upnpavcontroller.h" // MUPnPAVController -#include "upnpavdevice.h" // CUpnpAVDevice -#include "upnpavbrowsingsession.h" // MUPnPAVBrowsingSession - -// upnpframework / common ui -#include "upnpcommonui.h" // CUPnPCommonUI - -// command internal -#include "upnpnotehandler.h" // CUpnpNoteHandler -#include "upnptaskresourceallocator.h" // myself - -_LIT( KComponentLogfile, "upnpcommand.log"); -#include "upnplog.h" - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::NewL -// -------------------------------------------------------------------------- -CUpnpTaskResourceAllocator* CUpnpTaskResourceAllocator::NewL( - CUPnPCommonUI& aCommonUI, - TInt aMode ) - { - CUpnpTaskResourceAllocator* self = new (ELeave) - CUpnpTaskResourceAllocator( aCommonUI, aMode ); - - return self; - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::CUpnpTaskResourceAllocator -// -------------------------------------------------------------------------- -CUpnpTaskResourceAllocator::CUpnpTaskResourceAllocator( - CUPnPCommonUI& aCommonUI, - TInt aMode ) - : CAsyncOneShot( EPriorityStandard ) - , iCommonUI( aCommonUI ) - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator: constructor" ); - - iState = EStateIdle; - iErrorCode = KErrNone; - iMode = aMode; - iLocalMSSCompleted = EFalse; - - if ( iMode & EResourceLocalMediaServer || - iMode & EResourceSelectDevice ) - { - // if any of these flags are set, AVCONTROLLER flag is mandatory. - // assert that. - __ASSERTD( iMode & EResourceAvController, __FILE__, __LINE__ ); - } - - if ( iMode & EResourceLocalMediaServer ) - { - // if this flag is set, one of the device selection flags is mandatory. - __ASSERTD( iMode & EResourceSelectDevice, __FILE__, __LINE__ ); - } - - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::~CUpnpTaskResourceAllocator -// -------------------------------------------------------------------------- -CUpnpTaskResourceAllocator::~CUpnpTaskResourceAllocator() - { - if ( iState == EStateAllocating ) - { - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - - SetErrorCode( KErrCancel ); - if ( iNoteHandler ) - { - iNoteHandler->CloseWaitNote(); - } - } - - Cleanup(); - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::Cleanup -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::Cleanup() - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::Cleanup" ); - - delete iSelectedDevice; - iSelectedDevice = 0; - - if ( iMediaServerSession ) - { - // Stop local file sharing (release) - TRAPD( error, iMediaServerSession->ReleaseLocalMSServicesL() ); - if( error != KErrNone ) - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ -ReleaseLocalMSService failed %d", error ); - } - - // Stop observing the rendering session - iMediaServerSession->RemoveObserver(); - - // Stop session - iAVController->StopBrowsingSession( *iMediaServerSession ); - iMediaServerSession = NULL; - } - - if( iAVController ) - { - iAVController->RemoveDeviceObserver(); - iAVController->Release(); // Fixes ESLX-7BMJBN - iAVController = NULL; - } - - } - - - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::AllocateL -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::AllocateL() - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::AllocateL" ); - - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - - // make CAsyncOneShot to do its trick in parallel - Call(); - - // show progress note in sync. - iState = EStateAllocating; - TInt status = iNoteHandler->RunConnectingWaitNote(); - SetErrorCode( status ); - iState = EStateReady; - - // progress note has exited. Monitor errors from the progress note - - // in error situation clean up resources and leave - if ( iErrorCode != KErrNone ) - { - iState = EStateError; - Cleanup(); - User::Leave( iErrorCode ); - } - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::AVController -// -------------------------------------------------------------------------- -MUPnPAVController& CUpnpTaskResourceAllocator::AVController() - { - __ASSERT( iState == EStateReady, __FILE__, __LINE__ ); - __ASSERT( iMode & EResourceAvController, __FILE__, __LINE__ ); - - return *iAVController; - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::SelectedDevice -// -------------------------------------------------------------------------- -const CUpnpAVDevice& CUpnpTaskResourceAllocator::SelectedDevice() - { - __ASSERT( iState == EStateReady, __FILE__, __LINE__ ); - __ASSERT( iMode & EResourceSelectDevice, __FILE__, __LINE__ ); - __ASSERT( iSelectedDevice, __FILE__, __LINE__ ); - - return *iSelectedDevice; - } - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::RunL -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::RunL() - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL" ); - - // make sure we are still on the go - if ( iState == EStateAllocating ) - { - // starting of AVController - StartAvControllerL(); - } - else - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ - StartAvControllerL not done in state %d", iState ); - } - // make sure we are still on the go - if ( iState == EStateAllocating ) - { - // select device - SelectDeviceL(); - } - else - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ - SelectDeviceL not done in state %d", iState ); - } - // make sure we are still on the go - if ( iState == EStateAllocating ) - { - // start the local mediaserver - StartLocalMediaServerL(); - } - else - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ - StartLocalMediaServerL not done in state %d", iState ); - } - // make sure we are still on the go - if ( iState == EStateAllocating ) - { - // if local media server was started but not yet completed, - // wait for callback - if ( iMode & EResourceLocalMediaServer - && !iLocalMSSCompleted ) - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ - waiting for ReserveLocalMSServicesCompleted" ); - iState = EStateWaitingForLMS; - } - // otherwise we are done now - else - { - // close the wait note - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - iNoteHandler->CloseWaitNote(); - } - } - else - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ - CloseWaitNote not done in state %d", iState ); - } - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::RunError -// -------------------------------------------------------------------------- -TInt CUpnpTaskResourceAllocator::RunError( TInt aError ) - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunError: %d", - aError ); - - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - - // asynchronous operation leaves. store the error code and make the - // wait note exit. - SetErrorCode( aError ); - iNoteHandler->CloseWaitNote(); - - return KErrNone; - } - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::StartAvControllerL -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::StartAvControllerL() - { - if ( iMode & EResourceAvController ) - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ -StartAvControllerL" ); - - // Create new UpnpAvController client instance - iAVController = UPnPAVControllerFactory::NewUPnPAVControllerL(); - - // Register as an observer (for WLAN lost notification) - iAVController->SetDeviceObserver( *this ); - } - else - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ - AvController not started" ); - } - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::StartLocalMediaServerL -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::StartLocalMediaServerL() - { - if ( iMode & EResourceLocalMediaServer ) - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ -StartLocalMediaServerL" ); - - // create a dummy device - CUpnpAVDevice* dummyDevice = CUpnpAVDevice::NewLC(); - dummyDevice->SetUuidL( KNullDesC8 ); - dummyDevice->SetDeviceType(CUpnpAVDevice::EMediaServer); - // create a session for mediaserver resources keepalive - iMediaServerSession = - &iAVController->StartBrowsingSessionL( *dummyDevice ); - iMediaServerSession->SetObserver( *this ); - CleanupStack::PopAndDestroy( dummyDevice ); - // now reserve - iMediaServerSession->ReserveLocalMSServicesL(); - } - } - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::SelectDeviceL -// -------------------------------------------------------------------------- -// -void CUpnpTaskResourceAllocator::SelectDeviceL() - { - if ( iMode & EResourceSelectDevice ) - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::SelectDeviceL" ); - - TInt status = KErrNone; - - // decide device filters and popup title - TUPnPDeviceTypesToSearch deviceFilter = - EUPnPSearchAllDevices; - TUPnPDialogTitle popupTitle = EUPnPSelectDeviceTitle; - - if ( iMode & EResourceSelectImageRenderer ) - { - deviceFilter = EUPnPSearchRenderingDevicesWithImageCapability; - } - else if ( iMode & EResourceSelectCopyServer ) - { - deviceFilter = EUPnPSearchServerDevicesWithCopyCapability; - popupTitle = EUPnPCopyToTitle; - } - else if ( iMode & EResourceSelectMoveServer ) - { - deviceFilter = EUPnPSearchServerDevicesWithCopyCapability; - popupTitle = EUPnPMoveToTitle; - } - - // Launch the device selection dialog - CUpnpAVDevice* tempDevice = CUpnpAVDevice::NewL(); - CleanupStack::PushL( tempDevice ); - status = iCommonUI.SelectDeviceL( - *iAVController, - *tempDevice, - deviceFilter, - popupTitle ); - - // Fix UpnpCommonUi return value - if( status > 0 ) - { - status = KErrNone; - } - - if( status != KErrNone ) - { - // failed - User::Leave( status ); - } - - CleanupStack::Pop( tempDevice ); - iSelectedDevice = tempDevice; - - } - } - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::SetErrorCode -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::SetErrorCode( TInt aErrorCode ) - { - __LOG2( "[UpnpCommand]\t CUpnpTaskResourceAllocator::SetErrorCode \ -%d -> %d", iErrorCode, aErrorCode ); - - if ( iErrorCode == KErrNone ) - { - __LOG( "error code changed"); - iErrorCode = aErrorCode; - } - // if user cancelled operation, we don't need other error codes - // so it's ok to reset old error code - else if ( aErrorCode == KErrCancel ) - { - __LOG( "error code reseted"); - iErrorCode = aErrorCode; - } - } - -// ========================================================================== -// Methods for AVController device observer -// ========================================================================== - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::WLANConnectionLost -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::WLANConnectionLost() - { - __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::WLANConnectionLost" ); - - if ( iState == EStateAllocating || iState == EStateWaitingForLMS ) - { - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - SetErrorCode( KErrDisconnected ); - iNoteHandler->CloseWaitNote(); - iState = EStateError; - } - } - -void CUpnpTaskResourceAllocator::UPnPDeviceDiscovered( - const CUpnpAVDevice& /*aDevice*/ ) - { - } - -void CUpnpTaskResourceAllocator::UPnPDeviceDisappeared( - const CUpnpAVDevice& aDevice ) - { - __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); - if ( ( iState == EStateAllocating || iState == EStateWaitingForLMS ) - && iSelectedDevice != 0 ) - { - if ( aDevice.Uuid() == iSelectedDevice->Uuid() ) - { - __LOG( "[UpnpCommand]\t selected device lost !" ); - SetErrorCode( KErrDisconnected ); - iNoteHandler->CloseWaitNote(); - iState = EStateError; - } - } - } - - -// ========================================================================== -// Methods for AVController browsing session observer -// ========================================================================== - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::ReserveLocalMSServicesCompleted -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::ReserveLocalMSServicesCompleted( TInt aError ) - { - __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ -ReserveLocalMSServicesCompleted: %d", aError ); - - if ( iState == EStateAllocating - || iState == EStateWaitingForLMS ) - { - iLocalMSSCompleted = ETrue; - SetErrorCode( aError ); - if ( aError == KErrNone ) - { - iLocalMSStarted = ETrue; - iMediaServerSession->RemoveObserver(); - } - // allocation done, just waiting for this callback - // close note and we are done - if( iState == EStateWaitingForLMS ) - { - iNoteHandler->CloseWaitNote(); - } - } - } - - -void CUpnpTaskResourceAllocator::BrowseResponse( - const TDesC8& /*aBrowseResponse*/, - TInt /*aError*/, - TInt /*aMatches*/, - TInt /*aTotalCount*/, - const TDesC8& /*aUpdateId*/ ) - { - } - -void CUpnpTaskResourceAllocator::SearchResponse( - const TDesC8& /*aSearchResponse*/, - TInt /*aError*/, - TInt /*aMatches*/, - TInt /*aTotalCount*/, - const TDesC8& /*aUpdateId*/ ) - { - } - -void CUpnpTaskResourceAllocator::SearchCapabilitiesResponse( - TInt /*aError*/, - const TDesC8& /*aSearchCapabilities*/ ) - { - } - -void CUpnpTaskResourceAllocator::CreateContainerResponse( - TInt /*aError*/, - const TDesC8& /*aObjectId*/ ) - { - } - -void CUpnpTaskResourceAllocator::DeleteObjectResponse( - TInt /*aError*/ ) - { - } - -void CUpnpTaskResourceAllocator::MediaServerDisappeared( - TUPnPDeviceDisconnectedReason /*aReason*/ ) - { - } - - - -// -------------------------------------------------------------------------- -// CUpnpTaskResourceAllocator::SetNoteHandlerL -// Sets the pointer to the note handler. -// -------------------------------------------------------------------------- -void CUpnpTaskResourceAllocator::SetNoteHandlerL( - CUpnpNoteHandler* aNoteHandler ) - { - // Check parameter - if( !aNoteHandler ) - { - User::Leave( KErrArgument ); - } - - iNoteHandler = aNoteHandler; - } +/* +* Copyright (c) 2007-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: A class that allocates resources for a task +* +*/ + + +// INCLUDE FILES +// upnpframework / avcontroller api +#include "upnpavcontrollerfactory.h" // UPnPAVControllerFactory +#include "upnpavcontroller.h" // MUPnPAVController +#include "upnpavdevice.h" // CUpnpAVDevice +#include "upnpavbrowsingsession.h" // MUPnPAVBrowsingSession + +// upnpframework / common ui +#include "upnpcommonui.h" // CUPnPCommonUI + +// command internal +#include "upnpnotehandler.h" // CUpnpNoteHandler +#include "upnptaskresourceallocator.h" // myself + +_LIT( KComponentLogfile, "upnpcommand.log"); +#include "upnplog.h" + + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::NewL +// -------------------------------------------------------------------------- +CUpnpTaskResourceAllocator* CUpnpTaskResourceAllocator::NewL( + CUPnPCommonUI& aCommonUI, + TInt aMode ) + { + CUpnpTaskResourceAllocator* self = new (ELeave) + CUpnpTaskResourceAllocator( aCommonUI, aMode ); + + return self; + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::CUpnpTaskResourceAllocator +// -------------------------------------------------------------------------- +CUpnpTaskResourceAllocator::CUpnpTaskResourceAllocator( + CUPnPCommonUI& aCommonUI, + TInt aMode ) + : CAsyncOneShot( EPriorityStandard ) + , iCommonUI( aCommonUI ) + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator: constructor" ); + + iState = EStateIdle; + iErrorCode = KErrNone; + iMode = aMode; + + if ( iMode & EResourceSelectDevice ) + { + // AVCONTROLLER flag is mandatory. + // assert that. + __ASSERTD( iMode & EResourceAvController, __FILE__, __LINE__ ); + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::~CUpnpTaskResourceAllocator +// -------------------------------------------------------------------------- +CUpnpTaskResourceAllocator::~CUpnpTaskResourceAllocator() + { + if ( iState == EStateAllocating ) + { + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + + SetErrorCode( KErrCancel ); + if ( iNoteHandler ) + { + iNoteHandler->CloseWaitNote(); + } + } + + Cleanup(); + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::Cleanup +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::Cleanup() + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::Cleanup" ); + + delete iSelectedDevice; + iSelectedDevice = 0; + + if( iAVController ) + { + iAVController->RemoveDeviceObserver(); + iAVController->Release(); // Fixes ESLX-7BMJBN + iAVController = NULL; + } + } + + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::AllocateL +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::AllocateL() + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::AllocateL" ); + + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + + // make CAsyncOneShot to do its trick in parallel + Call(); + + // show progress note in sync. + iState = EStateAllocating; + TInt status = iNoteHandler->RunConnectingWaitNote(); + SetErrorCode( status ); + iState = EStateReady; + + // progress note has exited. Monitor errors from the progress note + + // in error situation clean up resources and leave + if ( iErrorCode != KErrNone ) + { + iState = EStateError; + Cleanup(); + User::Leave( iErrorCode ); + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::AVController +// -------------------------------------------------------------------------- +MUPnPAVController& CUpnpTaskResourceAllocator::AVController() + { + __ASSERT( iState == EStateReady, __FILE__, __LINE__ ); + __ASSERT( iMode & EResourceAvController, __FILE__, __LINE__ ); + + return *iAVController; + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::SelectedDevice +// -------------------------------------------------------------------------- +const CUpnpAVDevice& CUpnpTaskResourceAllocator::SelectedDevice() + { + __ASSERT( iState == EStateReady, __FILE__, __LINE__ ); + __ASSERT( iMode & EResourceSelectDevice, __FILE__, __LINE__ ); + __ASSERT( iSelectedDevice, __FILE__, __LINE__ ); + + return *iSelectedDevice; + } + + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::RunL +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::RunL() + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL" ); + + // make sure we are still on the go + if ( iState == EStateAllocating ) + { + // starting of AVController + StartAvControllerL(); + } + else + { + __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ + StartAvControllerL not done in state %d", iState ); + } + // make sure we are still on the go + if ( iState == EStateAllocating ) + { + // select device + SelectDeviceL(); + } + else + { + __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ + SelectDeviceL not done in state %d", iState ); + } + // make sure we are still on the go + if ( iState == EStateAllocating ) + { + // close the wait note + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + iNoteHandler->CloseWaitNote(); + } + else + { + __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunL \ + CloseWaitNote not done in state %d", iState ); + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::RunError +// -------------------------------------------------------------------------- +TInt CUpnpTaskResourceAllocator::RunError( TInt aError ) + { + __LOG1( "[UpnpCommand]\t CUpnpTaskResourceAllocator::RunError: %d", + aError ); + + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + + // asynchronous operation leaves. store the error code and make the + // wait note exit. + SetErrorCode( aError ); + iNoteHandler->CloseWaitNote(); + + return KErrNone; + } + + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::StartAvControllerL +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::StartAvControllerL() + { + if ( iMode & EResourceAvController ) + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ +StartAvControllerL" ); + + // Create new UpnpAvController client instance + iAVController = UPnPAVControllerFactory::NewUPnPAVControllerL(); + + // Register as an observer (for WLAN lost notification) + iAVController->SetDeviceObserver( *this ); + } + else + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::\ + AvController not started" ); + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::SelectDeviceL +// -------------------------------------------------------------------------- +// +void CUpnpTaskResourceAllocator::SelectDeviceL() + { + if ( iMode & EResourceSelectDevice ) + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::SelectDeviceL" ); + + TInt status = KErrNone; + + // decide device filters and popup title + TUPnPDeviceTypesToSearch deviceFilter = + EUPnPSearchAllDevices; + TUPnPDialogTitle popupTitle = EUPnPSelectDeviceTitle; + + if ( iMode & EResourceSelectImageRenderer ) + { + deviceFilter = EUPnPSearchRenderingDevicesWithImageCapability; + } + else if ( iMode & EResourceSelectCopyServer ) + { + deviceFilter = EUPnPSearchServerDevicesWithCopyCapability; + popupTitle = EUPnPCopyToTitle; + } + else if ( iMode & EResourceSelectMoveServer ) + { + deviceFilter = EUPnPSearchServerDevicesWithCopyCapability; + popupTitle = EUPnPMoveToTitle; + } + + // Launch the device selection dialog + CUpnpAVDevice* tempDevice = CUpnpAVDevice::NewL(); + CleanupStack::PushL( tempDevice ); + status = iCommonUI.SelectDeviceL( + *iAVController, + *tempDevice, + deviceFilter, + popupTitle ); + + // Fix UpnpCommonUi return value + if( status > 0 ) + { + status = KErrNone; + } + + if( status != KErrNone ) + { + // failed + User::Leave( status ); + } + + CleanupStack::Pop( tempDevice ); + iSelectedDevice = tempDevice; + + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::SetErrorCode +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::SetErrorCode( TInt aErrorCode ) + { + __LOG2( "[UpnpCommand]\t CUpnpTaskResourceAllocator::SetErrorCode \ +%d -> %d", iErrorCode, aErrorCode ); + + if ( iErrorCode == KErrNone ) + { + __LOG( "error code changed"); + iErrorCode = aErrorCode; + } + // if user cancelled operation, we don't need other error codes + // so it's ok to reset old error code + else if ( aErrorCode == KErrCancel ) + { + __LOG( "error code reseted"); + iErrorCode = aErrorCode; + } + } + +// ========================================================================== +// Methods for AVController device observer +// ========================================================================== + + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::WLANConnectionLost +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::WLANConnectionLost() + { + __LOG( "[UpnpCommand]\t CUpnpTaskResourceAllocator::WLANConnectionLost" ); + + if ( iState == EStateAllocating ) + { + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + SetErrorCode( KErrDisconnected ); + iNoteHandler->CloseWaitNote(); + iState = EStateError; + } + } + +void CUpnpTaskResourceAllocator::UPnPDeviceDiscovered( + const CUpnpAVDevice& /*aDevice*/ ) + { + } + +void CUpnpTaskResourceAllocator::UPnPDeviceDisappeared( + const CUpnpAVDevice& aDevice ) + { + __ASSERTD( iNoteHandler, __FILE__, __LINE__ ); + if ( ( iState == EStateAllocating ) + && iSelectedDevice != 0 ) + { + if ( aDevice.Uuid() == iSelectedDevice->Uuid() ) + { + __LOG( "[UpnpCommand]\t selected device lost !" ); + SetErrorCode( KErrDisconnected ); + iNoteHandler->CloseWaitNote(); + iState = EStateError; + } + } + } + +// -------------------------------------------------------------------------- +// CUpnpTaskResourceAllocator::SetNoteHandlerL +// Sets the pointer to the note handler. +// -------------------------------------------------------------------------- +void CUpnpTaskResourceAllocator::SetNoteHandlerL( + CUpnpNoteHandler* aNoteHandler ) + { + // Check parameter + if( !aNoteHandler ) + { + User::Leave( KErrArgument ); + } + + iNoteHandler = aNoteHandler; + }