multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/TMCETestUIEngineCmdUpdateSession.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/TMCETestUIEngineCmdUpdateSession.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,441 @@
+/*
+* 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.
+*
+*/
+
+
+
+
+// INCLUDES
+
+#include "TMCETestUIEngineCmdUpdateSession.h"
+#include "CMCETestUIQuestionSingleSelection.h"
+#include "CMCETestUIQuestionDataQuery.h"
+#include "CMCETestUIEngineSession.h"
+#include "CMCETestUIEngineCodec.h"
+#include "CMCETestUIEngineAudioStream.h"
+#include "CMCETestUIEngineVideoCodec.h"
+#include "CMCETestUIEngineVideoStream.h"
+#include <MCESession.h>
+#include <MceAudioStream.h>
+#include <MCEAudioCodec.h>
+#include <MCEFCMsgExchange.h>
+#include <MceVideoStream.h>
+#include <MCEVideoCodec.h>
+#include <mcertpsource.h>
+#include <mcemicsource.h>
+#include <mcespeakersink.h>
+#include <sipstrings.h> 
+#include <sipstrconsts.h>
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::TMCETestUIEngineCmdUpdateSession
+// -----------------------------------------------------------------------------
+//
+TMCETestUIEngineCmdUpdateSession::TMCETestUIEngineCmdUpdateSession( 
+		            CMCETestUIEngine& aEngine,
+		            CMCETestUIEngineSession& aSession )
+    : TMCETestUIEngineCmdBase( aEngine ),
+      iSession( aSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::ExecuteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdUpdateSession::ExecuteL()
+	{
+	if(iEngine.iMultiCodecSupport == EFalse)
+		{
+		DeleteCodecs();	
+		} // delete this if you want to delete all codecs manually
+	iSession.Session().UpdateL();
+	iEngine.EngineStateChangedL();    
+	}
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::Caption
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& TMCETestUIEngineCmdUpdateSession::Caption() const
+	{
+	return KCommandCaptionUpdateSession;
+	}
+	
+	
+EXPORT_C void TMCETestUIEngineCmdUpdateSession:: DeleteCodecs()
+	{
+	const RPointerArray<CMCETestUIEngineAudioStream>& audioStreams = 
+            iSession.AudioStreamsL();
+            
+         for ( TInt i = 0; i < audioStreams.Count(); ++i )
+        	{
+        	 RPointerArray<CMCETestUIEngineCodec>& codecs = 
+            	audioStreams[i]->CodecsL();
+            	TInt count = codecs.Count();
+            //delete all codecs except first one	
+         	for ( TInt j = count-1; j > 0; --j )
+				{
+				 audioStreams[i]->AudioStream().RemoveCodecL(codecs[j]->Codec());
+		         delete codecs[j];
+		         codecs.Remove( j );
+		         codecs.Compress();
+		         iEngine.EngineStateChangedL();
+		        }
+        	}
+     const RPointerArray<CMCETestUIEngineVideoStream>& videoStreams = 
+            iSession.VideoStreamsL();
+            
+         for ( TInt i = 0; i < videoStreams.Count(); ++i )
+        	{
+        	 RPointerArray<CMCETestUIEngineVideoCodec>& codecs = 
+            	videoStreams[i]->CodecsL();
+            	TInt count = codecs.Count();
+            //delete all codecs except first one	
+         	for ( TInt j = count-1; j > 0; --j )
+				{
+				 videoStreams[i]->VideoStream().RemoveCodecL(codecs[j]->Codec());
+		         delete codecs[j];
+		         codecs.Remove( j );
+		         codecs.Compress();
+		         iEngine.EngineStateChangedL();
+		        }
+        	}
+	}
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSessionWithValues::TMCETestUIEngineCmdUpdateSessionWithValues
+// -----------------------------------------------------------------------------
+//
+TMCETestUIEngineCmdUpdateSessionWithValues::TMCETestUIEngineCmdUpdateSessionWithValues( 
+		            CMCETestUIEngine& aEngine,
+		            CMCETestUIEngineSession& aSession )
+    : TMCETestUIEngineCmdBase( aEngine ),
+      iSession( aSession )
+    {
+    }
+    
+
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSessionWithValues::ExecuteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdUpdateSessionWithValues::ExecuteL()
+	{
+	if(iEngine.iMultiCodecSupport == EFalse)
+		{
+		DeleteCodecs();	
+		} // delete this if you want to delete all codecs manually
+	if(iEngine.IsFCSession())// for PoC Session update , may be new update can be added for PoC
+		{
+	//	iEngine.FloorControl().InitializeL(iSession.Session(),0,iEngine.MMObserver());
+		CDesC8Array* array = new (ELeave) CDesC8ArrayFlat(1);	
+		array->AppendL(_L8("a=fmtp:TBCP queuing=0; tb_priority=1; timestamp=0; tb_granted=0; poc_sess_priority=1; poc_lock=0\r\n"));
+		iEngine.FloorControl().UpdateL(iSession.Session(), array);	
+	
+		CDesC8Array* sipHeaders = new ( ELeave ) CDesC8ArrayFlat(1);
+		CleanupStack::PushL( sipHeaders );	//1
+	//	sipHeaders->AppendL(_L8("Accept-Contact: *;+mckoppa"));					
+		CDesC8Array* contHeaders = new ( ELeave ) CDesC8ArrayFlat(1);
+		CleanupStack::PushL( contHeaders );							// 2
+		
+		// empty content type
+		HBufC8* contentType = HBufC8::NewLC( 1 );					// 3
+		HBufC8* sdpcontent = HBufC8::NewLC( 1 ); 					// 4
+		// server - header
+		sipHeaders->AppendL( (_L8("Server: PoC-client/OMA1.0 Nokia-S60/v1.0")) );
+		// privacy - header
+		sipHeaders->AppendL(_L8("Privacy: id;user;header"));
+		// p-preferred identity header
+						// 4
+		sipHeaders->AppendL( (_L8("P-Preferred-Identity: <sip:someone@somewhere.com> ")) );
+		iSession.Session().UpdateL( 36000, 
+							  sipHeaders,
+							  contentType,
+							  sdpcontent,
+							  contHeaders );
+	    CleanupStack::Pop( sdpcontent );
+	    CleanupStack::Pop( contentType );
+	    CleanupStack::Pop( contHeaders );
+	    CleanupStack::Pop( sipHeaders );	
+		iEngine.EngineStateChangedL();    
+		}
+	else
+		{
+		TSessionEstablishValues sessionValues;
+    	if(iEngine.SessionEstablishValues( sessionValues))
+    	{
+    	// change the values to the format needed by api 
+    	CDesC8Array* headers;
+    	if(sessionValues.headers.Compare(KNone))
+    		{
+    		CMCETestUIQuestionDataQuery* question = 
+	    			CMCETestUIQuestionDataQuery::NewLC();
+    		question->SetCaptionL( KUserQuestionInputRecipient );
+			question->SetDefaultValueL(sessionValues.headers  );
+			question->SetAnswerL( sessionValues.headers );
+			TBufC8<100> headersbuffer( question->Answer8() );
+			CleanupStack::PopAndDestroy( question );
+			headers = new (ELeave) CDesC8ArrayFlat( 1 );
+			CleanupStack::PushL( headers );
+			headers->AppendL( headersbuffer );
+    		}
+    	else
+    		{
+    		headers = new (ELeave) CDesC8ArrayFlat( 1 );
+			CleanupStack::PushL( headers );
+		//	headers->AppendL(_L8("Accept-Contact: *;+mckoppa"));
+		//	headers->AppendL( KAcceptContactMCETestUI );	
+    		}
+    
+			CleanupStack::Pop( headers );
+			iSession.Session().SetServiceTypeL(sessionValues.iServiceType);
+			iSession.Session().UpdateL(sessionValues.timeOut, headers, NULL, NULL, NULL );
+			iEngine.EngineStateChangedL();
+	       	}
+		
+		}
+ 	
+	}
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSessionWithValues::Caption
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& TMCETestUIEngineCmdUpdateSessionWithValues::Caption() const
+	{
+	return KUserQuestionOptionUpdateWithValues;
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSessionWithValues::DeleteCodecs
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void TMCETestUIEngineCmdUpdateSessionWithValues:: DeleteCodecs()
+	{
+	const RPointerArray<CMCETestUIEngineAudioStream>& audioStreams = 
+            iSession.CurrentAudioStreams();
+            
+         for ( TInt i = 0; i < audioStreams.Count(); ++i )
+        	{
+        	 RPointerArray<CMCETestUIEngineCodec>& codecs = 
+            	audioStreams[i]->CurrentCodecs();
+            //delete all codecs except first one	
+         	for ( TInt j = 1; j < codecs.Count(); ++j )
+				{
+				 audioStreams[i]->AudioStream().RemoveCodecL(codecs[j]->Codec());
+		         delete codecs[j];
+		         codecs.Remove( j );
+		         codecs.Compress();
+		        }
+        	}
+      const RPointerArray<CMCETestUIEngineVideoStream>& videoStreams = 
+            iSession.VideoStreamsL();
+            
+         for ( TInt i = 0; i < videoStreams.Count(); ++i )
+        	{
+        	 RPointerArray<CMCETestUIEngineVideoCodec>& codecs = 
+            	videoStreams[i]->CodecsL();
+            	TInt count = codecs.Count();
+            //delete all codecs except first one	
+         	for ( TInt j = count-1; j > 0; --j )
+				{
+				 videoStreams[i]->VideoStream().RemoveCodecL(codecs[j]->Codec());
+		         delete codecs[j];
+		         codecs.Remove( j );
+		         codecs.Compress();
+		         iEngine.EngineStateChangedL();
+		        }
+        	}
+	}
+
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::TMCETestUIEngineCmdUpdateSession
+// -----------------------------------------------------------------------------
+//
+TMCETestUIEngineCmdHoldCall::TMCETestUIEngineCmdHoldCall( 
+		            CMCETestUIEngine& aEngine,
+		            CMCETestUIEngineSession& aSession )
+    : TMCETestUIEngineCmdBase( aEngine ),
+      iSession( aSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::ExecuteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdHoldCall::ExecuteL()
+	{
+	const RPointerArray<CMceMediaStream>& streams = iSession.Session().Streams();
+	CMceMediaStream& mainstream = *streams[0];
+	CMceMediaStream& boundStream = mainstream.BoundStreamL();
+	
+    if( !iSession.iHold )
+        {
+        HandleLocalHoldingL( mainstream, boundStream );
+        DisableAudioL();
+        iSession.iHold = ETrue;
+        }
+    else
+        {
+        HandleLocalResumingL( mainstream, boundStream );
+        iSession.iHold = EFalse;
+        iSession.iHoldInProgress = ETrue;
+        }
+
+	iSession.Session().UpdateL();
+	iEngine.EngineStateChangedL();    
+	}
+
+// ---------------------------------------------------------------------------
+// CSVPHoldMediaHandler::HandleLocalHoldingL - copied from VoIP
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdHoldCall::
+HandleLocalHoldingL( CMceMediaStream& aMediaStream,
+                     CMceMediaStream& aBoundStream )
+    {
+    
+    // In case of local hold RTP source must be disabled
+    if ( KMceRTPSource == aMediaStream.Source()->Type() )
+        {
+        aMediaStream.DisableL();
+        }
+        
+    else if ( KMceRTPSource == aBoundStream.Source()->Type() )
+        {
+        aBoundStream.DisableL();
+        }
+        
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    }
+
+// ---------------------------------------------------------------------------
+// CSVPHoldMediaHandler::DisableAudioL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdHoldCall::DisableAudioL()
+    {
+    // Disable speaker & microphone
+    CMceSession* session = &iSession.Session();
+    const RPointerArray< CMceMediaStream >& streams = session->Streams();
+    TInt streamCount = streams.Count();
+    for ( TInt i = 0; i < streamCount; i++ )
+        {
+        CMceMediaStream* mediaStream = streams[ i ];
+        TMceMediaType mediaType = mediaStream->Type();
+        if ( KMceAudio == mediaType )
+            {
+            CMceMediaStream& boundStream = mediaStream->BoundStreamL();
+            DisableAudioStreamL( boundStream );
+            DisableAudioStreamL( *mediaStream );
+            }
+        } 
+    }
+ 
+// ---------------------------------------------------------------------------
+// CSVPHoldMediaHandler::DisableAudioStreamL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdHoldCall::DisableAudioStreamL( CMceMediaStream& aAudioStream )
+    {
+    if ( aAudioStream.Source() &&
+         KMceMicSource == aAudioStream.Source()->Type() )
+        {
+        CMceMicSource* micSource = 
+                    ( CMceMicSource* ) aAudioStream.Source();
+        if ( micSource->IsEnabled() )
+            {
+            // mute speaker sink
+            micSource->DisableL();
+            }
+        } 
+        
+     if ( aAudioStream.Sinks().Count()  )
+        {
+        const RPointerArray< CMceMediaSink >& sinks = 
+            aAudioStream.Sinks();
+        for ( TInt z = 0; z < sinks.Count(); z++ )
+            {
+            if ( sinks[ z ]->Type() == KMceSpeakerSink )
+                {
+                CMceSpeakerSink* speakerSink = 
+                    ( CMceSpeakerSink* )  sinks[ z ];
+                if ( speakerSink->IsEnabled() )
+                    {
+                    // mute speaker sink
+                    speakerSink->DisableL();                    
+                    }
+                }
+            } 
+        }                              
+    
+    } 
+    
+
+// ---------------------------------------------------------------------------
+// CSVPHoldMediaHandler::HandleLocalResumingL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdHoldCall::
+HandleLocalResumingL( CMceMediaStream& aMediaStream,
+                      CMceMediaStream& aBoundStream )
+    {
+    if ( !aBoundStream.IsEnabled() )
+        {
+        aBoundStream.EnableL();
+        }
+        
+    if ( !aMediaStream.IsEnabled() )
+        {
+        aMediaStream.EnableL();
+        }
+
+    }
+
+
+
+
+    
+      
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdUpdateSession::Caption
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& TMCETestUIEngineCmdHoldCall::Caption() const
+	{
+	return KCommandCaptionHoldSession;
+	}
+	
+
+
+// End of File