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) 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: dispatches control point events to AVController clients
*
*/
// INCLUDE FILES
#include "upnpavdispatcher.h"
#include "upnpavactioninfo.h"
#include "upnpavcontrolpointobserver.h"
#include "upnpavcontrollerserver.h"
_LIT( KComponentLogfile, "CUPnPAVDispatcher.txt");
#include "upnplog.h"
// ============================ MEMBER FUNCTIONS ============================
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::CUPnPAVDispatcher
// C++ default constructor can NOT contain any code, that
// might leave.
// --------------------------------------------------------------------------
//
CUPnPAVDispatcher::CUPnPAVDispatcher( CUpnpAVControllerServer& aServer ) :
iServer( aServer )
{
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::ConstructL
// Symbian 2nd phase constructor can leave.
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::ConstructL()
{
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::NewL
// Two-phased constructor.
// --------------------------------------------------------------------------
//
CUPnPAVDispatcher* CUPnPAVDispatcher::NewL( CUpnpAVControllerServer& aServer )
{
CUPnPAVDispatcher* self = NewLC( aServer);
CleanupStack::Pop( self );
return self;
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::NewLC
// Two-phased constructor.
// --------------------------------------------------------------------------
//
CUPnPAVDispatcher* CUPnPAVDispatcher::NewLC(
CUpnpAVControllerServer& aServer )
{
CUPnPAVDispatcher* self = new( ELeave )
CUPnPAVDispatcher( aServer );
CleanupStack::PushL( self );
self->ConstructL();
return self;
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::~CUPnPAVDispatcher
// --------------------------------------------------------------------------
//
CUPnPAVDispatcher::~CUPnPAVDispatcher()
{
iActionInfos.ResetAndDestroy();
iActionInfosEvent.ResetAndDestroy();
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::ActionResponseL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::ActionResponseL(CUpnpAction* aAction )
{
__LOG( "CUPnPAVDispatcher::ActionResponseL" );
MUpnpAVControlPointObserver& obs = FindObserver( aAction->SessionId() );
if( &obs )
{
obs.ActionResponseL( aAction );
}
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::StateUpdatedL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::StateUpdatedL(CUpnpService* aService)
{
__LOG( "CUPnPAVDispatcher::StateUpdatedL" );
// Forward to each observer
TInt tempCount = iActionInfosEvent.Count();
//We may have multiple sessions to the same device and
//they are all interested about state changes
for( TInt i = 0; i < tempCount; i++ )
{
if( aService->Device().Uuid() == iActionInfosEvent[i]->Uuid() )
{
iActionInfosEvent[i]->Observer().StateUpdatedL(aService);
}
}
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::HttpResponseL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::HttpResponseL( CUpnpHttpMessage* /*aMessage*/ )
{
//NO IMPLEMENTATION NEEDED
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::DeviceDiscoveredL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::DeviceDiscoveredL( CUpnpDevice* aDevice )
{
__ASSERT( aDevice, __FILE__, __LINE__ )
iServer.DeviceDiscoveredL( *aDevice );
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::DeviceDisappearedL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::DeviceDisappearedL( CUpnpDevice* aDevice )
{
__ASSERT( aDevice, __FILE__, __LINE__ );
iServer.DeviceDisappearedL( *aDevice );
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::RegisterL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::RegisterL( TInt aSessionId,
MUpnpAVControlPointObserver& aObserver )
{
__LOG1( "CUPnPAVDispatcher::RegisterL session: %d", aSessionId );
CUPnPAVActionInfo* tempInfo = CUPnPAVActionInfo::NewLC();
tempInfo->SetSessionId( aSessionId );
tempInfo->SetObserver( aObserver );
CleanupStack::Pop( tempInfo );
iActionInfos.AppendL( tempInfo );
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::UnRegister
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::UnRegister( TInt aSessionId
/*, const TDesC8& aUuid*/ )
{
__LOG1( "CUPnPAVDispatcher::UnRegister session: %d", aSessionId );
TInt tempCount = iActionInfos.Count();
for( TInt i = 0; i < tempCount; i++ )
{
if( iActionInfos[ i ]->SessionId() == aSessionId )
{
delete iActionInfos[ i ];
iActionInfos.Remove( i );
i = tempCount;
}
}
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::FindObserver
// --------------------------------------------------------------------------
//
MUpnpAVControlPointObserver& CUPnPAVDispatcher::FindObserver(
TInt aSessionId )
{
MUpnpAVControlPointObserver* tempObserver = NULL;
TInt tempCount = iActionInfos.Count();
for( TInt i = 0; i < tempCount; i++ )
{
if( iActionInfos[ i ]->SessionId() == aSessionId )
{
tempObserver = &( iActionInfos[ i ]->Observer() );
i = tempCount;
}
}
return *tempObserver;
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::RegisterForEventsL
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::RegisterForEventsL(
MUpnpAVControlPointObserver& aObserver, const TDesC8& aUuid )
{
__LOG( "CUPnPAVDispatcher::RegisterForEventsL" );
TInt tempCount = iActionInfosEvent.Count();
for( TInt i = 0; i < tempCount; i++ )
{
if( &aObserver == &iActionInfosEvent[ i ]->Observer() )
{
// Must not let to register twice!
__PANIC( __FILE__, __LINE__ );
}
}
CUPnPAVActionInfo* tempInfo = CUPnPAVActionInfo::NewLC();
tempInfo->SetObserver( aObserver );
tempInfo->SetUuidL( aUuid );
CleanupStack::Pop( tempInfo );
iActionInfosEvent.AppendL( tempInfo );
}
// --------------------------------------------------------------------------
// CUPnPAVDispatcher::UnRegisterEvents
// --------------------------------------------------------------------------
//
void CUPnPAVDispatcher::UnRegisterEvents(
MUpnpAVControlPointObserver& aObserver )
{
__LOG( "CUPnPAVDispatcher::UnRegisterEvents" );
TInt tempCount = iActionInfosEvent.Count();
for( TInt i = 0; i < tempCount; i++ )
{
if( &aObserver == &iActionInfosEvent[ i ]->Observer() )
{
delete iActionInfosEvent[ i ];
iActionInfosEvent.Remove( i );
i = tempCount;
}
}
}
// End of File