--- 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;
+ }