upnpframework/upnpcommand/src/upnpcommandimplementation.cpp
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 0 7f85d04be362
--- 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