--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmresourcemgmt/mmresctrl/src/mmrcserver/mmrcserverinfo.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,913 @@
+// Copyright (c) 2007-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:
+//
+
+#include "mmrcserverinfo.h"
+#include "mmrcserversession.h"
+#include "mmrcservercontroller.h"
+#include "mlogicalchain.h"
+#include "mmrcutil.h"
+#include <a3f/a3f_trace_utils.h>
+
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+/**
+ * By default Symbian 2nd phase constructor is private.
+ * @param CMMRCServerController& A reference on the MMRC Server controller
+ */
+CMMRCServerInfo::CMMRCServerInfo(CMMRCServerController& aServerController)
+: iMMRCServerController( aServerController)
+ {
+ TRACE_CREATE();
+ DP_CONTEXT(----> CMMRCServerInfo::CMMRCServerInfo *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ DP_OUT();
+ }
+
+
+/**
+ * destructor
+ */
+CMMRCServerInfo::~CMMRCServerInfo()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::~CMMRCServerInfo *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ iMMRCAllocatedResourceContextsQueue.ResetAndDestroy();
+ iMMRCContextsQueue.ResetAndDestroy();
+ iMMRCAPRContextsQueue.ResetAndDestroy();
+ iMMRCPausedContextsQueue.ResetAndDestroy();
+
+ DP_OUT();
+ }
+
+/**
+ * Constructs, and returns a pointer to, a new CMMRCServerInfo object.
+ * Leaves on failure.
+ * @param CMMRCServerController& A reference on the MMRC Server controller
+ * @return CMMRCServerInfo* A pointer to newly created utlitly object.
+ */
+CMMRCServerInfo* CMMRCServerInfo::NewL(CMMRCServerController& aServerController)
+ {
+ DP_STATIC_CONTEXT(----> CMMRCServerInfo::NewL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerInfo* self = NewLC(aServerController);
+ CleanupStack::Pop(self);
+
+ DP0_RET(self, "self = 0x%x");
+ }
+
+/**
+ * Constructs, leaves object on the cleanup stack, and returns a pointer
+ * to, a new CMMRCServerInfo object.
+ * Leaves on failure.
+ * @param CMMRCServerController& A reference on the MMRC Server controller
+ * @return CMMRCServerInfo* A pointer to newly created utlitly object.
+ */
+CMMRCServerInfo* CMMRCServerInfo::NewLC(CMMRCServerController& aServerController)
+ {
+ DP_STATIC_CONTEXT(----> CMMRCServerInfo::NewLC *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerInfo* self=new(ELeave) CMMRCServerInfo(aServerController);
+ CleanupStack::PushL(self);
+ self->ConstructL( );
+
+ DP0_RET(self, "self = 0x%x");
+ }
+
+/**
+ CMMRCServerInfo::ConstructL
+ Symbian 2nd phase constructor can leave.
+ */
+void CMMRCServerInfo::ConstructL()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::ConstructL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ DP_OUT();
+ }
+
+/**
+ * Change the state of the server
+ * @param TMMRCServerState aNewState
+ */
+void CMMRCServerInfo::SwitchServerState(TMMRCServerState aNewState, TUint64 aContextId)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::SwitchServerState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ iMMRCServerInfoState = aNewState;
+ iLastTransactionContextId = aContextId;
+
+ DP_OUT();
+ }
+
+/**
+ * return the current server state
+ * @return TMMRCServerState& aServerState
+ */
+void CMMRCServerInfo::ServerState(TMMRCServerState& aServerState, TUint64& aContextId) const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::ServerState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ aContextId = iLastTransactionContextId;
+ aServerState = iMMRCServerInfoState;
+
+ DP_OUT();
+ }
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+
+/**
+ * Push an Context on the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @param CMMRCServerSession& aServerSession
+ * @leave in case of memory error
+ */
+void CMMRCServerInfo::PushContextL(RMMRCContextsQueueTD& aContextsQueue, const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushContextL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ aContextsQueue.PushL(&aServerSession);
+
+ DP_OUT();
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstContext(RMMRCContextsQueueTD& aContextsQueue)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = 0;
+ //PopAndRemove return null if the queue is empty;
+ serverSession = aContextsQueue.PopAndRemove();
+
+ DP0_RET(serverSession, "serverSession = 0x%x");
+ }
+
+/**
+ * Pop and remove the first Context from the Context queue in parameter by contextId
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstContextByContextId(RMMRCContextsQueueTD& aContextsQueue, const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstContextByContextId *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = NULL;
+
+ TInt nbContexts = aContextsQueue.Count();
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ serverSession = aContextsQueue[i];
+
+ TAudioContextId contextId = serverSession->ContextId();
+ if( aContextId == contextId )
+ {
+ aContextsQueue.PopAndRemove(i);
+ break;
+ }
+ else
+ {
+ serverSession = NULL;
+ }
+ }
+
+ DP0_RET(serverSession, "serverSession = 0x%x");
+ }
+
+
+/**
+ * Pop and remove the first Context of the highest priority from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveContextFirstHighestPriority(RMMRCContextsQueueTD& aContextsQueue)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveContextFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ TInt nbContexts = aContextsQueue.Count();
+ if( 0 == nbContexts )
+ {
+ return NULL;
+ }
+
+ TInt highestPriority = 0;
+ TInt sessionIdx = 0;
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ const CMMRCServerSession* srvSession = aContextsQueue[i];
+ // LogicalChainLastCommited or LogicalChainRequested is not null necesseraly
+ const MLogicalChain* logicalChain = srvSession->LogicalChainRequested();
+ if(!logicalChain)
+ {
+ logicalChain = srvSession->LogicalChainLastCommited();
+ }
+ if(!logicalChain)
+ {
+ return NULL;
+ }
+// AM Getting the priority
+ TInt currentChainPriority = (const_cast<MLogicalChain*>(logicalChain))->Priority();
+ if( currentChainPriority > highestPriority )
+ {
+ highestPriority = currentChainPriority;
+ sessionIdx = i;
+ }
+
+
+// JIn edited as these settings have been removed
+/* TAudioTypeSettings audioTypeSettings = (logicalChain->ChainConfiguration()).iAudioTypeSettings;
+ if( audioTypeSettings.iPriority > highestPriority )
+ {
+ highestPriority = audioTypeSettings.iPriority;
+ sessionIdx = i;
+ }
+*/
+
+// AM
+ // highestPriority = 5;
+ // sessionIdx = i;
+
+//EOJin
+ }
+ CMMRCServerSession* serverSession = aContextsQueue.PopAndRemove(sessionIdx);
+
+ DP0_RET(serverSession, "serverSession=0x%x");
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority and more than aPriority
+ * from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @param TInt aPriority
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveContextFirstHighestPriority(RMMRCContextsQueueTD& aContextsQueue, TInt /*aPriority*/ )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveContextFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = NULL;
+ TInt nbContexts = aContextsQueue.Count();
+ if( 0 == nbContexts )
+ {
+ return NULL;
+ }
+
+ TInt highestPriority = 0;
+ TInt sessionIdx = 0;
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ const CMMRCServerSession* srvSession = aContextsQueue[i];
+ // LogicalChainLastCommited or LogicalChainRequested is not null necesseraly
+ const MLogicalChain* logicalChain = srvSession->LogicalChainRequested();
+ if(!logicalChain)
+ {
+ return NULL;
+ }
+
+// AM Getting the priority
+ TInt currentChainPriority = (const_cast<MLogicalChain*>(logicalChain))->Priority();
+ if( currentChainPriority > highestPriority )
+ {
+ highestPriority = currentChainPriority;
+ sessionIdx = i;
+ }
+
+
+
+// EOJin
+ }
+
+ if( sessionIdx < nbContexts )
+ {
+ serverSession = aContextsQueue.PopAndRemove(sessionIdx);
+ }
+
+DP0_RET(serverSession, "serverSession=0x%x");
+ }
+
+/**
+ * Pop the first Context from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopFirstContext(const RMMRCContextsQueueTD& aContextsQueue) const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopFirstContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = 0;
+ //PopAndRemove return null if the queue is empty;
+ serverSession = aContextsQueue.Pop();
+
+ DP0_RET(serverSession, "serverSession=0x%x");
+ }
+
+/**
+ * Pop the first Context of the highest priority from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopContextFirstHighestPriority(const RMMRCContextsQueueTD& aContextsQueue) const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopContextFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ TInt nbContexts = aContextsQueue.Count();
+ if( 0 == nbContexts )
+ {
+ return NULL;
+ }
+
+ TInt highestPriority = 0;
+ TInt sessionIdx = 0;
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ const CMMRCServerSession* srvSession = aContextsQueue[i];
+ // LogicalChainLastCommited or LogicalChainRequested is not null necesseraly
+ const MLogicalChain* logicalChain = srvSession->LogicalChainRequested();
+ if(!logicalChain)
+ {
+ logicalChain = srvSession->LogicalChainLastCommited();
+ }
+ if(!logicalChain)
+ {
+ return NULL;
+ }
+
+// Jin edited to remove dependency on missing element
+/*
+ TAudioTypeSettings audioTypeSettings = (logicalChain->ChainConfiguration()).iAudioTypeSettings;
+ if( audioTypeSettings.iPriority > highestPriority )
+ {
+ highestPriority = audioTypeSettings.iPriority;
+ sessionIdx = i;
+ }
+*/
+// AM
+/* highestPriority = 5;
+ sessionIdx = i;
+
+*/
+// AM Getting the priority
+ TInt currentChainPriority = (const_cast<MLogicalChain*>(logicalChain))->Priority();
+ if( currentChainPriority > highestPriority )
+ {
+ highestPriority = currentChainPriority;
+ sessionIdx = i;
+ }
+
+// EOJIn
+ }
+ CMMRCServerSession* serverSession = aContextsQueue.Pop(sessionIdx);
+
+ DP0_RET(serverSession, "serverSession=0x%x");
+ }
+
+/**
+ * Pop the first Context of the highest priority and more than aPriority
+ * from the Context queue in parameter
+ * @param RMMRCContextsQueueTD& aContextsQueue
+ * @param TInt aPriority
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopContextFirstHighestPriority(const RMMRCContextsQueueTD& aContextsQueue, TInt /*aPriority*/ ) const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopContextFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ TInt nbContexts = aContextsQueue.Count();
+ if( 0 == nbContexts )
+ {
+ return NULL;
+ }
+
+ TInt highestPriority = 0;
+ TInt sessionIdx = 0;
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ const CMMRCServerSession* srvSession = aContextsQueue[i];
+ // LogicalChainLastCommited or LogicalChainRequested is not null necesseraly
+ const MLogicalChain* logicalChain = srvSession->LogicalChainRequested();
+ if(!logicalChain)
+ {
+ logicalChain = srvSession->LogicalChainLastCommited();
+ }
+ if(!logicalChain)
+ {
+ return NULL;
+ }
+
+// JIn edited to remove dependency
+/*
+ TAudioTypeSettings audioTypeSettings = (logicalChain->ChainConfiguration()).iAudioTypeSettings;
+ if( audioTypeSettings.iPriority > aPriority && audioTypeSettings.iPriority > highestPriority )
+ {
+ highestPriority = audioTypeSettings.iPriority;
+ sessionIdx = i;
+ }
+*/
+
+// AM New way to access
+// highestPriority = 5;
+// sessionIdx = i;
+
+// AM Getting the priority
+ TInt currentChainPriority = (const_cast<MLogicalChain*>(logicalChain))->Priority();
+ if( currentChainPriority > highestPriority )
+ {
+ highestPriority = currentChainPriority;
+ sessionIdx = i;
+ }
+// EOJIn
+ }
+
+ CMMRCServerSession* serverSession = NULL;
+ if( sessionIdx < nbContexts )
+ {
+ serverSession = aContextsQueue.Pop(sessionIdx);
+ }
+
+ DP0_RET(serverSession, "serverSession=0x%x");
+ }
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+
+/**
+ * Push an Context on the Context queue
+ * @param CMMRCServerSession& aServerSession
+ * @leave in case of memory error
+ */
+void CMMRCServerInfo::PushRequestL(const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushRequestL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ PushContextL(iMMRCContextsQueue, aServerSession);
+
+ DP_OUT();
+ }
+
+/**
+ * Pop and remove the first Context from the Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstRequest()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstRequest *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContext(iMMRCContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop and remove the first Context from the Context queue by contextId
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstRequestByContextId(const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstRequestByContextId *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContextByContextId(iMMRCContextsQueue, aContextId);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+
+/**
+ * Pop and remove the first Context of the highest priority from the Context queue
+ * @param TInt aPriority
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveRequestFirstHighestPriority()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveRequestFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveContextFirstHighestPriority(iMMRCContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority and more than aPriority
+ * from the Context queue
+ * @param TInt aPriority
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveRequestFirstHighestPriority( TInt aPriority )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveRequestFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveContextFirstHighestPriority(iMMRCContextsQueue, aPriority);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop the first Context from the Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopFirstRequest() const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopFirstRequest *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopFirstContext(iMMRCContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop the first Context of the highest priority from the Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopRequestFirstHighestPriority() const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopRequestFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopContextFirstHighestPriority(iMMRCContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop the first Context of the highest priority and more than aPriority
+ * from the Context queue
+ * @param TInt aPriority
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopRequestFirstHighestPriority(TInt aPriority ) const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopRequestFirstHighestPriority *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopContextFirstHighestPriority(iMMRCContextsQueue, aPriority);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+
+/**
+ * Push an Context on the in-process Context queue
+ * @param CMMRCServerSession& aServerSession
+ * @leave in case of memory error
+ */
+void CMMRCServerInfo::PushAllocatedResourceContextL(const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushAllocatedResourceContextL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ PushContextL(iMMRCAllocatedResourceContextsQueue, aServerSession);
+
+ DP_OUT();
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority from the in-process Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstAllocatedResourceContext()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstAllocatedResourceContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContext(iMMRCAllocatedResourceContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop and remove the first Context from the in-process Context queue by contextId
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstAllocatedResourceContextByContextId(const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstAllocatedResourceContextByContextId *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContextByContextId(iMMRCAllocatedResourceContextsQueue, aContextId);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+ * Pop the first Context from the in-process Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopFirstAllocatedResourceContext() const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopFirstAllocatedResourceContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopFirstContext(iMMRCAllocatedResourceContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+
+/**
+ * Push an Context on the in-process Context queue
+ * @param CMMRCServerSession& aServerSession
+ * @leave in case of memory error
+ */
+void CMMRCServerInfo::PushPausedContextL(const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushPausedContextL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ PushContextInOrderL(iMMRCPausedContextsQueue, aServerSession);
+
+ DP_OUT();
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority from the in-process Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstPausedContext()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstPausedContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContextForPause(iMMRCPausedContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+/**
+ * Pop and remove the first Context from the in-process Context queue by contextId
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemovePausedContext(const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemovePausedContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveContextIdForPause(iMMRCPausedContextsQueue, aContextId);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+/**
+ * Pop the Context from the in-process Context queue
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PausedContextByIndex(TInt aIndex)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PausedContextByIndex *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PausedContextByIndexForPause(iMMRCPausedContextsQueue, aIndex);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+
+//------------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------------
+
+/**
+ * Push an Context on the in-process Context queue
+ * @param CMMRCServerSession& aServerSession
+ * @leave in case of memory error
+ */
+void CMMRCServerInfo::PushAPRContextL(const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushAPRContextL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ PushContextL(iMMRCAPRContextsQueue, aServerSession);
+
+ DP_OUT();
+ }
+
+/**
+ * Pop and remove the first Context of the highest priority from the in-process Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstAPRContext()
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstAPRContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContext(iMMRCAPRContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+/**
+ * Pop and remove the first Context from the in-process Context queue by contextId
+ * @param const TAudioContextId& aContextId
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstAPRContextByContextId(const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstAPRContextByContextId *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopAndRemoveFirstContextByContextId(iMMRCAPRContextsQueue, aContextId);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+/**
+ * Pop the first Context from the in-process Context queue
+ * @return CMMRCServerSession* the session of the Context
+ */
+CMMRCServerSession* CMMRCServerInfo::PopFirstAPRContext() const
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopFirstAPRContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* mmrcSession = PopFirstContext(iMMRCAPRContextsQueue);
+
+ DP0_RET(mmrcSession, "mmrcSession = 0x%x");
+ }
+
+/**
+
+ */
+TBool CMMRCServerInfo::IsOnAPRList(TAudioContextId aId)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::IsOnAPRList *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ TBool iIsContain = EFalse;
+ CMMRCServerSession* serverSession = NULL;
+
+ TInt nbContexts = iMMRCAPRContextsQueue.Count();
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ serverSession = iMMRCAPRContextsQueue[i];
+
+ TAudioContextId contextId = serverSession->ContextId();
+ if( aId == contextId )
+ {
+ iIsContain = ETrue;
+ break;
+ }
+ }
+
+ DP0_RET(iIsContain, "%d");
+ }
+
+/**
+
+ */
+void CMMRCServerInfo::PushContextInOrderL(RMMRCContextsQueueOrderTD& aContextsQueue, const CMMRCServerSession& aServerSession )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PushContextInOrderL *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ aContextsQueue.PushL(&aServerSession);
+
+ DP_OUT();
+ }
+
+
+/**
+
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveFirstContextForPause(RMMRCContextsQueueOrderTD& aContextsQueue)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveFirstContextForPause *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = 0;
+ //PopAndRemove return null if the queue is empty;
+ serverSession = aContextsQueue.PopAndRemoveForPause(0);
+
+ DP0_RET(serverSession, "serverSession = 0x%x");
+ }
+
+/**
+
+ */
+CMMRCServerSession* CMMRCServerInfo::PopAndRemoveContextIdForPause(RMMRCContextsQueueOrderTD& aContextsQueue, const TAudioContextId& aContextId )
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PopAndRemoveContextIdForPause *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = NULL;
+
+ TInt nbContexts = aContextsQueue.Count();
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ serverSession = aContextsQueue[i];
+
+ TAudioContextId contextId = serverSession->ContextId();
+ if( aContextId == contextId )
+ {
+ aContextsQueue.PopAndRemoveForPause(i);
+ break;
+ }
+ else
+ {
+ serverSession = NULL;
+ }
+ }
+
+ DP0_RET(serverSession, "serverSession = 0x%x");
+ }
+
+
+/**
+
+ */
+CMMRCServerSession* CMMRCServerInfo::PausedContextByIndexForPause(RMMRCContextsQueueOrderTD& aContextsQueue, TInt aIndex)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::PausedContextByIndexForPause *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ CMMRCServerSession* serverSession = 0;
+ //PopAndRemove return null if the queue is empty;
+ serverSession = aContextsQueue[aIndex];
+
+ DP0_RET(serverSession, "serverSession = 0x%x");
+ }
+
+
+
+/**
+
+ */
+TBool CMMRCServerInfo::IsOnPauseList(TAudioContextId aId)
+ {
+ DP_CONTEXT(----> CMMRCServerInfo::IsOnAPRList *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ TBool iIsContain = EFalse;
+ CMMRCServerSession* serverSession = NULL;
+
+ TInt nbContexts = iMMRCPausedContextsQueue.Count();
+ for( TInt i = 0 ; i < nbContexts ; i++ )
+ {
+ serverSession = iMMRCPausedContextsQueue[i];
+
+ TAudioContextId contextId = serverSession->ContextId();
+ if( aId == contextId )
+ {
+ iIsContain = ETrue;
+ break;
+ }
+ }
+
+ DP0_RET(iIsContain, "%d");
+ }
+
+
+
+
+TInt CMMRCServerInfo::RequestsCount()
+ { return iMMRCContextsQueue.Count(); }
+TInt CMMRCServerInfo::AllocatedResourceContextsCount()
+ { return iMMRCAllocatedResourceContextsQueue.Count(); }
+TInt CMMRCServerInfo::AllocatedAPRContextsCount()
+ { return iMMRCAPRContextsQueue.Count(); }
+TInt CMMRCServerInfo::AllocatedPausedContextsCount()
+ { return iMMRCPausedContextsQueue.Count(); }
+
+//EOF