bluetoothappprofiles/avrcp/remconbeareravrcp/src/bulkbearer.cpp
changeset 70 f5508c13dfe0
parent 67 16e4b9007960
child 71 083fd884d7dd
--- a/bluetoothappprofiles/avrcp/remconbeareravrcp/src/bulkbearer.cpp	Wed Oct 13 13:15:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,369 +0,0 @@
-// Copyright (c) 2008-2009 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:
-//
-
-
-
-/**
- @file
- @internalComponent
- @released
-*/
-
-#include <remconaddress.h>
-#include <remconbeareravrcp.h>
-#include <remcon/remconbearerbulkobserver.h>
-
-#include "avrcpbrowsingcommandhandler.h"
-#include "avrcprouter.h"
-#include "avrcputils.h"
-#include "browsecommand.h"
-#include "bulkbearer.h"
-#include "playerstatewatcher.h"
-
-#include "avrcplog.h"
-
-#ifdef _DEBUG
-PANICCATEGORY("avrcpbulk");
-#endif // _DEBUG
-
-CAvrcpBulkBearer* CAvrcpBulkBearer::NewL(RAvctp& aAvctp, CAvrcpPlayerInfoManager& aPlayerInfoManager)
-	{
-	LOG_STATIC_FUNC
-	CAvrcpBulkBearer* bulkBearer = new(ELeave) CAvrcpBulkBearer(aPlayerInfoManager, aAvctp);
-	return bulkBearer;
-	}
-
-CAvrcpBulkBearer::~CAvrcpBulkBearer()
-	{
-	LOG_FUNC
-	ASSERT_DEBUG(!iRouter); // Should already be stopped...
-	}
-
-CAvrcpBulkBearer::CAvrcpBulkBearer(CAvrcpPlayerInfoManager& aPlayerInfoManager, RAvctp& aAvctp)
-	: iPlayerInfoManager(aPlayerInfoManager)
-	, iAvctp(aAvctp)
-	, iReadyBrowseCommands(_FOFF(CAvrcpCommand, iReadyLink))
-	{
-	LOG_FUNC
-	}
-
-MIncomingCommandHandler* CAvrcpBulkBearer::IncomingHandler(const TBTDevAddr& aAddr)
-	{
-	LOG_FUNC
-	
-	MIncomingCommandHandler* handler = NULL;
-	TInt ix = iBrowseHandlers.Find(aAddr, CAvrcpBulkBearer::CompareBrowsingCommandHandlerByBDAddr);
-	if(ix >= 0)
-		{
-		handler = iBrowseHandlers[ix];
-		}
-
-	return handler;
-	}
-
-MOutgoingCommandHandler* CAvrcpBulkBearer::OutgoingHandler(const TBTDevAddr& /*aAddr*/)
-	{
-	LOG_FUNC
-	// We've received a response, but we haven't sent a command.  Naughty remote,
-	// just ignore it.
-	return NULL;
-	}
-
-void CAvrcpBulkBearer::DoConnectIndicateL(const TBTDevAddr& aBTDevice)
-	{
-	LOG_FUNC
-	ASSERT_BULK_THREAD;
-	
-	ASSERT_DEBUG(Operational());
-	
-	CRcpBrowsingCommandHandler* handler = CRcpBrowsingCommandHandler::NewL(*this, *iRouter, iPlayerInfoManager, aBTDevice);
-	CleanupStack::PushL(handler);
-	
-	iBrowseHandlers.AppendL(handler);
-	
-	CleanupStack::Pop(handler);
-	}
-	
-void CAvrcpBulkBearer::ConnectIndicate(const TBTDevAddr& aBTDevice)
-	{
-	LOG_FUNC
-	// If we failed to allocate a handler for this connection the router will
-	// not be able to find it when it checks, and will tell AVCTP that we're 
-	// not interested in this connection.
-	TRAP_IGNORE(DoConnectIndicateL(aBTDevice));
-	}
-
-void CAvrcpBulkBearer::ConnectConfirm(const TBTDevAddr& IF_FLOGGING(aBTDevice), TInt IF_FLOGGING(aError))
-	{
-	LOG_FUNC
-	LOGBTDEVADDR(aBTDevice);
-	LOG1(_L("\taError = %d"), aError);
-	
-	// Outlandish!  We did not ask for this!
-	__ASSERT_DEBUG(EFalse, AVRCP_PANIC(EAvrcpConnectConfirmOnBrowseChannel));
-	}
-
-void CAvrcpBulkBearer::DisconnectIndicate(const TBTDevAddr& aBTDevice)
-	{
-	LOG_FUNC
-	ASSERT_BULK_THREAD;
-	
-	CRcpBrowsingCommandHandler* handler = NULL;
-	TInt ix = iBrowseHandlers.Find(aBTDevice, CAvrcpBulkBearer::CompareBrowsingCommandHandlerByBDAddr);
-	if(ix >= 0)
-		{
-		handler = iBrowseHandlers[ix];
-		delete handler;
-		iBrowseHandlers.Remove(ix);
-		}
-	else
-		{
-		ASSERT_DEBUG(EFalse);
-		}
-	}
-
-void CAvrcpBulkBearer::DisconnectConfirm(const TBTDevAddr& IF_FLOGGING(aBTDevice), TInt IF_FLOGGING(aError))
-	{
-	LOG_FUNC
-	LOGBTDEVADDR(aBTDevice);
-	LOG1(_L("\taError = %d"), aError);
-	
-	// Also outlandish!  Connections on browse channel are all passive.
-	__ASSERT_DEBUG(EFalse, AVRCP_PANIC(EAvrcpDisconnectConfirmOnBrowseChannel));
-	}
-
-void CAvrcpBulkBearer::MrcciNewCommand(CAvrcpCommand& aCommand)
-	{
-	LOG_FUNC
-
-	DoNewCommand(aCommand, KNullClientId);
-	}
-
-// This overload is used when we want to address a stateless command that may
-// be interleaved with commands from other controllers.  The only command
-// this is currently used for is the internal UidCounterUpdate command.
-void CAvrcpBulkBearer::MrcciNewCommand(CAvrcpCommand& aCommand, const TRemConClientId& aClientId)
-	{
-	LOG_FUNC
-	// Verify that it's an internal command
-	__ASSERT_DEBUG(aCommand.RemoteAddress() == TBTDevAddr(0), AvrcpUtils::Panic(ESpecificAddressUsedForBrowsingCommand));
-		
-	DoNewCommand(aCommand, aClientId);
-	}
-
-void CAvrcpBulkBearer::DoNewCommand(CAvrcpCommand& aCommand, const TRemConClientId& aClientId)
-	{
-	LOG_FUNC
-
-	// Need to put the command on the queue straight
-	// away in case RemCon collects it synchronously
-	iReadyBrowseCommands.AddLast(aCommand);
-	aCommand.IncrementUsers();
-	
-	TRemConAddress remAddr;
-	AvrcpUtils::BTToRemConAddr(aCommand.RemoteAddress(), remAddr);
-	
-	TInt err = (aClientId == KNullClientId) ? iObserver->NewCommand(remAddr) : iObserver->NewCommand(remAddr, aClientId);
-		
-	if(err != KErrNone)
-		{
-		TUid interfaceUid;
-		TUint remconId, operationId;
-		RBuf8 commandData;
-		TBTDevAddr btAddr;
-		
-		// Calling GetCommandInfo transfers ownership of the command data.  
-		aCommand.GetCommandInfo(interfaceUid, remconId, operationId, commandData, btAddr);
-		MrcbbiSendReject(interfaceUid, operationId, remconId, remAddr);
-		commandData.Close();
-
-		// RemCon is not going to pick this command up
-		aCommand.iReadyLink.Deque();
-		aCommand.DecrementUsers();
-		}
-	}
-
-TUint CAvrcpBulkBearer::MrcciNewTransactionId()
-	{
-	LOG_FUNC
-	return iObserver->NewTransactionId();
-	}
-
-void CAvrcpBulkBearer::MrcciCommandExpired(TUint aTransactionId)
-    {
-    LOG_FUNC
-    iObserver->CommandExpired(aTransactionId);
-    }
-
-TInt CAvrcpBulkBearer::MrcbciSetAddressedClient(const TRemConAddress& aAddr, const TRemConClientId& aClient)
-	{
-	LOG_FUNC
-	return iObserver->SetAddressedClient(aAddr, aClient);
-	}
-
-void CAvrcpBulkBearer::MrcbciRemoveAddressing(const TRemConAddress& aAddr)
-	{
-	LOG_FUNC
-	iObserver->RemoveAddressing(aAddr);
-	}
-
-TInt CAvrcpBulkBearer::MrcbbiGetCommand(TUid& aInterfaceUid, 
-	TUint& aTransactionId, 
-	TUint& aOperationId, 
-	RBuf8& aData, 
-	TRemConAddress& aAddr)
-	{
-	LOG_FUNC
-	TInt result = KErrNotFound;
-	
-	if(!iReadyBrowseCommands.IsEmpty())
-		{
-		CAvrcpCommand* command = iReadyBrowseCommands.First();
-
-		// Calling GetCommandInfo transfers the command data to RemCon.  This means
-		// once we have called it we are committed to returning KErrNone.
-		TBTDevAddr btAddr;
-		command->GetCommandInfo(aInterfaceUid, aTransactionId, aOperationId, aData, btAddr);
-		AvrcpUtils::BTToRemConAddr(btAddr, aAddr);
-		
-		// Remove command from queue first because calling
-		// DecrementUsers() may delete command
-		command->iReadyLink.Deque();
-		command->DecrementUsers();
-		result = KErrNone;
-		}
-	else
-		{
-		__DEBUGGER();
-		}
-	
-	return result;
-	}
-
-TInt CAvrcpBulkBearer::MrcbbiSendResponse(TUid aInterfaceUid, 
-	TUint /*aOperationId*/, 
-	TUint aTransactionId, 
-	RBuf8& aData, 
-	const TRemConAddress& aAddr)
-	{
-	LOG_FUNC
-	TBTDevAddr btAddr;
-	TInt err = KErrNone;
-	
-	err = AvrcpUtils::RemConToBTAddr(aAddr, btAddr);
-	__ASSERT_DEBUG(err == KErrNone, AvrcpUtils::Panic(EInvalidBtAddrInResponse));
-	
-	if(btAddr != TBTDevAddr(0))
-		{
-		MIncomingCommandHandler* handler = IncomingHandler(btAddr);
-		__ASSERT_ALWAYS(handler, AVRCP_PANIC(EAvrcpNotConnected));
-
-		err = handler->SendRemConResponse(aInterfaceUid, aTransactionId, aData);
-		}
-	else
-		{
-		err = iInternalHandler->SendRemConResponse(aInterfaceUid, aTransactionId, aData);
-		}
-		
-	return err;
-	}
-
-void CAvrcpBulkBearer::MrcbbiSendReject(TUid aInterfaceUid, 
-	TUint /*aOperationId*/, 
-	TUint aTransactionId, 
-	const TRemConAddress& aAddr)
-	{
-	LOG_FUNC
-	
-	TBTDevAddr btAddr;
-	TInt err = AvrcpUtils::RemConToBTAddr(aAddr, btAddr);
-	__ASSERT_DEBUG(err == KErrNone, AvrcpUtils::Panic(EInvalidBtAddrInResponse));
-
-	if(btAddr != TBTDevAddr(0))
-		{
-		IncomingHandler(btAddr)->SendReject(aInterfaceUid, aTransactionId);
-		}
-	else
-		{
-		iInternalHandler->SendReject(aInterfaceUid, aTransactionId);
-		}
-	}
-
-TInt CAvrcpBulkBearer::MrcbbiStartBulk(MRemConBearerBulkObserver& aObserver)
-	{
-	LOG_FUNC
-	iObserver = &aObserver;
-	TRAPD(err, DoStartBulkL());
-	if(err != KErrNone)
-		{
-		MrcbbiStopBulk();
-		}
-	return err;
-	}
-
-void CAvrcpBulkBearer::DoStartBulkL()
-	{
-	LOG_FUNC
-	LEAVEIFERRORL(Dll::SetTls(reinterpret_cast<TAny*>(EBulkThread)));
-	iInternalHandler = iPlayerInfoManager.BulkStartedL(*this);
-	iRouter = CBulkRouter::NewL(iAvctp, *this);
-	}
-
-void CAvrcpBulkBearer::MrcbbiStopBulk()
-	{
-	LOG_FUNC
-	WEAK_ASSERT_BULK_THREAD;
-	
-	iPlayerInfoManager.BulkStopped();
-	iInternalHandler = NULL;
-	
-	delete iRouter;
-	iRouter = NULL;
-	
-	iBrowseHandlers.ResetAndDestroy();
-	
-	iObserver = NULL; // the observer is no longer valid.
-	
-	Dll::FreeTls();
-	}
-
-TBool CAvrcpBulkBearer::Operational() const
-	{
-	LOG_FUNC
-	ASSERT_DEBUG(!iRouter == !iObserver); // internal consistency check
-	return !!iRouter;
-	}
-
-void CAvrcpBulkBearer::MrcbbiBulkClientAvailable(const TRemConClientId& aId)
-	{
-	LOG_FUNC
-	iPlayerInfoManager.BulkClientAvailable(aId);
-	}
-
-void CAvrcpBulkBearer::MrcbbiBulkClientNotAvailable(const TRemConClientId& aId)
-	{
-	LOG_FUNC
-	iPlayerInfoManager.BulkClientNotAvailable(aId);
-	}
-
-
-TBool CAvrcpBulkBearer::CompareBrowsingCommandHandlerByBDAddr(const TBTDevAddr* aKey, const CRcpBrowsingCommandHandler& aHandler)
-	{
-	LOG_STATIC_FUNC
-	return aKey && aHandler.BtAddr() == *aKey;
-	}
-
-
-