upnpavcontroller/upnpavcontrollerserver/src/upnpfiletransfersessionbase.cpp
author Sampo Huttunen <sampo.huttunen@nokia.com>
Thu, 18 Nov 2010 15:46:57 +0200
branchIOP_Improvements
changeset 44 97caed2372ca
parent 38 5360b7ddc251
permissions -rw-r--r--
Fixed AVController, it was accidentally set to search only for renderers. Now also servers are added to device list. Also some minor changes in package definition xml and platform API xml definition files.

/*
* 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