diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/TMCETestUIEngineCmdEstablish.cpp --- /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 +#include "CMCETestUIEngineCodec.h" +#include "CMCETestUIEngineAudioStream.h" +#include "CMCETestUIEngineVideoCodec.h" +#include "CMCETestUIEngineVideoStream.h" +#include +#include +#include +#include +#include + + + +// ----------------------------------------------------------------------------- +// 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\" ")); + if(iOutSession.iSessionParams.iPoCAdhocSessionType) + { + content_type = _L8("application/resource-lists+xml").AllocLC(); + _LIT8(KNewLine, "\r\n"); + _LIT8(KAhListXmlVersionLine,""); + _LIT8(KAhListXmlResourceLists,""); + _LIT8(KAhListXmlListTag,""); + _LIT8(KAhListXmlListEndTag,""); + _LIT8(KAhListXmlResourceListsEndTag ,""); + _LIT8(KAhListXmlEntryUriStartTag ,""); + _LIT8(KAhUri,"sip:joku@jossain.com"); + /* content = _L8("\r\n\ + \r\n\ + \r\n\ + \r\n\ + \r\n\ + \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 ); // + content->Des().Append( KNewLine ); + content->Des().Append( KAhListXmlResourceLists ); // Des().Append( KAhUri ); // sip:joku@jossain.com + content->Des().Append( KAhListXmlEntryUriEndTag ); // " /> + content->Des().Append( KNewLine ); + + content->Des().Append( KAhListXmlListEndTag ); // + content->Des().Append( KNewLine ); + content->Des().Append( KAhListXmlResourceListsEndTag ); // + 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& audioStreams = + iOutSession.AudioStreamsL(); + + for ( TInt i = 0; i < audioStreams.Count(); ++i ) + { + RPointerArray& 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& videoStreams = + iOutSession.VideoStreamsL(); + + for ( TInt i = 0; i < videoStreams.Count(); ++i ) + { + RPointerArray& 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& audioStreams = + iOutSession.AudioStreamsL(); + + for ( TInt i = 0; i < audioStreams.Count(); ++i ) + { + RPointerArray& 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& videoStreams = + iOutSession.VideoStreamsL(); + + for ( TInt i = 0; i < videoStreams.Count(); ++i ) + { + RPointerArray& 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