upnpavcontroller/upnpavcontrollerserver/src/upnpfiletransfersessionbase.cpp
author samhuttu
Mon, 01 Nov 2010 12:37:49 +0200
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 32 3785f754ee62
permissions -rw-r--r--
New development branch with e.g. rendering state machine and a simple Qt example application using it.

/*
* 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:      server impl. of session against media server
*
*/






// INTERNAL INCLUDES
#include "upnpfiletransfersessionbase.h"
#include "upnpavdeviceextended.h"
#include "upnpavcontrollerserver.h"
#include "upnpdevicerepository.h"
#include "upnpfiletransferitem.h"

_LIT( KComponentLogfile, "upnpavcontrollerserver.txt");
#include "upnplog.h"

// ======== MEMBER FUNCTIONS ========

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::CUPnPFileTransferSessionBase
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
CUPnPFileTransferSessionBase::CUPnPFileTransferSessionBase(
    CUpnpAVControllerServer& aServer, TInt aSessionId ) :
    iServer( aServer ),
    iSessionId( aSessionId )
    {
    __LOG( "CUPnPFileTransferSessionBase::CUPnPFileTransferSessionBase" );
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::~CUPnPFileTransferSessionBase
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
CUPnPFileTransferSessionBase::~CUPnPFileTransferSessionBase()
    {
    __LOG( "CUPnPFileTransferSessionBase::~CUPnPFileTransferSessionBase" );
    
    delete iDevice;
    iTransferItems.Close();
    iEventQueu.Close();
    if( iEventMsg )
        {
        iEventMsg->Complete( KErrCancel );
        delete iEventMsg;
        }
    
    __LOG( "CUPnPFileTransferSessionBase::~CUPnPFileTransferSessionBase \
- end" );    
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::ConstructL
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
void CUPnPFileTransferSessionBase::ConstructL( const TDesC8& aUuid )
    {
    __LOG( "CUPnPFileTransferSessionBase::ConstructL" );
    
    const RPointerArray<CUpnpAVDeviceExtended>& devList =
        iServer.DeviceRepository().DeviceList();
    TInt count = devList.Count();
    TInt i;
    for( i = 0; i < count; i++ )
        {
        if( devList[ i ]->Uuid() == aUuid )
            {
            iDevice = CUpnpAVDeviceExtended::NewL( *devList[ i ] );
            }             
        }
    if( !iDevice )
        {
        User::Leave( KErrNotFound );
        }        
    }
    
// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::SessionId
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
TInt CUPnPFileTransferSessionBase::SessionId() const
    {
    __LOG( "CUPnPFileTransferSessionBase::SessionId" );
    
    return iSessionId;
    }
    
// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::Uuid
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
const TDesC8& CUPnPFileTransferSessionBase::Uuid() const
    {
    __LOG( "CUPnPFileTransferSessionBase::Uuid" );
    
    return iDevice->Uuid();
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::CheckIfKeyExists
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
TBool CUPnPFileTransferSessionBase::CheckIfKeyExists( TInt aKey )
    {
    __LOG( "CUPnPFileTransferSessionBase::CheckIfKeyExists" );
    
    TBool retVal = EFalse;
    TInt count = iTransferItems.Count();
    for( TInt i = 0; i < count; i++ )
        {
        if( iTransferItems[ i ].iKey == aKey )
            {
            retVal = ETrue;
            i = count;
            }
        }
    return retVal;    
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::CheckIfKeyExists
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
TBool CUPnPFileTransferSessionBase::CheckIfKeyExists( TInt aKey,
    TInt& aIndex )
    {
    __LOG( "CUPnPFileTransferSessionBase::CheckIfKeyExists" );
    
    TBool retVal = EFalse;
    TInt count = iTransferItems.Count();
    for( aIndex = 0; aIndex < count; aIndex++ )
        {
        if( iTransferItems[ aIndex ].iKey == aKey )
            {
            retVal = ETrue;
            break;
            }
        }
    return retVal;    
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::FindItemByKey
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
TInt CUPnPFileTransferSessionBase::FindItemByKey( TUpnpFileTransferEvent&
    aItem, TInt aKey )
    {
    __LOG( "CUPnPFileTransferSessionBase::FindItemByKey" );
    
    TBool retVal = KErrNotFound;
    TInt count = iTransferItems.Count();
    for( TInt i = 0; i < count; i++ )
        {
        if( iTransferItems[ i ].iKey == aKey )
            {
            aItem = iTransferItems[ i ];
            retVal = KErrNone;
            i = count;
            }
        }
    return retVal;        
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::FindItemByKey
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
TInt CUPnPFileTransferSessionBase::FindItemByKey( TUpnpFileTransferEvent&
    aItem, TInt aKey, TInt& aIndex )
    {
    __LOG( "CUPnPFileTransferSessionBase::FindItemByKey" );
    
    TBool retVal = KErrNotFound;
    TInt count = iTransferItems.Count();
    for( aIndex = 0; aIndex < count; aIndex++ )
        {
        if( iTransferItems[ aIndex ].iKey == aKey )
            {
            aItem = iTransferItems[ aIndex ];
            retVal = KErrNone;
            break;
            }
        }
    return retVal;
    }

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::ReadTransferItemFromMessageL
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
void CUPnPFileTransferSessionBase::ReadTransferItemFromMessageL(
    const RMessage2& aMessage, TInt aSlot, CUpnpFileTransferItem* aItem ) 
    {
    __LOG( "CUPnPFileTransferSessionBase::ReadTransferItemFromMessageL" );
    
    // create buffer
    TInt len = aMessage.GetDesMaxLength( aSlot );
    HBufC8* buf = HBufC8::NewLC( len );
    TPtr8 ptr( buf->Des() );
    User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
    
    // read stream
    RDesReadStream stream( *buf );
    CleanupClosePushL( stream );
    
    // internalize object
    stream >> *aItem;
    
    // clean up
    CleanupStack::PopAndDestroy( &stream );
    CleanupStack::PopAndDestroy( buf );
    }    

// --------------------------------------------------------------------------
// CUPnPFileTransferSessionBase::Complete
// See upnpdownloadsession.h
// --------------------------------------------------------------------------
void CUPnPFileTransferSessionBase::Complete(
    const TUpnpFileTransferEvent& aEvent )
    {
    __LOG( "CUPnPFileTransferSessionBase::Complete" );          
    
    if( iEventMsg )
        {
        __LOG( "Complete" );
        __LOG1( "iEvent = %d", aEvent.iEvent );
        __LOG1( "iKey = %d", aEvent.iKey );
        __LOG1( "iStatus = %d", aEvent.iStatus );        
        TPckg<TUpnpFileTransferEvent> resp1( aEvent );
        iEventMsg->Write( 1, resp1  ); // Write response using slot 1
        iEventMsg->Complete( KErrNone );
        delete iEventMsg; iEventMsg = NULL;
        }
    else
        {
        __LOG( "Complete - Add to queu" );
        __LOG1( "iEvent = %d", aEvent.iEvent );
        __LOG1( "iKey = %d", aEvent.iKey );
        __LOG1( "iStatus = %d", aEvent.iStatus );        
        iEventQueu.Append( aEvent );
        }
    }
    
// End of file