diff -r 000000000000 -r bde4ae8d615e os/mm/devsound/devsoundrefplugin/src/server/Policy/MmfAudioPolicyServer.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/os/mm/devsound/devsoundrefplugin/src/server/Policy/MmfAudioPolicyServer.cpp	Fri Jun 15 03:10:57 2012 +0200
@@ -0,0 +1,155 @@
+// Copyright (c) 2000-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 <e32math.h>
+#include "MmfAudioPolicyServer.h"
+#include "MmfAudioPolicyStart.h"
+#include "MmfAudioPolicySession.h"
+
+
+#if defined(_DEBUG) && defined(__WINS__)
+	const TInt KTimeOutInterval =2*1000000;  // 2 seconds
+#else
+	const TInt KTimeOutInterval =1000000;	// 1 second
+#endif
+
+CMMFAudioPolicyServer* CMMFAudioPolicyServer::NewL()
+	{
+	CMMFAudioPolicyServer* s = new(ELeave) CMMFAudioPolicyServer();
+	CleanupStack::PushL(s);
+	s->ConstructL();
+	CleanupStack::Pop();
+	return s;
+	}
+
+CMMFAudioPolicyServer::CMMFAudioPolicyServer() :
+	CMmfIpcServer(EPriorityStandard)
+	{
+	}
+
+void CMMFAudioPolicyServer::ConstructL()
+	{
+	// Create AudioPolicy singleton
+	iAudioPolicy = CAudioPolicy::NewL(this);
+	TCallBack callBack(SendNotification,this);
+	iNotificationTimer = CNotificationTimer::NewL(callBack);
+	// Call base class to Start server
+	StartL(KNullDesC);
+	}
+
+CMMFAudioPolicyServer::~CMMFAudioPolicyServer()
+	{
+	if(iNotificationTimer != NULL)
+		{
+		StopNotificationTimer();
+		}
+	delete iAudioPolicy;
+	delete iNotificationTimer;
+	}
+
+CMmfIpcSession* CMMFAudioPolicyServer::NewSessionL(const TVersion& aVersion) const
+	{
+	TVersion v(KMMFAudioPolicyVersion,KMMFAudioPolicyMinorVersionNumber,KMMFAudioPolicyBuildVersionNumber);
+	if(!User::QueryVersionSupported(v, aVersion))
+		User::Leave(KErrNotSupported);
+	
+	CMMFAudioPolicySession* aAudioPolicySession = CMMFAudioPolicySession::NewL();
+	return aAudioPolicySession;
+	}
+
+void CMMFAudioPolicyServer::IncrementSessionId()
+	{
+	iPolicySessionId++;
+	}
+
+void CMMFAudioPolicyServer::SendEventToClient(TInt aSessionToAlert, const TMMFAudioPolicyEvent& aEvent)
+	{
+// For the session requested, send event to client
+	iSessionIter.SetToFirst();
+	CMMFAudioPolicySession* session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
+	ASSERT(session != NULL);
+	do
+		{
+		if (session->PolicySessionId() == aSessionToAlert)
+			{
+			session->SendEventToClient(aEvent);
+			return;  // Finished
+			}
+		session = static_cast<CMMFAudioPolicySession*>(iSessionIter++);
+		} while (session != NULL);
+	ASSERT(EFalse); // invalid session Id
+	}
+	
+void CMMFAudioPolicyServer::LaunchRequest(TInt aSessionId,const TMMFAudioPolicyEvent& aEvent)
+	{
+	SendEventToClient(aSessionId, aEvent);
+	}
+
+void CMMFAudioPolicyServer::IncrementSessionCount()
+	{
+	iPolicySessionCount++;
+	}
+
+CMMFAudioPolicyServer::CNotificationTimer *CMMFAudioPolicyServer::CNotificationTimer::NewL(TCallBack aCallBack)	
+	{
+	CNotificationTimer* self = new(ELeave) CNotificationTimer(aCallBack);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+CMMFAudioPolicyServer::CNotificationTimer::CNotificationTimer(TCallBack aCallBack)
+: CTimer(EPriorityHigh),iCallBack(aCallBack)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CMMFAudioPolicyServer::CNotificationTimer::RunL()
+	{
+	iCallBack.CallBack();
+	}
+
+void CMMFAudioPolicyServer::DecrementSessionCount()
+	{
+	iPolicySessionCount--;
+	}
+
+TInt CMMFAudioPolicyServer::PolicySessionCount() 
+	{
+	return iPolicySessionCount;
+	}
+
+void CMMFAudioPolicyServer::StartNotificationTimer(TBool aZeroDelay)
+	{
+	iNotificationTimer->After(aZeroDelay? 0 : KTimeOutInterval);
+	}
+	
+void CMMFAudioPolicyServer::StopNotificationTimer()
+	{
+	iNotificationTimer->Cancel();			
+	}
+
+TInt CMMFAudioPolicyServer::SendNotification(TAny* aAny)
+	{
+	CMMFAudioPolicyServer* policyServer = reinterpret_cast<CMMFAudioPolicyServer*>(aAny);
+	policyServer->iAudioPolicy->NotifyNextClient();
+	return KErrNone;
+	}
+
+TBool CMMFAudioPolicyServer::IsTimerActive() const 
+	{
+	return iNotificationTimer->IsActive();
+	}