--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/MCETestUIEngine/src/CMCETestUIEngineInSession.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,470 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+// MCE API
+
+#include <MCEManager.h>
+#include <MCESession.h>
+#include <MCEInSession.h>
+#include <MCEAudioStream.h>
+#include <MCEFCMsgExchange.h>
+#include <mcertpsource.h>
+#include <mcedisplaysink.h>
+#include <mcespeakersink.h>
+#include <MCEmediaSink.h>
+#include <MCEVideoCodec.h>
+#include <mcesecuresession.h>
+#include <mcecamerasource.h>
+#include <mcevideostream.h>
+#include <aknutils.h>
+#include "MCETestUIEngineDefaultValues.h"
+
+#include "CMCETestUIEngineMultimediaObserver.h"
+#include "CMCETestUIEngine.h"
+#include "CMCETestUIEngineSession.h"
+#include "CMCETestUIEngineInSession.h"
+
+#include "TMCETestUIEngineCmdAcceptSession.h"
+#include "TMCETestUIEngineCmdRejectSession.h"
+#include "TMCETestUIEngineCmdRingingSession.h"
+#include "TMCETestUIEngineCmdDeleteSession.h"
+#include "TMCETestUIEngineCmdFloorControlSession.h"
+#include "TMCETestUIEngineCmdCryptoHandling.h"
+
+#include "TMCETestUIEngineCmdSRReqRes.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::NewL()
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineInSession* CMCETestUIEngineInSession::NewL(
+ CMCETestUIEngine& aEngine,
+ CMceInSession* aInSession )
+ {
+ CMCETestUIEngineInSession* self =
+ new (ELeave) CMCETestUIEngineInSession( aEngine, aInSession );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::CMCETestUIEngineInSession
+// -----------------------------------------------------------------------------
+//
+CMCETestUIEngineInSession::CMCETestUIEngineInSession(
+ CMCETestUIEngine& aEngine,
+ CMceInSession* aInSession )
+ :CMCETestUIEngineSession( aEngine, ENotSpesified, EVideoNotSpesified),
+ iInSession( aInSession ),
+ iId( 0 )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineInSession::ConstructL()
+ {
+ User::LeaveIfError( iInSession ? KErrNone : KErrArgument );
+
+ BaseConstructL();
+
+ if(iEngine.IsFCSession())
+ {
+ TRAP_IGNORE(iEngine.FloorControl().InitializeL(
+ *iInSession,0, iEngine.MMObserver()));
+ }
+ iSession = iInSession;
+
+ if( iEngine.iSdp )
+ {
+ CDesC8Array* array = new (ELeave) CDesC8ArrayFlat(2);
+ array->AppendL(_L8("a=IncomingSession1:20\r\n"));
+ array->AppendL(_L8("a=IncomingSession2:40\r\n"));
+ iInSession->SetSessionSDPLinesL( array );
+ AddSdpToStreamsL( iInSession );
+ }
+
+ AdjustRectSize(iInSession); // Main rect adjusted
+ SolveDirection();
+ SolveVideoDirection();
+ SetAudioRouting( iInSession );
+
+ UpdateVideoParametersL( iInSession ); // Possibly secondary rect adjusted
+
+ // Get identity
+ iId = iEngine.NextInSessionId();
+ iType = KMceInSession;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::AdjustRectSize
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineInSession::AdjustRectSize(CMceInSession* aSession)
+ {
+ const RPointerArray<CMceMediaStream>& streams = aSession->Streams();
+
+ if ( streams.Count() == 0 )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ for ( TInt i = 0; i < streams.Count(); ++i )
+ {
+ CDesC8Array* array = new (ELeave) CDesC8ArrayFlat(2);
+ CMceMediaStream* mediaStream =
+ static_cast<CMceMediaStream*>(streams[i]);
+
+ const RPointerArray<CMceMediaSink>& sinks = streams[i]->Sinks();
+
+ for ( TInt j = 0; j < sinks.Count(); ++j )
+ {
+ if( sinks[j]->Type() == KMceDisplaySink )
+ {
+ CMceDisplaySink* dispSink = static_cast<CMceDisplaySink*>(sinks[j]);
+ // TRect rect(iEngine.GetRect());
+ TRect rect(32, 88, 208, 232);
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
+ dispSink->SetDisplayRectL(rect);
+ }
+ }
+
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::UpdateVideoParametersL
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineInSession::UpdateVideoParametersL(CMceInSession* aSession)
+ {
+ if ( iVideoDirection == EVideoSendRecv )
+ {
+ CMceCameraSource* cameraSource = NULL;
+ const RPointerArray<CMceMediaStream>& streams = aSession->Streams();
+ for ( TInt j = 0; j < streams.Count() && !cameraSource; ++j )
+ {
+ CMceMediaStream* cameraStream = FindStreamForSourceL( *streams[ j ], KMceCameraSource );
+
+ if ( cameraStream )
+ {
+ cameraSource = static_cast<CMceCameraSource*>( cameraStream->Source() );
+ }
+ }
+
+ if ( iEngine.iInSessionSettings.iCameraSetting == TSessionParams::EMceCameraSecondary &&
+ cameraSource )
+ {
+ if ( cameraSource->CamerasAvailable() > 1 )
+ {
+ cameraSource->SetCameraIndexL( 1 );
+ }
+ }
+
+ if ( iEngine.iInSessionSettings.videoSinkDisplay == TSessionParams::EMceViewFinderEnabled &&
+ cameraSource )
+ {
+ CMceVideoStream* videoLocalStream = CMceVideoStream::NewL();
+ CleanupStack::PushL( videoLocalStream );
+ CMceDisplaySink* localDispSink = CMceDisplaySink::NewLC( iEngine.MCEManager() );
+
+ TRect localDisplayRect(0, 0, 36, 44);
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EStatusPane, localDisplayRect );
+ localDispSink->SetDisplayRectL( localDisplayRect );
+ localDispSink->SetPriorityL( ECoeWinPriorityAlwaysAtFront );
+ videoLocalStream->AddSinkL( localDispSink );
+ CleanupStack::Pop( localDispSink );
+
+ videoLocalStream->SetSourceL( cameraSource );
+
+ aSession->AddStreamL( videoLocalStream );
+ CleanupStack::Pop( videoLocalStream );
+ }
+ }
+
+ if ( iVideoDirection == EVideoSendRecv || iVideoDirection == EVideoSendOnly )
+ {
+ const RPointerArray<CMceMediaStream>& streams = aSession->Streams();
+ for ( TInt k = 0; k < streams.Count(); k++ )
+ {
+ CMceMediaStream* cameraStream = FindStreamForSourceL( *streams[ k ], KMceCameraSource );
+ if ( cameraStream )
+ {
+ CMceVideoStream* videoStream = static_cast<CMceVideoStream*>( cameraStream );
+ AdjustVideoCodecsL( videoStream->Codecs() );
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::AddSdpToStreamsL
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineInSession::SetAudioRouting(CMceInSession* aSession)
+ {
+ const RPointerArray<CMceMediaStream>& streams = aSession->Streams();
+
+ if ( streams.Count() == 0 )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ for ( TInt i = 0; i < streams.Count(); ++i )
+ {
+ CMceMediaStream* mediaStream =
+ static_cast<CMceMediaStream*>(streams[i]);
+
+ if( mediaStream->Sinks()[0]->Type() == KMceSpeakerSink )
+ {
+ CMceSpeakerSink* speakerSink = ( CMceSpeakerSink* ) mediaStream->Sinks()[0];
+ speakerSink->SetRoutingL( KMceAudioRoutePrivate );
+ }
+
+ if( mediaStream->BoundStream() )
+ {
+ CMceMediaStream* boundStream = &mediaStream->BoundStreamL();
+ if( boundStream->Sinks()[0]->Type() == KMceSpeakerSink )
+ {
+ CMceSpeakerSink* speakerSink = ( CMceSpeakerSink* ) boundStream->Sinks()[0];
+ speakerSink->SetRoutingL( KMceAudioRoutePrivate );
+
+ }
+
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::AddSdpToStreamsL
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIEngineInSession::AddSdpToStreamsL(CMceInSession* aSession)
+ {
+ const RPointerArray<CMceMediaStream>& streams = aSession->Streams();
+
+ if ( streams.Count() == 0 )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ for ( TInt i = 0; i < streams.Count(); ++i )
+ {
+ CDesC8Array* array = new (ELeave) CDesC8ArrayFlat(2);
+ CMceMediaStream* mediaStream =
+ static_cast<CMceMediaStream*>(streams[i]);
+
+ if( mediaStream->Source()->Type() == KMceRTPSource )
+ {
+ array->AppendL(_L8("a=IncomingStream1DL:20\r\n"));
+ array->AppendL(_L8("a=MainStream:40\r\n"));
+ }
+ else
+ {
+ array->AppendL(_L8("a=IncomingStream1UL:20\r\n"));
+ array->AppendL(_L8("a=MainStream:40\r\n"));
+ }
+
+ mediaStream->SetMediaAttributeLinesL( array );
+
+ CDesC8Array* array2 = new (ELeave) CDesC8ArrayFlat(2);
+
+ if( mediaStream->BoundStream() )
+ {
+ CMceMediaStream* boundStream = &mediaStream->BoundStreamL();
+ if( boundStream->Source()->Type() == KMceRTPSource )
+ {
+ array2->AppendL(_L8("a=IncomingStream1DL:20\r\n"));
+ array2->AppendL(_L8("a=BoundStream:40\r\n"));
+ }
+ else
+ {
+ array2->AppendL(_L8("a=IncomingStream1UL:20\r\n"));
+ array2->AppendL(_L8("a=BoundStream:40\r\n"));
+ }
+ boundStream->SetMediaAttributeLinesL( array2 );
+ }
+ }
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::~CMCETestUIEngineInSession
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMCETestUIEngineInSession::~CMCETestUIEngineInSession()
+ {
+ delete iInSession;
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::GetCommands
+// -----------------------------------------------------------------------------
+//
+const RPointerArray<TMCETestUIEngineCmdBase>&
+ CMCETestUIEngineInSession::GetCommandsL()
+ {
+ iCommands.ResetAndDestroy();
+
+ // Get base class commands
+ CMCETestUIEngineSession::GetCommandsL();
+
+ // Get own commands
+ TInt state = iInSession->State();
+
+ switch( state )
+ {
+ case CMceSession::EIncoming:
+ {
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdRejectSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdFCSendSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDeleteSession( iEngine, *this ) );
+
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSendInfo( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDTMFInfo( iEngine, *this ) );
+ iCommands.Append( new ( ELeave )
+ TMCETestUIEngineCmdSendInfoResponse( iEngine, *this ) );
+
+ if(iSession->Type() == KMceSessionSecure)
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdCurrentCryptoContext( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSupportedCryptoContext( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSetCryptoContext( iEngine, *this ) );
+ }
+ break;
+ }
+ case CMceSession::EProceeding:
+ {
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdAcceptSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdRejectSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdRingingSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdRespondSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave) TMCETestUIEngineCmdFCSendSession(
+ iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDeleteSession( iEngine, *this ) );
+
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSendInfo( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDTMFInfo( iEngine, *this ) );
+ iCommands.Append( new ( ELeave )
+ TMCETestUIEngineCmdSendInfoResponse( iEngine, *this ) );
+
+
+ if(iSession->Type() == KMceSessionSecure)
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdCurrentCryptoContext( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSupportedCryptoContext( iEngine, *this ) );
+ }
+
+ break;
+ }
+ case CMceSession::EOffering:
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDeleteSession( iEngine, *this ) );
+
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSendInfo( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDTMFInfo( iEngine, *this ) );
+ iCommands.Append( new ( ELeave )
+ TMCETestUIEngineCmdSendInfoResponse( iEngine, *this ) );
+
+ if(iSession->Type() == KMceSessionSecure)
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdCurrentCryptoContext( iEngine, *this ) );
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdSupportedCryptoContext( iEngine, *this ) );
+ }
+
+ break;
+ }
+ case CMceSession::EEstablished:
+ {
+ if(VideoDirection() != EVideoNotSpesified)
+ {
+ if(iEngine.IsVideoEnabled())
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdDisableReceivingVideoSession( iEngine, *this ) );
+ }
+ else
+ {
+ iCommands.Append( new (ELeave)
+ TMCETestUIEngineCmdEnableReceivingVideoSession( iEngine, *this ) );
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return iCommands;
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::Id
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMCETestUIEngineInSession::Id() const
+ {
+ return iId;
+ }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIEngineInSession::InSession
+// -----------------------------------------------------------------------------
+//
+CMceInSession& CMCETestUIEngineInSession::InSession()
+ {
+ return *iInSession;
+ }
+
+
+