diff -r 3785f754ee62 -r 5360b7ddc251 upnpframework/upnpcommand/src/upnpfiletransferbasetask.cpp --- a/upnpframework/upnpcommand/src/upnpfiletransferbasetask.cpp Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpframework/upnpcommand/src/upnpfiletransferbasetask.cpp Mon Nov 01 12:37:49 2010 +0200 @@ -1,257 +1,257 @@ -/* -* 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: Source file for CUpnpFileTransferBaseTask class. -* -*/ - - -// INCLUDE FILES -// system -#include // ConvertToUnicodeFromUtf8L - -// upnp stack api -#include // CUpnpItem -#include // CUpnpObject (cast) - -// upnp framework / avcontroller api -#include "upnpavcontrollerfactory.h" // UPnPAVControllerFactory -#include "upnpavcontroller.h" // MUPnPAVController -#include "upnpavbrowsingsession.h" // MUPnPAVBrowsingSession -#include "upnpavsessionobserverbase.h" // MUPnPAVSessionObserverBase -#include "upnpavdevice.h" // CUpnpAVDevice - -// upnp framework / common utils api -#include "upnpcommonutils.h" // TUPnPItemType -#include "upnpmetadatafetcher.h" // UPnPMetadataFetcher - -// upnp framework / fte -#include "upnpfiletransferengine.h" // CUpnpFileTransferEngine -// upnp framework / common ui -#include "upnpcommonui.h" // CUpnpCommonUI - -// upnpcommand internal -#include "upnpfilepipe.h" // CUpnpFilePipe -#include "upnpcommandparameters.h" // CUpnpCommandParameters -#include "upnptaskhandler.h" // MUpnpTaskHandler -#include "upnpnotehandler.h" // CUpnpNoteHandler -#include "upnpcommand.h" // CUpnpCommand -#include "upnptaskresourceallocator.h" // CUpnpTaskResourceAllocator -#include "upnpfiletransferbasetask.h" // CUpnpFileTransferBaseTask - - -_LIT( KComponentLogfile, "upnpcommand.log"); -#include "upnplog.h" - - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::CUpnpFileTransferBaseTask -// First phase construction. -// -------------------------------------------------------------------------- -// -CUpnpFileTransferBaseTask::CUpnpFileTransferBaseTask() - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::Constructor" ); - } - -// -------------------------------------------------------------------------- -// Destructor. -// -------------------------------------------------------------------------- -// -CUpnpFileTransferBaseTask::~CUpnpFileTransferBaseTask() - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::Destructor" ); - - // delete the resource allocator - // Local mediaserver and AVController resources will be freed. - delete iResourceAllocator; - delete iCommonUI; - } - - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::AllocateFileTransferResourcesL -// Allocates the Upnp Fw resources. -// -------------------------------------------------------------------------- -// -void CUpnpFileTransferBaseTask::AllocateFileTransferResourcesL( TInt aMode) - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::AllocateResourcesL" ); - - // create common UI - iCommonUI = CUPnPCommonUI::NewL(); - - // create the resource allocator - iResourceAllocator = CUpnpTaskResourceAllocator::NewL( - *iCommonUI, aMode); - - iState = EStateConnected; - - iResourceAllocator->SetNoteHandlerL( NoteHandler() ); - - // now allocate! - iResourceAllocator->AllocateL(); - - // start a browsing session - iBrowsingSession = - &iResourceAllocator->AVController().StartBrowsingSessionL( - iResourceAllocator->SelectedDevice() ); - - iBrowsingSession->SetObserver( *this ); - } - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::ResourceAllocator -// Executes the task. -// -------------------------------------------------------------------------- -// -CUpnpTaskResourceAllocator* CUpnpFileTransferBaseTask::ResourceAllocator() - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::ResourceAllocator" ); - - return iResourceAllocator; - } - - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::ExecuteFileTransferL -// Executes the task. -// -------------------------------------------------------------------------- -// -void CUpnpFileTransferBaseTask::ExecuteFileTransferL( TBool aRemoveFiles, - TInt& aTransferredFiles) - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::ExecuteL" ); - - - // Leave if command has not been allocated yet - if( !FilePipe() || - !CommandParameters() || - !NoteHandler() || - !iBrowsingSession || - !iResourceAllocator ) - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ -ExecuteFileTransferL resources not allocated, leave" ); - User::Leave( KErrNotReady ); - } - - // reset drm-note calculator ( note is shown once per operation ) - NoteHandler()->ResetDrmNoteCount(); - - TInt status = KErrNone; - TInt origFileCount = FilePipe()->Count();; - TInt failedFileCount = 0; - - // Initialise and execute the UpnpFileTransferEngine - CUpnpFileTransferEngine* ftEngine = NULL; - ftEngine = CUpnpFileTransferEngine::NewL( iBrowsingSession ); - if( status == KErrNone && - ftEngine ) - { - CleanupStack::PushL( ftEngine ); - - // move operation - if( aRemoveFiles ) - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask, move files" ); - ftEngine->MoveLocalFilesToRemoteServerL( - &FilePipe()->AsArray() ); - } - // copy operation - else - { - // Read the collection name (if any) - const TDesC& collectionName = - CommandParameters()->Get( UpnpCommand::EParamCollectionName ); - - // If collection name is not set, the operation is file copy - if( collectionName != KNullDesC ) - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask,\ - copy playlist" ); - ftEngine->CopyLocalPlaylistToRemoteServerL( - collectionName, &FilePipe()->AsArray() ); - } - // If collection name is set, the operation is playlist copy - else - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask,\ - copy files" ); - ftEngine->CopyLocalFilesToRemoteServerL( - &FilePipe()->AsArray() ); - } - } - - // Clean up - CleanupStack::PopAndDestroy( ftEngine ); - ftEngine = NULL; - } - - // calculate number of transferred files based on original file count and - // items remaining in filepipe (those were NOT transferred) - failedFileCount = FilePipe()->Count(); - aTransferredFiles = origFileCount - failedFileCount; - - // check if connection was lost during transfer - if( iState != EStateConnected ) - { - status = KErrDisconnected; - } - - __LOG1( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ -ExecuteL done status %d", status ); - - // If there was an error, leave - if( status != KErrNone ) - { - User::Leave( status ); - } - } - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::MediaServerDisappeared -// Notifies that the Media Renderer we have a session with has disappeared. -// -------------------------------------------------------------------------- -// -void CUpnpFileTransferBaseTask::MediaServerDisappeared( - TUPnPDeviceDisconnectedReason aReason ) - { - __LOG1( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ -MediaServerDisappeared aReason %d", aReason ); - - // need to know if wlan or server was lost - if( aReason == MUPnPAVSessionObserverBase::EWLANLost ) - { - iState = EStateWLANLost; - } - else - { - iState = EStateMSLost; - } - - } - -// -------------------------------------------------------------------------- -// CUpnpFileTransferBaseTask::IsWlanActive -// Returns connection state -// -------------------------------------------------------------------------- -// -TBool CUpnpFileTransferBaseTask::IsWlanActive() - { - __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::IsWlanActive" ); - - return (iState != EStateWLANLost); - } - -// End of File +/* +* Copyright (c) 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: Source file for CUpnpFileTransferBaseTask class. +* +*/ + + +// INCLUDE FILES +// system +#include // ConvertToUnicodeFromUtf8L + +// upnp stack api +#include // CUpnpItem +#include // CUpnpObject (cast) + +// upnp framework / avcontroller api +#include "upnpavcontrollerfactory.h" // UPnPAVControllerFactory +#include "upnpavcontroller.h" // MUPnPAVController +#include "upnpavbrowsingsession.h" // MUPnPAVBrowsingSession +#include "upnpavsessionobserverbase.h" // MUPnPAVSessionObserverBase +#include "upnpavdevice.h" // CUpnpAVDevice + +// upnp framework / common utils api +#include "upnpcommonutils.h" // TUPnPItemType +#include "upnpmetadatafetcher.h" // UPnPMetadataFetcher + +// upnp framework / fte +#include "upnpfiletransferengine.h" // CUpnpFileTransferEngine +// upnp framework / common ui +#include "upnpcommonui.h" // CUpnpCommonUI + +// upnpcommand internal +#include "upnpfilepipe.h" // CUpnpFilePipe +#include "upnpcommandparameters.h" // CUpnpCommandParameters +#include "upnptaskhandler.h" // MUpnpTaskHandler +#include "upnpnotehandler.h" // CUpnpNoteHandler +#include "upnpcommand.h" // CUpnpCommand +#include "upnptaskresourceallocator.h" // CUpnpTaskResourceAllocator +#include "upnpfiletransferbasetask.h" // CUpnpFileTransferBaseTask + + +_LIT( KComponentLogfile, "upnpcommand.log"); +#include "upnplog.h" + + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::CUpnpFileTransferBaseTask +// First phase construction. +// -------------------------------------------------------------------------- +// +CUpnpFileTransferBaseTask::CUpnpFileTransferBaseTask() + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::Constructor" ); + } + +// -------------------------------------------------------------------------- +// Destructor. +// -------------------------------------------------------------------------- +// +CUpnpFileTransferBaseTask::~CUpnpFileTransferBaseTask() + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::Destructor" ); + + // delete the resource allocator + // Local mediaserver and AVController resources will be freed. + delete iResourceAllocator; + delete iCommonUI; + } + + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::AllocateFileTransferResourcesL +// Allocates the Upnp Fw resources. +// -------------------------------------------------------------------------- +// +void CUpnpFileTransferBaseTask::AllocateFileTransferResourcesL( TInt aMode) + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::AllocateResourcesL" ); + + // create common UI + iCommonUI = CUPnPCommonUI::NewL(); + + // create the resource allocator + iResourceAllocator = CUpnpTaskResourceAllocator::NewL( + *iCommonUI, aMode); + + iState = EStateConnected; + + iResourceAllocator->SetNoteHandlerL( NoteHandler() ); + + // now allocate! + iResourceAllocator->AllocateL(); + + // start a browsing session + iBrowsingSession = + &iResourceAllocator->AVController().StartBrowsingSessionL( + iResourceAllocator->SelectedDevice() ); + + iBrowsingSession->SetObserver( *this ); + } + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::ResourceAllocator +// Executes the task. +// -------------------------------------------------------------------------- +// +CUpnpTaskResourceAllocator* CUpnpFileTransferBaseTask::ResourceAllocator() + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::ResourceAllocator" ); + + return iResourceAllocator; + } + + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::ExecuteFileTransferL +// Executes the task. +// -------------------------------------------------------------------------- +// +void CUpnpFileTransferBaseTask::ExecuteFileTransferL( TBool aRemoveFiles, + TInt& aTransferredFiles) + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::ExecuteL" ); + + + // Leave if command has not been allocated yet + if( !FilePipe() || + !CommandParameters() || + !NoteHandler() || + !iBrowsingSession || + !iResourceAllocator ) + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ +ExecuteFileTransferL resources not allocated, leave" ); + User::Leave( KErrNotReady ); + } + + // reset drm-note calculator ( note is shown once per operation ) + NoteHandler()->ResetDrmNoteCount(); + + TInt status = KErrNone; + TInt origFileCount = FilePipe()->Count(); + TInt failedFileCount = 0; + + // Initialise and execute the UpnpFileTransferEngine + CUpnpFileTransferEngine* ftEngine = NULL; + ftEngine = CUpnpFileTransferEngine::NewL( iBrowsingSession ); + if( status == KErrNone && + ftEngine ) + { + CleanupStack::PushL( ftEngine ); + + // move operation + if( aRemoveFiles ) + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask, move files" ); + ftEngine->MoveLocalFilesToRemoteServerL( + &FilePipe()->AsArray() ); + } + // copy operation + else + { + // Read the collection name (if any) + const TDesC& collectionName = + CommandParameters()->Get( UpnpCommand::EParamCollectionName ); + + // If collection name is not set, the operation is file copy + if( collectionName != KNullDesC ) + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask,\ + copy playlist" ); + ftEngine->CopyLocalPlaylistToRemoteServerL( + collectionName, &FilePipe()->AsArray() ); + } + // If collection name is set, the operation is playlist copy + else + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask,\ + copy files" ); + ftEngine->CopyLocalFilesToRemoteServerL( + &FilePipe()->AsArray() ); + } + } + + // Clean up + CleanupStack::PopAndDestroy( ftEngine ); + ftEngine = NULL; + } + + // calculate number of transferred files based on original file count and + // items remaining in filepipe (those were NOT transferred) + failedFileCount = FilePipe()->Count(); + aTransferredFiles = origFileCount - failedFileCount; + + // check if connection was lost during transfer + if( iState != EStateConnected ) + { + status = KErrDisconnected; + } + + __LOG1( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ +ExecuteL done status %d", status ); + + // If there was an error, leave + if( status != KErrNone ) + { + User::Leave( status ); + } + } + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::MediaServerDisappeared +// Notifies that the Media Renderer we have a session with has disappeared. +// -------------------------------------------------------------------------- +// +void CUpnpFileTransferBaseTask::MediaServerDisappeared( + TUPnPDeviceDisconnectedReason aReason ) + { + __LOG1( "[UpnpCommand]\t CUpnpFileTransferBaseTask::\ +MediaServerDisappeared aReason %d", aReason ); + + // need to know if wlan or server was lost + if( aReason == MUPnPAVSessionObserverBase::EWLANLost ) + { + iState = EStateWLANLost; + } + else + { + iState = EStateMSLost; + } + + } + +// -------------------------------------------------------------------------- +// CUpnpFileTransferBaseTask::IsWlanActive +// Returns connection state +// -------------------------------------------------------------------------- +// +TBool CUpnpFileTransferBaseTask::IsWlanActive() + { + __LOG( "[UpnpCommand]\t CUpnpFileTransferBaseTask::IsWlanActive" ); + + return (iState != EStateWLANLost); + } + +// End of File