multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/TMCETestUIEngineCmdEstablish.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/TMCETestUIEngineCmdEstablish.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,399 @@
+/*
+* 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 "TMCETestUIEngineCmdEstablish.h"
+#include "CMCETestUIQuestionSingleSelection.h"
+#include "CMCETestUIQuestionDataQuery.h"
+#include "CMCETestUIEngineOutSession.h"
+#include <MCEOutSession.h>
+#include "CMCETestUIEngineCodec.h"
+#include "CMCETestUIEngineAudioStream.h"
+#include "CMCETestUIEngineVideoCodec.h"
+#include "CMCETestUIEngineVideoStream.h"
+#include <MCESession.h>
+#include <MceAudioStream.h>
+#include <MCEAudioCodec.h>
+#include <MceVideoStream.h>
+#include <MCEVideoCodec.h>
+
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablish::TMCETestUIEngineCmdEstablish
+// -----------------------------------------------------------------------------
+//
+TMCETestUIEngineCmdEstablish::TMCETestUIEngineCmdEstablish(
+            CMCETestUIEngine& aEngine,
+		    CMCETestUIEngineOutSession& aOutSession )
+    : TMCETestUIEngineCmdBase( aEngine ),
+    iOutSession( aOutSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablish::ExecuteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdEstablish::ExecuteL()
+	{
+	if(iEngine.iMultiCodecSupport == EFalse)
+		{
+		DeleteCodecs();	
+		}
+	if(iOutSession.iSessionType == EPoCSession)
+		{
+		TInt num = 36000;
+		HBufC8* content_type =  NULL; 
+		CDesC8ArrayFlat* headers =  NULL;
+		HBufC8* content =  NULL; 
+		headers = new (ELeave) CDesC8ArrayFlat(1);
+		CleanupStack::PushL( headers );
+		headers->AppendL(_L8("User-Agent: PoC-client/OMA1.0 Nokia-S60/v1.0"));
+		headers->AppendL(_L8("Accept-Contact: *;+mckoppa"));
+	//	headers->AppendL(_L8("Accept-Contact: *;+g.poc.talkburst;require;explicit"));
+		headers->AppendL(_L8("Privacy: id;user;header"));
+		headers->AppendL(_L8("P-Preferred-Identity: \"Joku\" <sip:joku@jossain.com>"));
+		if(iOutSession.iSessionParams.iPoCAdhocSessionType)
+			{
+			content_type = _L8("application/resource-lists+xml").AllocLC(); 
+			_LIT8(KNewLine, "\r\n");
+			_LIT8(KAhListXmlVersionLine,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+		    _LIT8(KAhListXmlResourceLists,"<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");	
+		    _LIT8(KAhListXmlListTag,"<list>");
+		    _LIT8(KAhListXmlListEndTag,"</list>");
+		    _LIT8(KAhListXmlResourceListsEndTag ,"</resource-lists>");
+		    _LIT8(KAhListXmlEntryUriStartTag ,"<entry uri=\"");
+		    _LIT8(KAhListXmlEntryUriEndTag ,"\" />");
+		    _LIT8(KAhUri,"sip:joku@jossain.com");
+	/*		content = _L8("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\
+			<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n\
+			<list>\r\n\
+			<entry uri=\"sip:g_heikki2@poc.wirelessfuture.com\" />\r\n\
+			\r\n\
+			</resource-lists>\r\n").AllocL();
+			
+	*/		
+	
+			
+
+    		content = HBufC8::NewLC( KAhListXmlVersionLine().Length() 
+    							 + KAhListXmlResourceLists().Length()
+    							 + KAhListXmlListTag().Length()
+    							 + KNewLine().Length() 
+    							 + KNewLine().Length() 
+    							 + KNewLine().Length() 
+    							 + KAhListXmlEntryUriStartTag().Length()
+    						 	 + KAhUri().Length()
+    						     + KAhListXmlEntryUriEndTag().Length()
+    						     + KNewLine().Length() 
+    							 + KAhListXmlListEndTag().Length() 
+								 + KAhListXmlResourceListsEndTag().Length() 
+								 + KNewLine().Length()
+								 + KNewLine().Length() );
+								 
+			content->Des().Append( KAhListXmlVersionLine );				// <?xml version="1.0" encoding="UTF-8"?>
+		    content->Des().Append( KNewLine );
+		    content->Des().Append( KAhListXmlResourceLists );			// <resource-lists xmlns="urn:ietf:params:xml....
+		    content->Des().Append( KNewLine );
+		    content->Des().Append( KAhListXmlListTag );					// <list>
+		    content->Des().Append( KNewLine );
+		    
+		    content->Des().Append( KAhListXmlEntryUriStartTag );	// <entry uri="
+    		content->Des().Append( KAhUri );					// sip:joku@jossain.com
+    		content->Des().Append( KAhListXmlEntryUriEndTag );		// " />
+    		content->Des().Append( KNewLine );
+    		
+    		content->Des().Append( KAhListXmlListEndTag );				// </list>
+		    content->Des().Append( KNewLine );
+		    content->Des().Append( KAhListXmlResourceListsEndTag );		// </resource-lists>
+		    content->Des().Append( KNewLine );							// /r/n
+
+
+
+			CleanupStack::Pop( content );
+			CleanupStack::Pop( content_type );
+			}
+		
+		CleanupStack::Pop( headers );
+		iOutSession.OutSession().EstablishL(num,headers,content_type,content);
+		}
+
+	else
+		{
+		TInt num = 36000;
+		HBufC8* content_type =  NULL; 
+		CDesC8ArrayFlat* headers =  NULL;
+		HBufC8* content =  NULL; 
+		headers = new (ELeave) CDesC8ArrayFlat(1);
+		CleanupStack::PushL( headers );
+		if(iEngine.iKoppaFlag)
+			{
+			headers->AppendL(_L8("Accept-Contact: *;+mckoppa"));
+			}
+		CleanupStack::Pop( headers );
+		iOutSession.OutSession().EstablishL(num,headers,content_type,content);
+		}
+	iEngine.EngineStateChangedL();	    
+	}
+	
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablish::DeleteCodecs
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdEstablish:: DeleteCodecs()
+	{
+	const RPointerArray<CMCETestUIEngineAudioStream>& audioStreams = 
+            iOutSession.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 = 
+            iOutSession.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();
+		        }
+        	}
+	}
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablish::Caption
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& TMCETestUIEngineCmdEstablish::Caption() const
+	{
+	return KCommandCaptionEstablish;
+	}
+
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablishWithValues::TMCETestUIEngineCmdEstablishWithValues
+// -----------------------------------------------------------------------------
+//
+TMCETestUIEngineCmdEstablishWithValues::TMCETestUIEngineCmdEstablishWithValues(
+            CMCETestUIEngine& aEngine,
+		    CMCETestUIEngineOutSession& aOutSession )
+    : TMCETestUIEngineCmdBase( aEngine ),
+    iOutSession( aOutSession )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablishWithValues::ExecuteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMCETestUIEngineCmdEstablishWithValues::ExecuteL()
+	{
+	if(iEngine.iMultiCodecSupport == EFalse)
+		{
+		DeleteCodecs();	
+		} 
+    TSessionEstablishValues sessionValues;
+    if(iEngine.SessionEstablishValues( sessionValues))
+    	{
+    	// change the values to the format needed by api 
+    	CDesC8Array* headers;
+    	headers = new (ELeave) CDesC8ArrayFlat( 1 );
+    	CleanupStack::PushL( 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->AppendL( headersbuffer );
+    //		}
+    //	else
+    //		{
+    	//	headers = new (ELeave) CDesC8ArrayFlat( 1 );
+		//	CleanupStack::PushL( headers );
+			//headers->AppendL( KAcceptContactMCETestUI );	
+    //		}
+    /*	HBufC8* contentType;
+    	HBufC8* content;
+    	CDesC8Array* contentHeaders;
+    	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( KAcceptContactMCETestUI );	
+    		}
+    	if(sessionValues.contentType.Compare(KNone) )
+    		{
+    		contentType = HBufC8::NewLC(sessionValues.contentType.Length());
+    		TPtr8 ptr8 = contentType->Des();
+            ptr8.Copy(sessionValues.contentType);
+    		}
+    	else 
+    		{
+    		contentType = KNullDesC8().AllocLC();
+    		}	
+        if(sessionValues.content.Compare(KNone))
+    		{
+    		content = HBufC8::NewLC(sessionValues.content.Length());
+    		TPtr8 ptr8 = content->Des();
+            ptr8.Copy(sessionValues.content); 
+    		}
+    	else 
+    		{
+    		content = KNullDesC8().AllocLC();
+    		}		
+    	
+    	if(sessionValues.contentHeaders.Compare(KNone))
+    		{
+    		CMCETestUIQuestionDataQuery* question = 
+	    			CMCETestUIQuestionDataQuery::NewLC();
+    		question->SetCaptionL( KUserQuestionInputRecipient );
+			question->SetDefaultValueL(sessionValues.contentHeaders  );
+			question->SetAnswerL( sessionValues.contentHeaders );
+			TBufC8<100> headersbuffer( question->Answer8() );
+			CleanupStack::PopAndDestroy( question );
+			contentHeaders = new (ELeave) CDesC8ArrayFlat( 1 );
+			CleanupStack::PushL( contentHeaders );
+			contentHeaders->AppendL( headersbuffer );
+    		}
+    	else
+    		{
+    		contentHeaders = new (ELeave) CDesC8ArrayFlat( 1 );
+			CleanupStack::PushL( contentHeaders );
+			contentHeaders->AppendL( KAcceptContactMCETestUI );	
+    		}	
+    		
+    	iOutSession.OutSession().EstablishL(sessionValues.timeOut, headers, contentType, content, contentHeaders );
+		CleanupStack::Pop( contentHeaders );
+		CleanupStack::Pop( content );
+		CleanupStack::Pop( contentType );
+		
+		*/
+		
+		
+
+	// ---------------------------------------
+	// Next is to find a way around MMCE's bug
+	
+	HBufC8* contentType = KNullDesC8().AllocLC();
+	HBufC8* content = KNullDesC8().AllocLC();
+	
+	/// --------------------------------------
+	CleanupStack::Pop( content );
+	CleanupStack::Pop( contentType );
+	CleanupStack::Pop( headers );
+	iOutSession.OutSession().EstablishL( sessionValues.timeOut, headers, contentType, content, NULL );
+
+	iEngine.EngineStateChangedL();
+   	}
+	}
+
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablishWithValues::DeleteCodecs
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void TMCETestUIEngineCmdEstablishWithValues:: DeleteCodecs()
+	{
+	const RPointerArray<CMCETestUIEngineAudioStream>& audioStreams = 
+            iOutSession.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 = 
+            iOutSession.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();
+		        }
+        	}
+	}
+// -----------------------------------------------------------------------------
+// TMCETestUIEngineCmdEstablishWithValues::Caption
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& TMCETestUIEngineCmdEstablishWithValues::Caption() const
+	{
+	return KUserQuestionOptionEstalishWithValues;
+	}
+
+
+// End of File