diff -r 000000000000 -r 7f85d04be362 upnpavcontroller/upnpavcontrollerserver/src/upnpavcontrollerimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpavcontroller/upnpavcontrollerserver/src/upnpavcontrollerimpl.cpp Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,2144 @@ +/* +* Copyright (c) 2006 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: AVController server side root class +* +*/ + + + + + + +// INCLUDE FILES +// upnp stack api +#include +#include +#include +#include +#include +#include +#include + +// upnpframework / avcontroller api +#include "upnpavdeviceobserver.h" +#include "upnpavdevicelist.h" + +// avcontroller internal +#include "upnpavcontrollerimpl.h" +#include "upnpavcontrollerserver.h" +#include "upnpavdispatcher.h" +#include "upnpavdeviceextended.h" +#include "upnpdevicerepository.h" +#include "upnpaverrorhandler.h" +#include "upnpplaybacksession.h" +#include "upnpbrowsingsession.h" +#include "upnpdevicediscoverymessage.h" + +#include "upnpuploadsession.h" +#include "upnpdownloadsession.h" + + + +#include "upnpsecaccesscontroller.h" + +_LIT( KComponentLogfile, "upnpavcontrollerserver.txt"); +#include "upnplog.h" + +// ======== MEMBER FUNCTIONS ======== + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::NewL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +CUPnPAVControllerImpl* CUPnPAVControllerImpl::NewL( + RUpnpMediaServerClient& aClient, + CUpnpAVControllerServer& aServer ) + { + CUPnPAVControllerImpl* self = new (ELeave) CUPnPAVControllerImpl( + aClient, aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CUPnPAVControllerImpl +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +CUPnPAVControllerImpl::CUPnPAVControllerImpl( + RUpnpMediaServerClient& aClient, + CUpnpAVControllerServer& aServer ) : + iMediaServer( aClient ), + iServer( aServer ), + iDeviceDiscoveryEnabled( EFalse), + iDeviceMsgQue( CUpnpDeviceDiscoveryMessage::LinkOffset() ), + iDeviceMsgQueIter( iDeviceMsgQue ) + { + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::~CUPnPAVControllerImpl +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +CUPnPAVControllerImpl::~CUPnPAVControllerImpl() + { + __LOG( "CUPnPAVControllerImpl::~CUPnPAVControllerImpl" ); + + delete iDeviceRespBuf; + delete iDeviceListRespBuf; + + iPlaybackSessions.ResetAndDestroy(); + iBrowsingSessions.ResetAndDestroy(); + + iUploadSessions.ResetAndDestroy(); + iDownloadSessions.ResetAndDestroy(); + + CUpnpDeviceDiscoveryMessage* devMsg = NULL; + iDeviceMsgQueIter.SetToFirst(); + while ( ( devMsg = iDeviceMsgQueIter++ ) != NULL ) + { + iDeviceMsgQue.Remove( *devMsg ); + delete devMsg; + }; + + delete iConnectionMsg; iConnectionMsg = NULL; + delete iDeviceDiscoveryMsg; iDeviceDiscoveryMsg = NULL; + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::ConstructL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::ConstructL() + { + __LOG( "CUPnPAVControllerImpl::ConstructL" ); + + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::ConnectionLost +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::ConnectionLost() + { + if( iConnectionMsg ) + { + iConnectionMsg->Complete( EAVControllerConnectionLost ); + delete iConnectionMsg; iConnectionMsg = NULL; + + } + else + { + // No msg, no can do + } + + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DeviceDiscoveredL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DeviceDiscoveredL( + CUpnpAVDeviceExtended& aDevice ) + { + __LOG( "CUPnPAVControllerImpl::DeviceDiscoveredL" ); + + if( aDevice.DeviceType() == CUpnpAVDevice::EMediaServer && + ( aDevice.Local() ) ) + { + TInt i; + TInt count = iPlaybackSessions.Count(); + for( i = 0; i < count; i++ ) + { + iPlaybackSessions[ i ]->SetLocalMSUuidL( aDevice.Uuid() ); + } + + count = iBrowsingSessions.Count(); + for( i = 0; i < count; i++ ) + { + iBrowsingSessions[ i ]->SetLocalMSUuidL( aDevice.Uuid() ); + } + + } + else if( iDeviceDiscoveryEnabled ) + { + CUpnpAVDevice* tempDev = CUpnpAVDevice::NewL( aDevice ); + + if( iDeviceDiscoveryMsg ) + { + CleanupStack::PushL( tempDev ); + + delete iDeviceRespBuf; iDeviceRespBuf = NULL; + iDeviceRespBuf = tempDev->ToDes8L(); + + CleanupStack::PopAndDestroy( tempDev ); + + // Write back to the client that a device was discovered + // of the device and the size + TPckg resp0( EAVDeviceDiscovered ); + TPckg resp1( iDeviceRespBuf->Length() ); + + iDeviceDiscoveryMsg->WriteL( 0, resp0 ); + iDeviceDiscoveryMsg->WriteL( 1, resp1 ); + + iDeviceDiscoveryMsg->Complete( EAVControllerDeviceCompleted ); + delete iDeviceDiscoveryMsg; iDeviceDiscoveryMsg = NULL; + } + else + { + // Msg not valid, client is still processing.. + //add the discovered device to queue + CUpnpDeviceDiscoveryMessage* tmpDevMsg = + CUpnpDeviceDiscoveryMessage::NewL( + tempDev, EAVDeviceDiscovered ); + iDeviceMsgQue.AddLast( *tmpDevMsg ); + } + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DeviceDisappearedL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DeviceDisappearedL( + CUpnpAVDeviceExtended& aDevice ) + { + __LOG( "CUPnPAVControllerImpl::DeviceDisappearedL" ); + + // Go through browsing and rendering sessions and report if their + // device or the local MS disappeared + TBool localMs = EFalse; + if( aDevice.DeviceType() == CUpnpAVDevice::EMediaServer && + ( aDevice.Local() ) ) + { + __LOG( "CUPnPAVControllerImpl::DeviceDisappearedL\ + - Local MS disappeared!" ); + + // Local MS disappeared + localMs = ETrue; + } + + TInt i; + TInt count = iPlaybackSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( ( iPlaybackSessions[ i ]->Uuid() == aDevice.Uuid() ) || + ( localMs ) ) + { + iPlaybackSessions[ i ]->DeviceDisappearedL( aDevice ); + } + } + + count = iBrowsingSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( ( iBrowsingSessions[ i ]->Uuid() == aDevice.Uuid() ) || + ( localMs ) ) + { + iBrowsingSessions[ i ]->DeviceDisappearedL( aDevice ); + } + } + + count = iUploadSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->Uuid() == aDevice.Uuid() ) + { + iUploadSessions[ i ]->DeviceDisappearedL( aDevice ); + } + } + + count = iDownloadSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->Uuid() == aDevice.Uuid() ) + { + iDownloadSessions[ i ]->DeviceDisappearedL( aDevice ); + } + } + + if( iDeviceDiscoveryEnabled ) + { + // Create a device (buffer) + CUpnpAVDevice* tempDev = CUpnpAVDevice::NewL( aDevice ); + + if( iDeviceDiscoveryMsg ) + { + CleanupStack::PushL( tempDev ); + + delete iDeviceRespBuf; iDeviceRespBuf = NULL; + iDeviceRespBuf = tempDev->ToDes8L(); + CleanupStack::PopAndDestroy( tempDev ); + + // Write back to the client that a device was discovered + // and the size of the device + TPckg resp0( + EAVDeviceDisappeared ); + TPckg resp1( iDeviceRespBuf->Length() ); + + iDeviceDiscoveryMsg->WriteL( 0, resp0 ); + iDeviceDiscoveryMsg->WriteL( 1, resp1 ); + + iDeviceDiscoveryMsg->Complete( EAVControllerDeviceCompleted ); + delete iDeviceDiscoveryMsg; iDeviceDiscoveryMsg = NULL; + } + else + { + // Msg not valid, client is still processing.. + //add the disappeared device to queue + + CUpnpDeviceDiscoveryMessage* tmpDevMsg = + CUpnpDeviceDiscoveryMessage::NewL( + tempDev, EAVDeviceDisappeared ); + iDeviceMsgQue.AddLast( *tmpDevMsg ); + } + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::EnableDeviceDiscoveryL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::EnableDeviceDiscoveryL( + const RMessage2& aMessage ) + { + __LOG( "CUPnPAVControllerImpl::EnableDeviceDiscoveryL" ); + + __ASSERTD( !iDeviceDiscoveryMsg, __FILE__, __LINE__ ); + + if( !iDeviceDiscoveryEnabled ) + { + //iDispatcher.RegisterForDeviceDiscoveryL( *this ); + iDeviceDiscoveryEnabled = ETrue; + } + + iDeviceDiscoveryMsg = new (ELeave) RMessage2( aMessage ); + + // Check queu's + if( !iDeviceMsgQue.IsEmpty() ) + { + CUpnpDeviceDiscoveryMessage* devMsg = iDeviceMsgQue.First(); + __ASSERTD( devMsg, __FILE__, __LINE__ ); + CUpnpAVDevice* dev = devMsg->Device(); + TAVControllerDeviceDiscovery devMsgType = devMsg->MsgType(); + DequeDeviceL( *dev, devMsgType ); + iDeviceMsgQue.Remove( *devMsg ); + delete devMsg; + } + else + { + // Empty else + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DequeDeviceL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DequeDeviceL( const CUpnpAVDevice& aDevice, + TAVControllerDeviceDiscovery aType ) + { + __LOG( "CUPnPAVControllerImpl::DequeDeviceL" ); + + TPckg resp0( aType ); + iDeviceDiscoveryMsg->WriteL( 0, resp0 ); + + HBufC8* tmp = aDevice.ToDes8L(); + CleanupStack::PushL( tmp ); + + TPckg resp1( tmp->Length() ); + iDeviceDiscoveryMsg->WriteL( 1, resp1 ); + + CleanupStack::Pop( tmp ); + + delete iDeviceRespBuf; iDeviceRespBuf = NULL; + iDeviceRespBuf = tmp; + + iDeviceDiscoveryMsg->Complete( EAVControllerDeviceCompleted ); + delete iDeviceDiscoveryMsg; iDeviceDiscoveryMsg = NULL; + + + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetDeviceL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetDeviceL( const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::GetDeviceL, 0x%d", iDeviceRespBuf ); + + aMessage.WriteL( 0, *iDeviceRespBuf ); + aMessage.Complete( KErrNone ); + delete iDeviceRespBuf; iDeviceRespBuf = NULL; + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DisableDeviceDiscoveryL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DisableDeviceDiscoveryL( + /*const RMessage2& aMessage*/ ) + { + __LOG( "CUPnPAVControllerImpl::DisableDeviceDiscoveryL" ); + + if( iDeviceDiscoveryEnabled ) + { + //iDispatcher.UnRegisterDeviceDiscovery( *this ); + iDeviceDiscoveryEnabled = EFalse; + } + + if( iDeviceDiscoveryMsg ) + { + iDeviceDiscoveryMsg->Complete( KErrCancel ); + delete iDeviceDiscoveryMsg; iDeviceDiscoveryMsg = NULL; + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetDeviceListSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetDeviceListSizeL( const RMessage2& aMessage ) + { + __LOG( "CUPnPAVControllerImpl::GetDeviceListSizeL" ); + + // Get the device list from the av control point, create a response buffer + // and write the size of the list back to the client + TAVControllerDeviceListType deviceListType; + TPckg resp0( deviceListType ); + aMessage.ReadL( 0, resp0 ); + + delete iDeviceListRespBuf; iDeviceListRespBuf = NULL; + + const RPointerArray& devList = + iServer.DeviceRepository().DeviceList(); + + if( deviceListType == EAVMediaServer ) + { + CUpnpAVDeviceList* tempList = CUpnpAVDeviceList::NewLC(); + + TInt count = devList.Count(); + for( TInt i = 0; i < count; i++ ) + { + if( devList[ i ]->DeviceType() == CUpnpAVDevice::EMediaServer ) + { + if( devList[ i ]->PInfoReceived() && + !devList[ i ]->Local() ) + { + CUpnpAVDevice* tempDev = CUpnpAVDevice::NewL( + *devList[i] ); + // Ownership of tempDev transferred + tempList->AppendDeviceL( *tempDev ); + } + } + } + iDeviceListRespBuf = tempList->ToDes8L(); + CleanupStack::PopAndDestroy( tempList ); + } + else + { + CUpnpAVDeviceList* tempList = CUpnpAVDeviceList::NewLC(); + + TInt count = devList.Count(); + for( TInt i = 0; i < count; i++ ) + { + if( devList[ i ]->DeviceType() == CUpnpAVDevice::EMediaRenderer ) + { + if( devList[ i ]->PInfoReceived() ) + { + CUpnpAVDevice* tempDev = CUpnpAVDevice::NewL( + *devList[i] ); + // Ownership of tempDev transferred + tempList->AppendDeviceL( *tempDev ); + } + } + } + iDeviceListRespBuf = tempList->ToDes8L(); + CleanupStack::PopAndDestroy( tempList ); + } + + // Write the size back to the client + TPckg resp1( iDeviceListRespBuf->Length() ); + aMessage.WriteL( 1, resp1 ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetDeviceListL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetDeviceListL( const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::GetDeviceListL, 0x%d", + iDeviceListRespBuf ); + + // Write the device list back to the client + aMessage.WriteL( 0, *iDeviceListRespBuf ); + aMessage.Complete( KErrNone ); + delete iDeviceListRespBuf; iDeviceListRespBuf = NULL; + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CreateRenderingSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CreateRenderingSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::CreateRenderingSessionL, 0x%d", + aMessage.Int0() ); + + // Create a rendering session + TInt id = aMessage.Int0(); + + // Read the device UID + TInt len = aMessage.GetDesMaxLength( 1 ); + HBufC8* buf = HBufC8::NewLC( len ); + TPtr8 ptr( buf->Des() ); + User::LeaveIfError( aMessage.Read( 1, ptr ) ); + + CUPnPPlaybackSession* tempPtr = CUPnPPlaybackSession::NewL( + iMediaServer, iServer, id, *buf ); + + CleanupStack::PopAndDestroy( buf ); + iPlaybackSessions.Append( tempPtr ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DestroyRenderingSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DestroyRenderingSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::DestroyRenderingSessionL, 0x%d", + aMessage.Int0() ); + + // Find and delete a rendering session + TInt id = aMessage.Int0(); + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + delete iPlaybackSessions[ i ]; + iPlaybackSessions.Remove( i ); + found = ETrue; + i = count; + } + } + if( found ) + { + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::EventRequestL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::EventRequestL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->EventRequestL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelEventRequestL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelEventRequestL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelEventRequestL(); + found = ETrue; + i = count; + } + } + if( found ) + { + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::SetURIL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::SetURIL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->SetURIL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelSetURIL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelSetURIL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelSetURIL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::SetNextURIL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::SetNextURIL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->SetNextURIL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelSetNextURIL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelSetNextURIL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelSetNextURIL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::PlayL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::PlayL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->PlayL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelPlayL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelPlayL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelPlayL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::StopL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::StopL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->StopL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelStopL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelStopL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelStopL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::PauseL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::PauseL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->PauseL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelPauseL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelPauseL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelPauseL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::SetVolumeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::SetVolumeL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->SetVolumeL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelSetVolumeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelSetVolumeL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelSetVolumeL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetVolumeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetVolumeL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->GetVolumeL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetVolumeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetVolumeL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelGetVolumeL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::SetMuteL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::SetMuteL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->SetMuteL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelSetMuteL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelSetMuteL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelSetMuteL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetMuteL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetMuteL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->GetMuteL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetMuteL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetMuteL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelGetMuteL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetPositionInfoL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetPositionInfoL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->GetPositionInfoL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetPositionInfoL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetPositionInfoL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iPlaybackSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelGetPositionInfoL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CreateBrowsingSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CreateBrowsingSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::CreateBrowsingSessionL, 0x%d", + aMessage.Int0() ); + + // Create a rendering session + TInt id = aMessage.Int0(); + + // Read the device UID + TInt len = aMessage.GetDesMaxLength( 1 ); + HBufC8* buf = HBufC8::NewLC( len ); + TPtr8 ptr( buf->Des() ); + User::LeaveIfError( aMessage.Read( 1, ptr ) ); + + CUPnPBrowsingSession* tempPtr = CUPnPBrowsingSession::NewL( + iMediaServer, iServer, id, *buf ); + + CleanupStack::PopAndDestroy( buf ); + iBrowsingSessions.Append( tempPtr ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DestroyBrowsingSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DestroyBrowsingSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::DestroyBrowsingSessionL, 0x%d", + aMessage.Int0() ); + + // Find and delete a rendering session + TInt id = aMessage.Int0(); + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + delete iBrowsingSessions[ i ]; + iBrowsingSessions.Remove( i ); + found = ETrue; + i = count; + } + } + if( found ) + { + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetBrowseResponseSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetBrowseResponseSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetBrowseResponseSizeL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetBrowseResponseSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetBrowseResponseSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelGetBrowseResponseSizeL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetBrowseResponseL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetBrowseResponseL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetBrowseResponseL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetSearchResponseSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetSearchResponseSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetSearchResponseSizeL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetSearchResponseSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetSearchResponseSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelGetSearchResponseSizeL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetSearchResponseL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetSearchResponseL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetSearchResponseL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetSearchCapabitiesSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetSearchCapabitiesSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetSearchCapabitiesSizeL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelGetSearchCapabitiesSizeL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelGetSearchCapabitiesSizeL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelGetSearchCapabitiesSizeL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::GetSearchCapabitiesL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::GetSearchCapabitiesL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->GetSearchCapabitiesL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CreateContainerL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CreateContainerL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CreateContainerL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelCreateContainerL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelCreateContainerL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelCreateContainerL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DeleteObjectL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DeleteObjectL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->DeleteObjectL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelDeleteObjectL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelDeleteObjectL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelDeleteObjectL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DeviceDisappearedRequestL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DeviceDisappearedRequestL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + TInt i; + for( i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->DeviceDisappearedRequestL( aMessage ); + found = ETrue; + i = count; + } + } + + if( !found ) + { + count = iPlaybackSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->DeviceDisappearedRequestL( + aMessage ); + found = ETrue; + i = count; + } + } + } + + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelDeviceDisappearedRequestL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelDeviceDisappearedRequestL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iBrowsingSessions.Count(); + TBool found = EFalse; + TInt i; + for( i = 0; i < count; i++ ) + { + if( iBrowsingSessions[ i ]->SessionId() == id ) + { + iBrowsingSessions[ i ]->CancelDeviceDisappearedRequestL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + if( !found ) + { + count = iPlaybackSessions.Count(); + for( i = 0; i < count; i++ ) + { + if( iPlaybackSessions[ i ]->SessionId() == id ) + { + iPlaybackSessions[ i ]->CancelDeviceDisappearedRequestL(); + found = ETrue; + i = count; + aMessage.Complete( KErrNone ); + } + } + } + + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::MonitorConnectionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::MonitorConnectionL( const RMessage2& aMessage ) + { + + if( iConnectionMsg ) + { + User::Leave( KErrInUse ); + } + else + { + iConnectionMsg = new (ELeave) RMessage2( aMessage ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CancelMonitorConnectionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CancelMonitorConnectionL( + const RMessage2& aMessage ) + { + + if( iConnectionMsg ) + { + iConnectionMsg->Complete( KErrCancel ); + delete iConnectionMsg; iConnectionMsg = NULL; + } + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::CreateDownloadSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CreateDownloadSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::CreateDownloadSessionL, 0x%d", + aMessage.Int0() ); + + // Create a downloading session + TInt id = aMessage.Int0(); + + // Read the device UID + TInt len = aMessage.GetDesMaxLength( 1 ); + HBufC8* buf = HBufC8::NewLC( len ); + TPtr8 ptr( buf->Des() ); + User::LeaveIfError( aMessage.Read( 1, ptr ) ); + + CUPnPDownloadSession* tempPtr = CUPnPDownloadSession::NewL( + iServer, id, *buf ); + CleanupStack::PopAndDestroy( buf ); + iDownloadSessions.Append( tempPtr ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DestroyDownloadSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DestroyDownloadSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::DestroyDownloadSessionL, 0x%d", + aMessage.Int0() ); + + // Find and delete a downloading session + TInt id = aMessage.Int0(); + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + delete iDownloadSessions[ i ]; + iDownloadSessions.Remove( i ); + found = ETrue; + i = count; + } + } + if( found ) + { + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StartDownloadL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->StartDownloadL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StartDownloadFHL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->StartDownloadFHL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelDownloadL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->CancelDownloadL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelAllDownloadsL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->CancelAllDownloadsL( aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StartTrackingDownloadProgressL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->StartTrackingDownloadProgressL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StopTrackingDownloadProgressL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->StopTrackingDownloadProgressL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::GetDownloadEventL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->GetDownloadEventL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelGetDownloadEventL( + const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iDownloadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iDownloadSessions[ i ]->SessionId() == id ) + { + iDownloadSessions[ i ]->CancelGetDownloadEventL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DestroyUploadSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::CreateUploadSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::CreateUploadSessionL, 0x%d", + aMessage.Int0() ); + + // Create a downloading session + TInt id = aMessage.Int0(); + + // Read the device UID + TInt len = aMessage.GetDesMaxLength( 1 ); + HBufC8* buf = HBufC8::NewLC( len ); + TPtr8 ptr( buf->Des() ); + User::LeaveIfError( aMessage.Read( 1, ptr ) ); + + CUPnPUploadSession* tempPtr = CUPnPUploadSession::NewL( + iServer, id, *buf ); + CleanupStack::PopAndDestroy( buf ); + iUploadSessions.Append( tempPtr ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CUPnPAVControllerImpl::DestroyUploadSessionL +// See upnpavcontrollerimpl.h +// -------------------------------------------------------------------------- +void CUPnPAVControllerImpl::DestroyUploadSessionL( + const RMessage2& aMessage ) + { + __LOG1( "CUPnPAVControllerImpl::DestroyUploadSessionL, 0x%d", + aMessage.Int0() ); + + // Find and delete an uploading session + TInt id = aMessage.Int0(); + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + delete iUploadSessions[ i ]; + iUploadSessions.Remove( i ); + found = ETrue; + i = count; + } + } + if( found ) + { + aMessage.Complete( KErrNone ); + } + else + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StartUploadL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->StartUploadL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelUploadL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->CancelUploadL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelAllUploadsL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->CancelAllUploadsL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StartTrackingUploadProgressL( const RMessage2& + aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->StartTrackingUploadProgressL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::StopTrackingUploadProgressL( const RMessage2& + aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->StopTrackingUploadProgressL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::GetUploadEventL( const RMessage2& aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->GetUploadEventL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +void CUPnPAVControllerImpl::CancelGetUploadEventL( const RMessage2& + aMessage ) + { + TInt id = aMessage.Int0(); + + // Find the session + TInt count = iUploadSessions.Count(); + TBool found = EFalse; + for( TInt i = 0; i < count; i++ ) + { + if( iUploadSessions[ i ]->SessionId() == id ) + { + iUploadSessions[ i ]->CancelGetUploadEventL( + aMessage ); + found = ETrue; + i = count; + } + } + if( !found ) + { + aMessage.Complete( KErrNotFound ); + } + } + +// end of file