multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/CMCETestUIEngineMultimediaObserver.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/CMCETestUIEngineMultimediaObserver.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,885 @@
+/*
+* Copyright (c) 2005 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:    Implementation.
+*
+*/
+
+
+
+
+#include <mcedefs.h>
+#include "CMCETestUIEngineMultimediaObserver.h"
+#include "TMCETestUIEngineCmdAcceptSession.h"
+#include "CMCETestUIEngineSession.h"
+#include "CMCETestUIEngineInSession.h"
+#include "CMCETestUIEngine.h"
+
+#include "CMCETestUIEngineInSession.h"
+#include "CMCETestUIEngineOutSession.h"
+#include "CMCETestUIEngineSession.h"
+#include "CMCETestUIEngineAudioStream.h"
+#include "MCETestUIEngineConstants.h"
+#include "TMCETestUIEngineCmdAnswerSession.h"
+#include "mcetransactiondatacontainer.h"
+
+#include <MCEInSession.h>
+#include <MCEAudioStream.h>
+#include <MCESpeakerSink.h>
+
+#include <MCERtpSource.h>
+#include <MCEMicSource.h>
+#include <MCEFileSource.h>
+#include <MCEMediaSource.h>
+#include <e32err.h>
+#include <e32debug.h>
+
+#include "MCETestUIDebug.h"	
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::NewL
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineMultimediaObserver* CMCETestUIEngineMultimediaObserver::NewL( 
+			CMCETestUIEngine& aEngine )
+	{
+	CMCETestUIEngineMultimediaObserver* self = 
+			new (ELeave) CMCETestUIEngineMultimediaObserver( aEngine );
+			
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::CMCETestUIEngineMultimediaObserver
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineMultimediaObserver::CMCETestUIEngineMultimediaObserver(
+			CMCETestUIEngine& aEngine):
+	iEngine( aEngine )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::ConstructL()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::~CMCETestUIEngineMultimediaObserver
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineMultimediaObserver::~CMCETestUIEngineMultimediaObserver()
+	{
+	}
+		
+
+// -- From MMCEInSessionObserver--------------------------------------------------
+	
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::IncomingSession
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::IncomingSession(
+			CMceInSession* aSession,
+            TMceTransactionDataContainer* /*aContainer*/ )
+	{
+	if(iEngine.iAutoResponse)
+		{
+		TInt state = aSession->State();
+    
+		switch( state ) 
+			{
+			case CMceSession::EIncoming: 
+			    {
+			    aSession->UpdateL();
+				break;
+			    }
+			    
+			default: 
+			    {    
+			    break;
+			    }
+			}  
+		}
+	else if(iEngine.iVoIPFlag)	
+		{
+		TInt state = aSession->State();
+    
+		switch( state ) 
+			{
+			case CMceSession::EIncoming: 
+			    {
+			    iEngine.NotifyUser( KMiscIncomingVoIPSession );
+			    iEngine.UpdateIncomingSessionVoIPDataL(aSession);
+			  	break;
+			    }
+			    
+			default: 
+			    {    
+			    break;
+			    }
+			}  
+		}
+	else
+		{
+		CMCETestUIEngineInSession& engineSession = 
+	    iEngine.CreateInSessionL( aSession ); 
+		}
+	
+	}
+	
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::IncomingUpdate
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::IncomingUpdate(
+					CMceSession& aOrigSession, 
+					CMceInSession* aUpdatedSession,
+    				TMceTransactionDataContainer* /*aContainer*/ )
+	{
+//	CMCETestUIEngineInSession& engineSession = 
+//	    iEngine.CreateInSessionL( aUpdatedSession); 
+	iEngine.IncomingUpdateL( aOrigSession, aUpdatedSession )	;
+	}
+
+// -- From MMCESessionObserver -------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::SessionStateChanged
+// -----------------------------------------------------------------------------
+//	
+void CMCETestUIEngineMultimediaObserver::SessionStateChanged(
+            CMceSession& aSession,
+            TMceTransactionDataContainer* aContainer )
+	{
+	if(iEngine.iAutoResponse)
+		{
+		TInt state = aSession.State();
+    
+		
+		switch( state ) 
+			{
+			case CMceSession::EProceeding: 
+			    {
+			    CMceInSession& inSession = 
+                                    static_cast<CMceInSession&>(aSession);
+                inSession.AcceptL();
+			    break;
+			    }
+			    
+			default: 
+			    {    
+			    break;
+			    }
+			}  
+		}
+	else if(iEngine.iVoIPFlag)
+		{
+		TInt state = aSession.State();
+    	switch( state ) 
+			{
+			case CMceSession::EProceeding: 
+			    {
+			    CMceInSession& inSession = 
+                                    static_cast<CMceInSession&>(aSession);
+                inSession.RingL();
+                inSession.AcceptL();
+                iEngine.UpdateIncomingSessionVoIPDataAfterAnswerL(inSession);             
+                
+			    break;
+			    }
+			case CMceSession::EEstablished: 
+				{
+				CMceInSession& inSession = 
+                                    static_cast<CMceInSession&>(aSession);
+//				iEngine.UpdateIncomingSessionVoIPDataAfterAnswerL(inSession);
+                CMCETestUIEngineInSession* session = CMCETestUIEngineInSession::NewL(
+			                                                           iEngine, &inSession );
+			    CleanupStack::PushL( session );
+			    iEngine.iInSessions.Append( session );
+				iEngine.EngineStateChangedL();	
+				CleanupStack::Pop( session );
+				}
+			default: 
+			    {    
+			    break;
+			    }
+			}  
+		}
+    if( CMceSession::EEstablished == aSession.State() )
+        {
+        const RPointerArray<CMCETestUIEngineOutSession>& outsessions = 
+                                                        iEngine.OutSessions();     
+        const RPointerArray<CMCETestUIEngineInSession>& insessions = 
+                                                        iEngine.InSessions();
+
+        for ( TInt i = 0; i < outsessions.Count(); ++i )
+            {
+            if ( &outsessions[i]->Session() == &aSession && outsessions[i]->iHoldInProgress  )
+                {
+                outsessions[i]->EnableAudioL();
+                outsessions[i]->iHoldInProgress = EFalse;
+                }
+            }
+        for ( TInt i = 0; i < insessions.Count(); ++i )
+            {
+            if ( &insessions[i]->Session() == &aSession && insessions[i]->iHoldInProgress )
+                {
+                insessions[i]->EnableAudioL();
+                insessions[i]->iHoldInProgress = EFalse;
+                }
+            }
+        }
+	    
+	
+	
+	
+	HBufC8* hbuf = aContainer->GetReasonPhrase();
+	if(hbuf)
+		{
+		HBufC* buf = HBufC::NewL(hbuf->Length());
+		TPtr ptr = buf->Des();
+		ptr.Copy(*hbuf);
+		TBuf16<100> buf16;
+		buf16.Append(KUserNotificationSessionStateChanged );
+		buf16.Append(KSpace);
+		TInt code = aContainer->GetStatusCode();
+	    buf16.AppendNum(code);
+	    buf16.Append(*buf);
+	 	iEngine.NotifyUser(buf16);
+	  	delete buf;
+		}
+	else
+		{
+		iEngine.NotifyUser( KUserNotificationSessionStateChanged );	
+		}	
+
+	delete hbuf;
+	iEngine.EngineStateChangedL();	
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::SessionConnectionStateChanged
+// -----------------------------------------------------------------------------
+//		
+void CMCETestUIEngineMultimediaObserver::SessionConnectionStateChanged(
+            CMceSession& /*aSession*/,
+            TBool /*aActive*/) 
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::Failed
+// -----------------------------------------------------------------------------
+//                    
+void CMCETestUIEngineMultimediaObserver::Failed( CMceSession& /*aSession*/, 
+                                                 TInt /*aError*/ )
+	{	 
+	iEngine.NotifyUser( KUserNotificationSessionFailed );
+	iEngine.EngineStateChangedL();
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::UpdateFailed
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::UpdateFailed( 
+            CMceSession& /*aSession*/, 
+            TMceTransactionDataContainer* /*aContainer*/ )
+	{
+	iEngine.NotifyUser( KUpdateFailed );
+	iEngine.EngineStateChangedL();	        
+    }
+
+
+
+// From MMCETransactionObserver -------------------------------------------------
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::TransactionResponse
+// -----------------------------------------------------------------------------
+void CMCETestUIEngineMultimediaObserver::TransactionResponse(
+						    			CMceSession& /*aSession*/,
+						    			TMceTransactionId aTransactionId,
+						    			TMceTransactionDataContainer* aContainer )
+
+	{
+	MCE_TESTUI_DEBUG1("CMCETestUIEngineMultimediaObserver::TransactionResponse entry")
+	
+	iEngine.NotifyUser( KResponseReceived );
+	iEngine.EngineStateChangedL();	        
+
+	//Clean the Container
+	LogContainer( aContainer, aTransactionId );
+	
+	MCE_TESTUI_DEBUG1("CMCETestUIEngineMultimediaObserver::TransactionResponse exit") 
+	}
+	
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::TransactionFailed
+// -----------------------------------------------------------------------------	
+	    
+void CMCETestUIEngineMultimediaObserver::TransactionFailed( 
+					                    CMceSession& /*aSession*/,
+						    			TMceTransactionId aTransactionId, 
+						    			TInt aError )
+ 
+ 
+ 	{
+ 	MCE_TESTUI_DEBUG1("CMCETestUIEngineMultimediaObserver::TransactionFailed entry")
+ 	
+ 	iEngine.RemoveTransactionId( aTransactionId );
+ 	iEngine.NotifyUser( KTransactionFailed );
+ 	iEngine.EngineStateChangedL();
+
+	MCE_TESTUI_DEBUG3("CMCETestUIEngineMultimediaObserver::TransactionFailed aTransactionId", aTransactionId )
+	MCE_TESTUI_DEBUG3("CMCETestUIEngineMultimediaObserver::TransactionFailed aError", aError )
+ 	
+ 	MCE_TESTUI_DEBUG1("CMCETestUIEngineMultimediaObserver::TransactionFailed exit")
+	}
+
+// From MMCEInTransactionObserver -------------------------------------------------
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::TransactionResponse
+// -----------------------------------------------------------------------------
+void CMCETestUIEngineMultimediaObserver::IncomingRequest(
+						    			const TDesC8& /*aMethod*/,
+										CMceSession& /*aSession*/,
+	    								TMceTransactionId aTransactionId,
+	    								TMceTransactionDataContainer* aContainer )
+	{
+ 	MCE_TESTUI_DEBUG1("CMCETestUIEngineMultimediaObserver::IncomingRequest entry")
+ 	
+	TUint code = 200;
+	_LIT8( KMceSipOK,"OK");
+	
+	iEngine.AddTransactionIdL( aTransactionId );
+	iEngine.NotifyUser( KRequestReceived );
+	iEngine.EngineStateChangedL();	  
+	
+	LogContainer( aContainer, aTransactionId );
+
+	}
+
+
+// -- from MMCEStreamObserver --------------------------------------------------
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::StreamStateChanged
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::StreamStateChanged( 
+            CMceMediaStream& aStream )
+	{	
+    iEngine.NotifyStreamStateChangeL( aStream );
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::StreamStateChanged
+// -----------------------------------------------------------------------------
+//	
+void CMCETestUIEngineMultimediaObserver::StreamStateChanged( 
+			CMceMediaStream& aStream, 
+			CMceMediaSink& /*aSink*/ )
+    {
+    iEngine.NotifyStreamStateChangeL( aStream );
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::StreamStateChanged
+// -----------------------------------------------------------------------------
+//	
+void CMCETestUIEngineMultimediaObserver::StreamStateChanged( 
+			CMceMediaStream& aStream, 
+			CMceMediaSource& aSource)
+	{
+	TInt state = aStream.State();
+
+	TBuf16<100> buf16;
+//	buf16.Append(KUserNotificationStreamStateChanged );
+//	buf16.Append(KLeftParenthesis);
+	TInt transProgress;
+	
+	switch( state ) 
+		{
+		case CMceMediaStream::ETranscodingRequired: 
+		    buf16.Append(KStreamTranscodingRequired); 
+		    iEngine.NotifyUser(buf16);
+		    break;
+		case CMceMediaStream::ETranscoding: 
+			{
+			buf16.Append(KStreamTranscoding);
+			CMceFileSource& fileSource = static_cast<CMceFileSource&>(aSource);
+			transProgress = fileSource.TranscodingProgressL();
+			buf16.Append(KLeftParenthesis);
+			buf16.AppendNum(transProgress);
+			buf16.Append(KRightParenthesis);
+			}
+		     
+		    break;
+		default: 
+		    buf16.Append(KSessionStateUnknown); 
+		}
+	if( transProgress == 10 || transProgress == 100 )
+		{
+		iEngine.NotifyUser(buf16);
+		}
+	}
+
+
+
+// -- from MMCERtpObserver -----------------------------------------------------
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::SRReceived
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::SRReceived( 
+			CMceSession& /*aStream*/, 
+			CMceMediaStream& /*aSource*/ )
+	{
+	RDebug::Print(_L("SR Received "));
+	if(iEngine.iRtcpFlag)
+		{
+		iEngine.NotifyUser( KUserNotificationSRReceived );
+		iEngine.EngineStateChangedL();
+		}
+	else
+		{
+		iEngine.iSRCount++;
+		if(iEngine.iSRCount == 20)
+			{
+			iEngine.NotifyUser( KUserNotificationSRReceived );
+			iEngine.EngineStateChangedL();
+			iEngine.iSRCount = 0;
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::RRReceived
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::RRReceived( 
+			CMceSession&/* aStream*/,
+			CMceMediaStream& /*aSource*/ )
+	{
+		RDebug::Print(_L("RR Received "));
+		if(iEngine.iRtcpFlag)
+			{
+			iEngine.NotifyUser( KUserNotificationRRReceived );
+			iEngine.EngineStateChangedL();
+			}
+		else
+			{
+			iEngine.iRRCount++;
+			if(iEngine.iRRCount == 20)
+				{
+				iEngine.NotifyUser( KUserNotificationRRReceived );
+				iEngine.EngineStateChangedL();
+				iEngine.iRRCount = 0;
+				}
+			}
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::InactivityTimeout
+// -----------------------------------------------------------------------------
+//		
+void CMCETestUIEngineMultimediaObserver::InactivityTimeout( 
+			CMceMediaStream& /*aStream*/,
+			CMceRtpSource& /*aSource*/ )
+	{
+	iEngine.NotifyUser( KUserInactivityTimeoutReceived );
+	iEngine.EngineStateChangedL();
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::Activity
+// -----------------------------------------------------------------------------
+//		
+void CMCETestUIEngineMultimediaObserver::Activity( 
+			CMceMediaStream& /*aStream*/,
+			CMceRtpSource& /*aSource*/ )
+	{
+	iEngine.NotifyUser( KUserActivityTimeReceived );
+	iEngine.EngineStateChangedL();
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::IncomingEvent
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::IncomingEvent(
+					CMceInEvent* aEvent,
+    				TMceTransactionDataContainer*/* aContainer*/ )
+	{
+	CMCETestUIEngineInEvent& engineEvent = 
+	    iEngine.CreateInEventL( aEvent ); 
+	}
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::EventStateChanged
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::EventStateChanged(
+        			CMceEvent& /*aEvent*/,
+    				TMceTransactionDataContainer* aContainer )
+	{
+	HBufC8* hbuf = aContainer->GetReasonPhrase();
+	if(hbuf)
+		{
+		HBufC* buf = HBufC::NewL(hbuf->Length());
+		TPtr ptr = buf->Des();
+		ptr.Copy(*hbuf);
+		TBuf16<100> buf16;
+		buf16.Append(KUserNotificationEventStateChanged );
+		buf16.Append(KSpace);
+		TInt code = aContainer->GetStatusCode();
+	    buf16.AppendNum(code);
+	    buf16.Append(*buf);
+	 	iEngine.NotifyUser(buf16);
+	  	delete buf;
+		}
+	else
+		{
+		iEngine.NotifyUser( KUserNotificationEventStateChanged );	
+		}	
+
+	delete hbuf;
+	iEngine.EngineStateChangedL();
+	}
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::NotifyReceived
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::NotifyReceived(
+					CMceEvent&/* aEvent*/,
+    				TMceTransactionDataContainer*/* aContainer*/ )
+   {
+   	iEngine.NotifyUser( KUserNotificationEventNotifyReceived );
+	iEngine.EngineStateChangedL();
+   }
+					
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::EventConnectionStateChanged
+// -----------------------------------------------------------------------------
+//					
+void CMCETestUIEngineMultimediaObserver::EventConnectionStateChanged(
+	                CMceEvent& /*aEvent*/,
+	                TBool aActive ) 
+  {
+  if(aActive)
+  	{
+  	iEngine.NotifyUser( KUserNotificationEventActiveConnectionStateChangedReceived );
+  	}
+  else
+  	{
+  	iEngine.NotifyUser( KUserNotificationEventNotActiveConnectionStateChangedReceived );
+  	}
+  
+  iEngine.EngineStateChangedL();
+  }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::Failed
+// -----------------------------------------------------------------------------
+//  
+          
+void CMCETestUIEngineMultimediaObserver::Failed
+					(CMceEvent& /*aEvent*/, TInt /*aError*/ )
+  {
+  iEngine.NotifyUser( KUserNotificationEventFailed );
+  iEngine.EngineStateChangedL();
+  }
+					
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::IncomingRefer
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::IncomingRefer(
+					CMceInRefer* aRefer,
+					const TDesC8& /*aReferTo*/,
+    				TMceTransactionDataContainer* /*aContainer*/  )
+	{
+	CMCETestUIEngineInRefer& engineRefer = 
+	    iEngine.CreateInReferL( aRefer ); 
+	}
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::ReferStateChanged
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineMultimediaObserver::ReferStateChanged(
+        			CMceRefer& /*aRefer*/,
+    				TMceTransactionDataContainer* aContainer )
+	{
+	HBufC8* hbuf = aContainer->GetReasonPhrase();
+	if(hbuf)
+		{
+		HBufC* buf = HBufC::NewL(hbuf->Length());
+		TPtr ptr = buf->Des();
+		ptr.Copy(*hbuf);
+		TBuf16<100> buf16;
+		buf16.Append(KUserNotificationReferStateChanged );
+		buf16.Append(KSpace);
+		TInt code = aContainer->GetStatusCode();
+	    buf16.AppendNum(code);
+	    buf16.Append(*buf);
+	 	iEngine.NotifyUser(buf16);
+	  	delete buf;
+		}
+	else
+		{
+		iEngine.NotifyUser( KUserNotificationReferStateChanged );	
+		}	
+
+	delete hbuf;
+	iEngine.EngineStateChangedL();
+	}
+
+
+
+void CMCETestUIEngineMultimediaObserver::SsrcAdded(
+					CMceMediaStream& /*aStream*/,
+					CMceRtpSource& /*aSource*/,
+					TUint /*aSsrc*/ ) 
+	    
+	{
+	}
+void CMCETestUIEngineMultimediaObserver::SsrcRemoved(
+					CMceMediaStream& /*aStream*/,
+					CMceRtpSource& /*aSource*/,
+					TUint /*aSsrc*/ )
+	{
+	}	
+			
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::ReferConnectionStateChanged
+// -----------------------------------------------------------------------------
+//					
+void CMCETestUIEngineMultimediaObserver::ReferConnectionStateChanged(
+	                CMceRefer& /*aRefer*/,
+	                TBool aActive ) 
+  {
+  if(aActive)
+  	{
+  	iEngine.NotifyUser( KUserNotificationReferActiveConnectionStateChangedReceived );
+  	}
+  else
+  	{
+  	iEngine.NotifyUser( KUserNotificationReferNotActiveConnectionStateChangedReceived );
+  	}
+  
+  iEngine.EngineStateChangedL();
+  }
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::Failed
+// -----------------------------------------------------------------------------
+//  
+          
+void CMCETestUIEngineMultimediaObserver::Failed
+					(CMceRefer& /*aRefer*/, TInt /*aError*/ )
+  {
+  iEngine.NotifyUser( KUserNotificationReferFailed );
+  iEngine.EngineStateChangedL();
+  }
+					
+
+void CMCETestUIEngineMultimediaObserver::FCMsgReceived(CMceSession& /*aSession*/,
+					HBufC8* aMessage)
+   {
+   if(aMessage)
+   	{
+	HBufC* buf = HBufC::NewL(aMessage->Length());
+	TPtr ptr = buf->Des();
+	ptr.Copy(*aMessage);
+	TBuf16<100> buf16;
+	buf16.Append(KFCMessageReceived );
+	buf16.Append(KSpace);
+	buf16.Append(*buf);
+ 	iEngine.NotifyUser(buf16);
+  	delete buf;
+   	}
+    delete aMessage;
+   	iEngine.EngineStateChangedL(); 
+   }
+   
+void CMCETestUIEngineMultimediaObserver::FCMsgErrorOccurred(CMceSession& /*aSession*/,
+					TInt /*aError*/)
+   {
+   TBuf16<100> buf16;
+   buf16.Append(KFCMessageErrorOccured); 
+   iEngine.NotifyUser(buf16);   
+   iEngine.EngineStateChangedL(); 
+   }
+
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineMultimediaObserver::Failed
+// -----------------------------------------------------------------------------
+//  
+void CMCETestUIEngineMultimediaObserver::CsStatusChangedL( 
+                                        TPoCOmaCsState aStatus )
+
+  {
+  iEngine.CsStatusChangedL( aStatus );
+  }
+  
+/**
+* Incoming DTMF tone received.
+* @param aSession Session that tone was received.
+* @param aStream Stream that tone was received.
+* @param aTone Received tone.
+*/
+void  CMCETestUIEngineMultimediaObserver::DtmfToneReceived( CMceSession& /*aSession*/,
+                               CMceAudioStream& /*aStream*/,
+                               const TChar& aTone )
+    {
+    TBuf16<100> buf16;
+   	buf16.Append(KDtmfToneReceived); 
+   	buf16.Append(aTone);
+   	iEngine.NotifyUser(buf16);   
+   	iEngine.EngineStateChangedL(); 
+    }
+/**
+* DTMF event received.
+* @param aSession Session that event was received.
+* @param aStream Stream that event was received.
+* @param aSource Source that event was received.
+* @param aEvent Received event.
+*/
+void  CMCETestUIEngineMultimediaObserver::DtmfEventReceived( CMceSession& /*aSession*/,
+                                CMceAudioStream& /*aStream*/,
+                                CMceMediaSource& /*aSource*/,
+                                TMceDtmfEvent aEvent )
+    {
+    TBuf16<100> buf16;
+   	buf16.Append(KDtmfEventReceived);
+    switch( aEvent ) 
+		{
+		case EDtmfSendStarted: 
+			{
+			buf16.Append(KDtmfStarted); 
+		    break;
+			}
+		case EDtmfSendCompleted: 
+			{
+			buf16.Append(KDtmfCompleted); 
+		    break;
+			}   
+	 	default: 
+		    {    
+		    break;
+		    }  
+		   
+		}
+	iEngine.NotifyUser(buf16);
+	iEngine.EngineStateChangedL(); 
+    }
+
+/**
+* DTMF error occured. If error occurs, DTMFs becomes
+* unavailable for that source.
+* @param aSession Session that event was received.
+* @param aStream Stream that event was received.
+* @param aStream Stream that event was received.
+* @param aError Error code.
+*/
+void CMCETestUIEngineMultimediaObserver::DtmfErrorOccured(
+	CMceSession& /*aSession*/,
+	CMceAudioStream& /*aStream*/,
+	CMceMediaSource& /*aSource*/,
+	TInt /*aError*/ )
+    {
+    TBuf16<100> buf16;
+   	buf16.Append(KDtmfErrorOccured);
+	iEngine.NotifyUser(buf16);
+	iEngine.EngineStateChangedL(); 
+    }
+
+void CMCETestUIEngineMultimediaObserver::LogContainer( TMceTransactionDataContainer* aContainer,
+	TMceTransactionId aTransactionId ) const
+	{
+	MCE_TESTUI_DEBUG1( "CMCETestUIEngineMultimediaObserver::LogContainer entry" )
+
+	MCE_TESTUI_DEBUG3( "CMCETestUIEngineMultimediaObserver::LogContainer aTransactionId", aTransactionId )
+	MCE_TESTUI_DEBUG1( "Headers:" )
+
+	CDesC8Array* arr = NULL;
+	HBufC8* p = NULL;
+	TInt count = 0;
+	
+	arr = aContainer->GetHeaders();
+	if ( arr )
+		{
+		count = arr->Count();
+		for ( TInt i=0 ; i < count ; ++i )
+			{
+			MCE_TESTUI_DEBUG6( "", arr->MdcaPoint( i ) )
+			}
+		delete arr;
+		arr = 0;
+		}
+	
+	arr = aContainer->GetContentHeaders();
+	if ( arr )
+		{
+		count = arr->Count();
+		for ( TInt i=0 ; i < count ; ++i )
+			{
+			MCE_TESTUI_DEBUG6( "", arr->MdcaPoint( i ) )
+			}
+		delete arr;
+		arr = 0;
+		}
+
+	p = aContainer->GetContentType();
+	if ( p )
+		{
+		MCE_TESTUI_DEBUG6( "ContentType ", *p );
+		delete p;
+		arr = 0;
+		}
+	
+	p = aContainer->GetContent();
+	if ( p )
+		{
+		MCE_TESTUI_DEBUG6( "Content ", *p );
+		delete p;
+		arr = 0;
+		}
+		
+	p = aContainer->GetReasonPhrase();
+	if ( p )
+		{
+		MCE_TESTUI_DEBUG6( "ReasonPhrase ", *p );
+		delete p;
+		arr = 0;
+		}
+	
+	MCE_TESTUI_DEBUG1( "CMCETestUIEngineMultimediaObserver::LogContainer exit" )
+	}
+
+
+// End of File.
\ No newline at end of file