--- a/upnpframework/upnpcommand/src/upnpcommandimplementation.cpp Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpframework/upnpcommand/src/upnpcommandimplementation.cpp Mon Nov 01 12:37:49 2010 +0200
@@ -1,474 +1,480 @@
-/*
-* 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 CUpnpCommandImplementation class.
-*
-*/
-
-
-// INCLUDE FILES
-// system
-#include <centralrepository.h>
-
-// upnpframework / avcontroller helper api
-#include "upnpfileutility.h" // IsFileProtectedL()
-
-// upnpframework / command api
-#include "upnpcommand.h" // CUpnpCommand
-#include "upnpcommandcallback.h" // MUpnpCommandCallback
-
-// command internal
-#include "upnpcommandimplementation.h"
-#include "upnpfilepipe.h"
-#include "upnpcommandparameters.h"
-#include "upnpnotehandler.h"
-#include "upnpshowtask.h"
-#include "upnpcopytask.h"
-#include "upnpmovetask.h"
-#include "upnpbrowsetask.h"
-#include "upnprunsetuptask.h"
-
-_LIT( KComponentLogfile, "upnpcommand.log");
-#include "upnplog.h"
-
-// CONSTANTS
-const TUid KCRUidUPnPApplication = {0x20009cae};
-const TUint32 KUPnPAppAccessPointSetting = 0x00000001;
-
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::NewL
-// Creates an instance of the implementation.
-// --------------------------------------------------------------------------
-//
-CUpnpCommandImplementation* CUpnpCommandImplementation::NewL()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::NewL" );
-
- CUpnpCommandImplementation* self = NULL;
- self = new (ELeave) CUpnpCommandImplementation();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::CUpnpCommandImplementation
-// First phase construction.
-// --------------------------------------------------------------------------
-//
-CUpnpCommandImplementation::CUpnpCommandImplementation()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::Constructor" );
-
- // Set command ID to unknown by default. Client is forced to set this
- // (inline code in the NewL method of CUpnpCommand interface class).
- iCommandId = UpnpCommand::ECommandUndefined;
-
- // By default there is no task
- iTask = NULL;
-
- // By default the state is IDLE (resources not allocated nor executing)
- iState = UpnpCommand::EStateIdle;
-
- // DRM note will be shown only once
- iDrmNoteShown = EFalse;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::ConstructL
-// Second phase construction.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::ConstructL()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ConstructL" );
-
- iFilePipe = CUpnpFilePipe::NewL();
- iParameters = CUpnpCommandParameters::NewL();
- iNoteHandler = CUpnpNoteHandler::NewL();
- }
-
-// --------------------------------------------------------------------------
-// Destructor.
-// --------------------------------------------------------------------------
-//
-CUpnpCommandImplementation::~CUpnpCommandImplementation()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::Destructor" );
-
- delete iTask;
- iTask = NULL;
- delete iFilePipe;
- iFilePipe = NULL;
- delete iParameters;
- iParameters = NULL;
- delete iNoteHandler;
- iNoteHandler = NULL;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::SetCommandIdL
-// Sets the command ID.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::SetCommandIdL(
- UpnpCommand::TUpnpCommandId aCommandId )
- {
- __LOG1( "[UpnpCommand]\t CUpnpCommandImplementation::SetCommandIdL %d",
- TInt( aCommandId ) );
-
- // command ID can only be set ONCE !
- __ASSERTD( iCommandId == UpnpCommand::ECommandUndefined,
- __FILE__, __LINE__ );
- if( iCommandId != UpnpCommand::ECommandUndefined )
- {
- User::Leave( KErrServerBusy );
- }
-
- iCommandId = aCommandId;
-
- // If the command is to Show images & video, re-create the file pipe.
- // In this case we are using a file pipe of a limited size (1)
- if( iCommandId == UpnpCommand::ECommandShow )
- {
- delete iFilePipe;
- iFilePipe = NULL; // In case the following method leaves
- iFilePipe = CUpnpFilePipe::NewL( 1 );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::SetObserver
-// Sets the callback interface
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::SetObserver(
- MUpnpCommandCallback* aCallback )
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::SetObserver" );
-
- // Set the observer
- iParameters->SetObserver( aCallback );
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::IsAvailableL
-// Checks if a command is available for execution
-// --------------------------------------------------------------------------
-//
-TBool CUpnpCommandImplementation::IsAvailableL()
- {
- return IsAvailableL( iCommandId );
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::IsAvailableL
-// Checks if a command is available for execution
-// --------------------------------------------------------------------------
-//
-TBool CUpnpCommandImplementation::IsAvailableL(
- UpnpCommand::TUpnpCommandId aCommandId )
- {
- switch( aCommandId )
- {
- case UpnpCommand::ECommandShow: // flow through
- case UpnpCommand::ECommandCopy: // flow through
- case UpnpCommand::ECommandMove: // flow through
- case UpnpCommand::ECommandBrowse:
- {
- // available if upnp is configured
- return IsUpnpConfiguredL();
- }
- case UpnpCommand::ECommandSetup:
- {
- // setup is always available
- return ETrue;
- }
- default:
- __PANICD( __FILE__, __LINE__ );
- }
-
- return EFalse;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::AllocateResourcesL
-// Allocates the Upnp Framework resources.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::AllocateResourcesL()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::AllocateResourcesL" );
-
- // Leave if a task is already going (resources allocated)
- if( iTask )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- // Instantiate a task according to the command ID
- if( iCommandId == UpnpCommand::ECommandShow )
- {
- iTask = CUpnpShowTask::NewL();
- }
- else if( iCommandId == UpnpCommand::ECommandCopy )
- {
- iTask = CUpnpCopyTask::NewL();
- }
- else if( iCommandId == UpnpCommand::ECommandMove )
- {
- iTask = CUpnpMoveTask::NewL();
- }
- else if( iCommandId == UpnpCommand::ECommandBrowse )
- {
- iTask = CUpnpBrowseTask::NewL();
- }
- else if( iCommandId == UpnpCommand::ECommandSetup )
- {
- iTask = CUpnpRunSetupTask::NewL();
- }
- else
- {
- __PANICD( __FILE__, __LINE__ );
- User::Leave( KErrNotSupported );
- }
-
- // Set the pointers for the task (using base class CUpnpTask methods)
- iTask->SetTaskHandlerL( this );
- iTask->SetCommandParametersL( iParameters );
- iTask->SetFilePipeL( iFilePipe );
- iTask->SetNoteHandlerL( iNoteHandler );
-
- // Allocate the resources
- TRAPD( allocateError, iTask->AllocateResourcesL() );
-
- // If allocating resources failed, delete the task and forward the
- // leave code.
- if( allocateError != KErrNone )
- {
- __LOG1( "[UpnpCommand]\t CUpnpCommandImplementation::AllocateResourcesL \
-failed %d", allocateError );
- // show note only if operation was not cancelled by user
- if( allocateError != KErrCancel )
- {
- TRAP_IGNORE( iNoteHandler->ShowConnectionLostNoteL() );
- }
-
- delete iTask;
- iTask = NULL;
- iState = UpnpCommand::EStateIdle;
- User::Leave( allocateError );
- }
-
- // Update the state
- iState = UpnpCommand::EStateAllocated;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::ReleaseResources
-// Releases the Upnp Framework resources.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::ReleaseResources()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ReleaseResources" );
-
- // Destroy the task
- if( iTask )
- {
- delete iTask;
- iTask = NULL;
- }
-
- // Update the state
- iState = UpnpCommand::EStateIdle;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::ExecuteL
-// Executes the command.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::ExecuteL()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ExecuteL" );
-
- // Allocates Upnp Fw resources if not yet allocated
- if( !iTask )
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ExecuteL task deleted, leave" );
- User::Leave( KErrNotReady );
- }
-
- // Update the state
- iState = UpnpCommand::EStateExecuting;
-
- // Execute the task
- TInt status = KErrNone;
- TRAP( status, iTask->ExecuteL() );
-
- // Update the state
- iState = UpnpCommand::EStateAllocated;
-
- // If operation failed, leave
- if( status != KErrNone )
- {
- User::Leave( status );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::SetParameterL
-// Set a parameter.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::SetParameterL(
- UpnpCommand::TUpnpParameterType aParamType,
- const TDesC& aParamValue )
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::SetParameterL" );
- __ASSERTD( iParameters!=0, __FILE__, __LINE__ );
-
- iParameters->SetL( aParamType, aParamValue );
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::Parameter
-// --------------------------------------------------------------------------
-//
-const TDesC& CUpnpCommandImplementation::Parameter(
- UpnpCommand::TUpnpParameterType aParamType )
- {
- __ASSERTD( iParameters!=0, __FILE__, __LINE__ );
- return iParameters->Get( aParamType );
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::ResetParameters
-// Resets parameteres.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::ResetParameters()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ResetParameters" );
-
- // Reset parameters
- iParameters->Reset();
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::PushFileL
-// Pushes one file into the file pipe.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::PushFileL( const TDesC& aFilename )
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::PushFileL" );
-
- // Push it in the file pipe
- iFilePipe->PushL( aFilename );
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::CountFiles
-// --------------------------------------------------------------------------
-//
-TInt CUpnpCommandImplementation::FileCount()
- {
- return iFilePipe->Count();
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::File
-// Pops oldest file from the file pipe.
-// --------------------------------------------------------------------------
-//
-const TDesC& CUpnpCommandImplementation::File( TInt aIndex )
- {
- return iFilePipe->FileAt( aIndex );
- }
-
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::ResetFiles
-// Resets files.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::ResetFiles()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ResetFiles" );
-
- // Reset files
- iFilePipe->Reset();
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::State
-// Returns the state of the command.
-// --------------------------------------------------------------------------
-//
-UpnpCommand::TUpnpCommandState CUpnpCommandImplementation::State()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::State" );
-
- return iState;
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::DestroyTask
-// Destroys the ongoing task.
-// --------------------------------------------------------------------------
-//
-void CUpnpCommandImplementation::DestroyTask()
- {
- __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::DestroyTask" );
-
- // Release resources (delete the ongoing UpnpTask).
- ReleaseResources();
- }
-
-// --------------------------------------------------------------------------
-// CUpnpCommandImplementation::IsUpnpConfigured
-// --------------------------------------------------------------------------
-//
-TBool CUpnpCommandImplementation::IsUpnpConfiguredL()
- {
- TBool returnValue = EFalse;
- // Access the Upnp Fw central repository key
- CRepository* repository = NULL;
- TRAPD( error, repository = CRepository::NewL( KCRUidUPnPApplication ) );
-
- if ( error == KErrNone )
- {
- // Read the IAP setting
- TInt iapDefined = KErrNotFound;
- TInt getError = repository->Get( KUPnPAppAccessPointSetting,
- iapDefined );
-
- delete repository;
-
- // Define the return value (min. valid IAP Id value is 1,
- // 0=None selected)
- if( getError == KErrNone &&
- iapDefined > 0 )
- {
- returnValue = ETrue;
- }
- }
-
- return returnValue;
- }
-
-// End of File
+/*
+* 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 CUpnpCommandImplementation class.
+*
+*/
+
+
+// INCLUDE FILES
+// system
+#include <centralrepository.h>
+
+// upnpframework / avcontroller helper api
+#include "upnpfileutility.h" // IsFileProtectedL()
+
+// upnpframework / command api
+#include "upnpcommand.h" // CUpnpCommand
+#include "upnpcommandcallback.h" // MUpnpCommandCallback
+
+// command internal
+#include "upnpcommandimplementation.h"
+#include "upnpfilepipe.h"
+#include "upnpcommandparameters.h"
+#include "upnpnotehandler.h"
+#include "upnpshowtask.h"
+#include "upnpcopytask.h"
+#include "upnpmovetask.h"
+#include "upnpbrowsetask.h"
+#include "upnprunsetuptask.h"
+
+_LIT( KComponentLogfile, "upnpcommand.log");
+#include "upnplog.h"
+
+// CONSTANTS
+const TUid KCRUidUPnPApplication = {0x20009cae};
+const TUint32 KUPnPAppAccessPointSetting = 0x00000001;
+
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::NewL
+// Creates an instance of the implementation.
+// --------------------------------------------------------------------------
+//
+CUpnpCommandImplementation* CUpnpCommandImplementation::NewL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::NewL" );
+
+ CUpnpCommandImplementation* self = NULL;
+ self = new (ELeave) CUpnpCommandImplementation();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::CUpnpCommandImplementation
+// First phase construction.
+// --------------------------------------------------------------------------
+//
+CUpnpCommandImplementation::CUpnpCommandImplementation()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::Constructor" );
+
+ // Set command ID to unknown by default. Client is forced to set this
+ // (inline code in the NewL method of CUpnpCommand interface class).
+ iCommandId = UpnpCommand::ECommandUndefined;
+
+ // By default there is no task
+ iTask = NULL;
+
+ // By default the state is IDLE (resources not allocated nor executing)
+ iState = UpnpCommand::EStateIdle;
+
+ // DRM note will be shown only once
+ iDrmNoteShown = EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::ConstructL
+// Second phase construction.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::ConstructL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ConstructL" );
+
+ iFilePipe = CUpnpFilePipe::NewL();
+ iParameters = CUpnpCommandParameters::NewL();
+ iNoteHandler = CUpnpNoteHandler::NewL();
+ }
+
+// --------------------------------------------------------------------------
+// Destructor.
+// --------------------------------------------------------------------------
+//
+CUpnpCommandImplementation::~CUpnpCommandImplementation()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::Destructor" );
+
+ delete iTask;
+ iTask = NULL;
+ delete iFilePipe;
+ iFilePipe = NULL;
+ delete iParameters;
+ iParameters = NULL;
+ delete iNoteHandler;
+ iNoteHandler = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::SetCommandIdL
+// Sets the command ID.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::SetCommandIdL(
+ UpnpCommand::TUpnpCommandId aCommandId )
+ {
+ __LOG1( "[UpnpCommand]\t CUpnpCommandImplementation::SetCommandIdL %d",
+ TInt( aCommandId ) );
+
+ // command ID can only be set ONCE !
+ __ASSERTD( iCommandId == UpnpCommand::ECommandUndefined,
+ __FILE__, __LINE__ );
+ if( iCommandId != UpnpCommand::ECommandUndefined )
+ {
+ User::Leave( KErrServerBusy );
+ }
+
+ iCommandId = aCommandId;
+
+ // If the command is to Show images & video, re-create the file pipe.
+ // In this case we are using a file pipe of a limited size (1)
+ if( iCommandId == UpnpCommand::ECommandShow )
+ {
+ delete iFilePipe;
+ iFilePipe = NULL; // In case the following method leaves
+ iFilePipe = CUpnpFilePipe::NewL( 1 );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::SetObserver
+// Sets the callback interface
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::SetObserver(
+ MUpnpCommandCallback* aCallback )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::SetObserver" );
+
+ // Set the observer
+ iParameters->SetObserver( aCallback );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::IsAvailableL
+// Checks if a command is available for execution
+// --------------------------------------------------------------------------
+//
+TBool CUpnpCommandImplementation::IsAvailableL()
+ {
+ return IsAvailableL( iCommandId );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::IsAvailableL
+// Checks if a command is available for execution
+// --------------------------------------------------------------------------
+//
+TBool CUpnpCommandImplementation::IsAvailableL(
+ UpnpCommand::TUpnpCommandId aCommandId )
+ {
+ TBool available( EFalse );
+ switch( aCommandId )
+ {
+ case UpnpCommand::ECommandShow: // flow through
+ case UpnpCommand::ECommandCopy: // flow through
+ case UpnpCommand::ECommandMove: // flow through
+ case UpnpCommand::ECommandBrowse:
+ {
+ // available if upnp is configured
+ available = IsUpnpConfiguredL();
+ }
+ break;
+ case UpnpCommand::ECommandSetup:
+ {
+ // setup is always available
+ available = ETrue;
+ }
+ break;
+ default:
+ {
+ __PANIC( __FILE__, __LINE__ );
+ }
+ break;
+ }
+
+ return available;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::AllocateResourcesL
+// Allocates the Upnp Framework resources.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::AllocateResourcesL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::AllocateResourcesL" );
+
+ // Leave if a task is already going (resources allocated)
+ if( iTask )
+ {
+ User::Leave( KErrAlreadyExists );
+ }
+
+ // Instantiate a task according to the command ID
+ if( iCommandId == UpnpCommand::ECommandShow )
+ {
+ iTask = CUpnpShowTask::NewL();
+ }
+ else if( iCommandId == UpnpCommand::ECommandCopy )
+ {
+ iTask = CUpnpCopyTask::NewL();
+ }
+ else if( iCommandId == UpnpCommand::ECommandMove )
+ {
+ iTask = CUpnpMoveTask::NewL();
+ }
+ else if( iCommandId == UpnpCommand::ECommandBrowse )
+ {
+ iTask = CUpnpBrowseTask::NewL();
+ }
+ else if( iCommandId == UpnpCommand::ECommandSetup )
+ {
+ iTask = CUpnpRunSetupTask::NewL();
+ }
+ else
+ {
+ __PANICD( __FILE__, __LINE__ );
+ User::Leave( KErrNotSupported );
+ }
+
+ // Set the pointers for the task (using base class CUpnpTask methods)
+ iTask->SetTaskHandlerL( this );
+ iTask->SetCommandParametersL( iParameters );
+ iTask->SetFilePipeL( iFilePipe );
+ iTask->SetNoteHandlerL( iNoteHandler );
+
+ // Allocate the resources
+ TRAPD( allocateError, iTask->AllocateResourcesL() );
+
+ // If allocating resources failed, delete the task and forward the
+ // leave code.
+ if( allocateError != KErrNone )
+ {
+ __LOG1( "[UpnpCommand]\t AllocateResourcesL \
+failed %d", allocateError );
+ // show note only if operation was not cancelled by user
+ if( allocateError != KErrCancel )
+ {
+ TRAP_IGNORE( iNoteHandler->ShowConnectionLostNoteL() );
+ }
+
+ delete iTask;
+ iTask = NULL;
+ iState = UpnpCommand::EStateIdle;
+ User::Leave( allocateError );
+ }
+
+ // Update the state
+ iState = UpnpCommand::EStateAllocated;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::ReleaseResources
+// Releases the Upnp Framework resources.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::ReleaseResources()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ReleaseResources" );
+
+ // Destroy the task
+ if( iTask )
+ {
+ delete iTask;
+ iTask = NULL;
+ }
+
+ // Update the state
+ iState = UpnpCommand::EStateIdle;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::ExecuteL
+// Executes the command.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::ExecuteL()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ExecuteL" );
+
+ // Allocates Upnp Fw resources if not yet allocated
+ if( !iTask )
+ {
+ __LOG( "[UpnpCommand]\t ExecuteL task deleted, leave" );
+ User::Leave( KErrNotReady );
+ }
+
+ // Update the state
+ iState = UpnpCommand::EStateExecuting;
+
+ // Execute the task
+ TInt status = KErrNone;
+ TRAP( status, iTask->ExecuteL() );
+
+ // Update the state
+ iState = UpnpCommand::EStateAllocated;
+
+ // If operation failed, leave
+ if( status != KErrNone )
+ {
+ User::Leave( status );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::SetParameterL
+// Set a parameter.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::SetParameterL(
+ UpnpCommand::TUpnpParameterType aParamType,
+ const TDesC& aParamValue )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::SetParameterL" );
+ __ASSERTD( iParameters!=0, __FILE__, __LINE__ );
+
+ iParameters->SetL( aParamType, aParamValue );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::Parameter
+// --------------------------------------------------------------------------
+//
+const TDesC& CUpnpCommandImplementation::Parameter(
+ UpnpCommand::TUpnpParameterType aParamType )
+ {
+ __ASSERTD( iParameters!=0, __FILE__, __LINE__ );
+ return iParameters->Get( aParamType );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::ResetParameters
+// Resets parameteres.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::ResetParameters()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ResetParameters" );
+
+ // Reset parameters
+ iParameters->Reset();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::PushFileL
+// Pushes one file into the file pipe.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::PushFileL( const TDesC& aFilename )
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::PushFileL" );
+
+ // Push it in the file pipe
+ iFilePipe->PushL( aFilename );
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::CountFiles
+// --------------------------------------------------------------------------
+//
+TInt CUpnpCommandImplementation::FileCount()
+ {
+ return iFilePipe->Count();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::File
+// Pops oldest file from the file pipe.
+// --------------------------------------------------------------------------
+//
+const TDesC& CUpnpCommandImplementation::File( TInt aIndex )
+ {
+ return iFilePipe->FileAt( aIndex );
+ }
+
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::ResetFiles
+// Resets files.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::ResetFiles()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::ResetFiles" );
+
+ // Reset files
+ iFilePipe->Reset();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::State
+// Returns the state of the command.
+// --------------------------------------------------------------------------
+//
+UpnpCommand::TUpnpCommandState CUpnpCommandImplementation::State()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::State" );
+
+ return iState;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::DestroyTask
+// Destroys the ongoing task.
+// --------------------------------------------------------------------------
+//
+void CUpnpCommandImplementation::DestroyTask()
+ {
+ __LOG( "[UpnpCommand]\t CUpnpCommandImplementation::DestroyTask" );
+
+ // Release resources (delete the ongoing UpnpTask).
+ ReleaseResources();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpCommandImplementation::IsUpnpConfigured
+// --------------------------------------------------------------------------
+//
+TBool CUpnpCommandImplementation::IsUpnpConfiguredL()
+ {
+ TBool returnValue = EFalse;
+ // Access the Upnp Fw central repository key
+ CRepository* repository = NULL;
+ TRAPD( error, repository = CRepository::NewL( KCRUidUPnPApplication ) );
+
+ if ( error == KErrNone )
+ {
+ // Read the IAP setting
+ TInt iapDefined = KErrNotFound;
+ TInt getError = repository->Get( KUPnPAppAccessPointSetting,
+ iapDefined );
+
+ delete repository;
+
+ // Define the return value (min. valid IAP Id value is 1,
+ // 0=None selected)
+ if( getError == KErrNone &&
+ iapDefined > 0 )
+ {
+ returnValue = ETrue;
+ }
+ }
+
+ return returnValue;
+ }
+
+// End of File