--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccsubcontroller/src/mcculdlclient.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,1063 @@
+/*
+* Copyright (c) 2004-2008 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: UL/DL Session abstraction for Mcc Subthread clients
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32math.h>
+
+#include "mcculdlclient.h"
+
+#include "mmccnetworksettings.h"
+#include "mccsymsubthreadclient.h"
+#include "mcccodecconfigurator.h"
+#include "mccsubcontrollerlogs.h"
+#include "mccrtpmediaclock.h"
+#include "mmccsecureinterface.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::CMccUlDlClient
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CMccUlDlClient::CMccUlDlClient( MMccEventHandler* aMccEventHandler,
+ MMccResources* aMccResources,
+ TUint32 aSessionId ) :
+ iSessionId( aSessionId ),
+ iMccEventHandler( aMccEventHandler ),
+ iMccResources( aMccResources )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CMccUlDlClient::ConstructL()
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::ConstructL" )
+ User::LeaveIfNull( iMccEventHandler );
+ User::LeaveIfNull( iMccResources );
+ iRtpMediaClock = CMccRtpMediaClock::NewL();
+
+ __SUBCONTROLLER( "CMccUlDlClient::ConstructL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::NewL
+// Static constructor.
+// -----------------------------------------------------------------------------
+EXPORT_C CMccUlDlClient* CMccUlDlClient::NewL( MMccEventHandler* aMccEventHandler,
+ MMccResources* aMccResources,
+ TUint32 aSessionId )
+ {
+ CMccUlDlClient* self = new ( ELeave ) CMccUlDlClient( aMccEventHandler,
+ aMccResources,
+ aSessionId );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::~CMccUlDlClient
+// Destructor
+// -----------------------------------------------------------------------------
+EXPORT_C CMccUlDlClient::~CMccUlDlClient()
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::~CMccUlDlClient" )
+
+ iClientArray.ResetAndDestroy();
+ iClientArray.Close();
+
+ delete iRtpMediaClock;
+
+ __SUBCONTROLLER( "CMccUlDlClient::~CMccUlDlClient, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::MaxGainL
+// Returns the maximum gain for uplink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::MaxGainL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt& aMaxGain )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::MaxGainL" )
+ TInt stream = FindLinkL( aLinkId );
+ aMaxGain = iClientArray[stream]->MaxGainL( aStreamId );
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::MaxGainL, exit with MaxGain",
+ aMaxGain )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::MaxVolumeL
+// Returns the mareximum volume for downlink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::MaxVolumeL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt& aMaxVolume )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::MaxVolumeL" )
+ TInt link = FindLinkL( aLinkId );
+ aMaxVolume = iClientArray[link]->MaxVolumeL( aStreamId );
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::MaxVolumeL, exit with\
+MaxVolume", aMaxVolume )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::OpenL
+// Opens ul/dl clients
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::OpenL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt aStreamType,
+ TFourCC aFourCC,
+ MDataSource* aDataSource,
+ MDataSink* aSink,
+ TMMFPrioritySettings aSettings )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::OpenL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamid", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->OpenL( aStreamType, aFourCC,
+ aDataSource, aSink,
+ aStreamId, aSettings );
+ __SUBCONTROLLER( "CMccUlDlClient::OpenL, exit with id" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::PrepareL
+// Prepare ul/dl client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::PrepareL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TUint32 aEndpointId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::PrepareL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient endpointId", aEndpointId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->PrepareL( aStreamId, aEndpointId );
+
+ __SUBCONTROLLER( "CMccUlDlClient::PrepareL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::PlayL
+// Plays ul/dl stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::PlayL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aStreamPaused,
+ TBool aEnableRTCP )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::PlayL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient endpointId", aEndpointId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->PlayL( aStreamId, aEndpointId, aStreamPaused, aEnableRTCP );
+
+ __SUBCONTROLLER( "CMccUlDlClient::PlayL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::PauseL
+// Pauses ul/dl stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::PauseL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aEnableRTCP )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::PauseL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient endpointId", aEndpointId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->PauseL( aStreamId, aEndpointId, aEnableRTCP );
+
+ __SUBCONTROLLER( "CMccUlDlClient::PauseL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::StopL
+// Stops ul/dl stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::StopL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TUint32 aEndpointId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StopL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient endpointId", aEndpointId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->StopL( aStreamId, aEndpointId );
+ __SUBCONTROLLER( "CMccUlDlClient::StopL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::CloseL
+// Closes ul/dl client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::CloseL( const TUint32 aLinkId,
+ const TUint32 aStreamId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::CloseL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt linkId = FindLinkL( aLinkId );
+ iClientArray[linkId]->CloseL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::CloseL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::ResumeL
+// Resumes ul/dl stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::ResumeL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aEnableRTCP )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::ResumeL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient endpointId", aEndpointId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->ResumeL( aStreamId, aEndpointId, aEnableRTCP );
+
+ __SUBCONTROLLER( "CMccUlDlClient::ResumeL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::ResumeL
+// Resumes ul/dl stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CMccUlDlClient::StreamsExistsL( const TUint32 aLinkId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StreamsExistsL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ TInt link = FindLinkL( aLinkId );
+ return iClientArray[link]->StreamsExistsL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetGainL
+// Get the current ul gain
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::GetGainL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt& aGain )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetGainL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ aGain = iClientArray[link]->GetGainL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::GetGainL, exit" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetCodecL
+// Get current codec
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetCodecL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TMccCodecInfo& aCodec )
+ {
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::GetCodecL linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::GetCodecL streamId", aStreamId )
+
+ const TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->CodecInformationL( aStreamId, aCodec );
+
+ __SUBCONTROLLER( "CMccUlDlClient::GetCodecL exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetFmtpAttrL
+// Get current codec
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetFmtpAttrL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TDes8& aFmtp )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetFmtpAttrL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->GetFmtpAttrL( aStreamId, aFmtp );
+ __SUBCONTROLLER( "CMccUlDlClient::GetFmtpAttrL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetPlayBalanceL
+// Returns the play balance of dl client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::GetPlayBalanceL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt& aLeftBalance,
+ TInt& aRightBalance )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetPlayBalanceL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->GetBalanceL( aStreamId, aLeftBalance, aRightBalance );
+ __SUBCONTROLLER( "CMccUlDlClient::GetPlayBalanceL, exit" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetRecordBalanceL
+// Returns the record balance of ul client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::GetRecordBalanceL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt& aLeftBalance,
+ TInt& aRightBalance )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetRecordBalanceL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->GetBalanceL( aStreamId, aLeftBalance, aRightBalance );
+ __SUBCONTROLLER( "CMccUlDlClient::GetRecordBalanceL, exit" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetPriorityL
+// Sets the link priority
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::SetPriorityL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TMMFPrioritySettings aPrioritySettings )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetPriorityL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->SetPrioritySettingsL( aStreamId, aPrioritySettings );
+ __SUBCONTROLLER( "CMccUlDlClient::SetPriorityL, exit" )
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetVolumeL
+// Sets the volume for downlink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::SetVolumeL( TInt aVolume )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetRecordBalanceL" )
+ TInt indexCount = iClientArray.Count();
+ TInt err = KErrNone;
+ TInt i = 0;
+ for ( i = 0 ; i < indexCount ; i++ )
+ {
+ iClientArray[i]->SetVolumeL( aVolume );
+ }
+ __SUBCONTROLLER( "CMccUlDlClient::GetRecordBalanceL, exit" )
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetGainL
+// Sets the gain for uplink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::SetGainL( TInt aGain )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetGainL" )
+ TInt indexCount = iClientArray.Count();
+ TInt err = KErrNone;
+ TInt i = 0;
+ for ( i = 0 ; i < indexCount ; i++ )
+ {
+ iClientArray[i]->SetGainL( aGain );
+ }
+ __SUBCONTROLLER( "CMccUlDlClient::SetGainL, exit" )
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetRecordBalanceL
+// Set the record balance for uplink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SetRecordBalanceL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt aLeftBalance,
+ TInt aRightBalance )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetRecordBalanceL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->SetBalanceL( aStreamId, aLeftBalance, aRightBalance );
+ __SUBCONTROLLER( "CMccUlDlClient::SetRecordBalanceL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetPlayBalanceL
+// Set the record balance for downlink stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SetPlayBalanceL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TInt aLeftBalance,
+ TInt aRightBalance )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetPlayBalanceL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->SetBalanceL( aStreamId, aLeftBalance, aRightBalance );
+ __SUBCONTROLLER( "CMccUlDlClient::SetPlayBalanceL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::CreateLinkL
+// Creates link, 1st step in link creation
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::CreateLinkL( TUint32& aLinkId,
+ TInt aType )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::CreateLinkL" )
+ TInt err( KErrNone );
+
+ switch ( aType )
+ {
+ case KMccLinkGeneral:
+ case KMccLinkGeneralVideo:
+ {
+ CMccSymSubthreadClient* symClient =
+ CMccSymSubthreadClient::NewL( this, iMccResources, aType, iSessionId );
+
+ err = StoreLink( symClient );
+ if ( err == KErrNone )
+ {
+ aLinkId = reinterpret_cast<TUint32>( symClient );
+ symClient->SetLinkId( aLinkId );
+ }
+ else
+ {
+ delete symClient;
+ }
+ break;
+ }
+
+ case KMccLinkLocal:
+ {
+ CMccSymSubthreadClient* symClient =
+ CMccSymSubthreadClient::NewL( this, iMccResources, aType, iSessionId );
+
+ err = StoreLink( symClient );
+ if ( err == KErrNone )
+ {
+ aLinkId = reinterpret_cast<TUint32>( symClient );
+ symClient->SetLinkId( aLinkId );
+ }
+ else
+ {
+ delete symClient;
+ }
+ break;
+ }
+
+ case KMccLinkSecure:
+ case KMccLinkSecureVideo:
+ {
+ CMccSymSubthreadClient* symClient =
+ CMccSymSubthreadClient::NewL( this, iMccResources, aType, iSessionId );
+
+ err = StoreLink( symClient );
+ if ( err == KErrNone )
+ {
+ aLinkId = reinterpret_cast<TUint32>( symClient );
+ symClient->SetLinkId( aLinkId );
+ }
+ else
+ {
+ delete symClient;
+ }
+ break;
+ }
+
+ default:
+ err = KErrNotSupported;
+ break;
+ }
+
+ User::LeaveIfError( err );
+
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::CreateLinkL, exit with id", aLinkId )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::InitializeLinkL
+// Initializes ul and dl links, 2nd step in link creation
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::InitializeLinkL( TRequestStatus& aStatus,
+ TUint32 aLinkId,
+ TInt aIapId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::InitializeLinkL" )
+
+ TInt link = FindLinkL( aLinkId );
+ iClientArray[link]->InitializeLinkL( aStatus, aIapId );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::CreateRtpSessionL
+// Creates RTP session, 3rd step in link creation
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::CreateRtpSessionL( TUint32 aLinkId,
+ TUint aPort,
+ TInt aIpTOS,
+ TInt /*aMediaSignaling*/ )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::CreateRtpSessionL" )
+
+ TInt link = FindLinkL( aLinkId );
+
+ iClientArray[link]->CreateRtpSessionL( aPort,
+ EFalse,
+ aIpTOS,
+ *iRtpMediaClock );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::CloseLinkL
+// Closes ul/dl client
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMccUlDlClient::CloseLinkL( TUint32 aLinkId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::CloseLinkL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ TInt arrayId = FindLinkL( aLinkId );
+ CMccSubThreadClientBase* temp = iClientArray[arrayId];
+ iClientArray[arrayId]->CloseL();
+ iClientArray.Remove( arrayId );
+ delete temp;
+
+ // Notify the interface that an link has been closed
+ TMccEvent event( iSessionId, aLinkId, KNullId, KNullId,
+ KMccEventCategoryStream, KMccStreamClosed, KErrNone, KNullDesC8 );
+ iMccEventHandler->SendMccEventToClient( event );
+
+ __SUBCONTROLLER( "CMccUlDlClient::CloseLinkL, exit" )
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlSubThreadClient::SetRemoteAddressL
+// Sets the remote address for uplink stream
+// -----------------------------------------------------------------------------
+EXPORT_C void CMccUlDlClient::SetRemoteAddressL( TInetAddr aRemAddr,
+ TUint32 aLinkId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetRemoteAddressL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ TInt ind = FindLinkL( aLinkId );
+ iClientArray[ind]->SetRemoteAddressL( aRemAddr );
+ __SUBCONTROLLER( "CMccUlDlClient::SetRemoteAddressL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlSubThreadClient::SetRemoteRtcpAddrL
+// Sets the remote address for uplink stream
+// -----------------------------------------------------------------------------
+EXPORT_C void CMccUlDlClient::SetRemoteRtcpAddrL( TInetAddr aRemAddr,
+ TUint32 aLinkId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetRemoteRtcpAddrL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ TInt ind = FindLinkL( aLinkId );
+ iClientArray[ind]->SetRemoteRtcpAddrL( aRemAddr );
+ __SUBCONTROLLER( "CMccUlDlClient::SetRemoteRtcpAddrL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetCodecDefaultsL
+// Get default codec values
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetCodecDefaultsL(
+ const TUid aType, TDes8& aParam, TMccCodecInfo& aCodec )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetCodecDefaultsL" )
+ MccCodecConfigurator::GetCodecDefaultsL( aType, aParam, aCodec );
+ __SUBCONTROLLER( "CMccUlDlClient::GetCodecDefaultsL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetSessionId()
+// returns the session id
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CMccUlDlClient::GetSessionId()
+ {
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::GetSessionId, id ", iSessionId )
+ return iSessionId;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SendMediaSignalL
+// Send media signal to given stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SendMediaSignalL( const TMccEvent& aEvent )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SendMediaSignalL" )
+ TInt link = FindLinkL( aEvent.iLinkId );
+ iClientArray[link]->SendMediaSignalL( aEvent );
+ __SUBCONTROLLER( "CMccUlDlClient::SendMediaSignalL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetCodecInformationL
+// Set the codec information for the stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SetCodecInformationL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TMccCodecInfo& aCodecInfo,
+ const TDesC8& aFmtp )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetCodecInformationL" )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->SetCodecInformationL( aStreamId, aCodecInfo, aFmtp );
+ __SUBCONTROLLER( "CMccUlDlClient::SetCodecInformationL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetSupportedBitratesL
+// Get the supported bitrates from the codec of the specified stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetSupportedBitratesL( const TUint32 aLinkId,
+ const TUint32 /*aStreamId*/,
+ RArray<TUint>& /*aBitrates*/ )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetSupportedBitratesL" )
+ this->FindLinkL( aLinkId );
+ User::Leave( KErrNotSupported );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetSSRCL
+// Get syncronization source for the specified stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetSSRCL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TUint32& aSSRCValue)
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetSSRCL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->GetSSRCL( aStreamId, aSSRCValue );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SendRTCPReceiverReportL
+// Sends a RTCP receiver report
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SendRTCPReceiverReportL( const TUint32 aLinkId,
+ const TUint32 aStreamId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPReceiverReportL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->SendRTCPReceiverReportL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPReceiverReportL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SendRTCPSenderReportL
+// Sends a RTCP sender report
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SendRTCPSenderReportL( const TUint32 aLinkId,
+ const TUint32 aStreamId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPSenderReportL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->SendRTCPSenderReportL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPSenderReportL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SendRTCPSenderReportL
+// Sends a RTCP sender report
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SendRTCPDataL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ const TDesC8& aData )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPDataL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->SendRTCPDataL( aStreamId, aData );
+ __SUBCONTROLLER( "CMccUlDlClient::SendRTCPDataL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::StartInactivityTimer
+// Starts inactivity timer for a stream in a given link.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::StartInactivityTimerL( const TUint32 aLinkId,
+ const TUint32 aStreamId,
+ TUint32 aTimeoutTime )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StartInactivityTimerL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->StartInactivityTimerL( aStreamId, aTimeoutTime );
+ __SUBCONTROLLER( "CMccUlDlClient::StartInactivityTimerL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::StopInactivityTimer
+// Stops inactivity timer for a stream in a given link.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::StopInactivityTimerL( const TUint32 aLinkId,
+ const TUint32 aStreamId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StopInactivityTimerL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[link]->StopInactivityTimerL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::StopInactivityTimerL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetAudioRouteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SetAudioRouteL(
+ TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32 aRoutingDestination )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetAudioRouteL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[ link ]->SetAudioRouteL( aStreamId, aRoutingDestination );
+ __SUBCONTROLLER( "CMccUlDlClient::StopInactivityTimerL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetAudioRouteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetAudioRouteL(
+ TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32& aRoutingDestination )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetAudioRouteL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt link = this->FindLinkL( aLinkId );
+ iClientArray[ link ]->GetAudioRouteL( aStreamId, aRoutingDestination );
+ __SUBCONTROLLER( "CMccUlDlClient::StopInactivityTimerL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GenerateStreamId
+// Generates a new stream identifier
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CMccUlDlClient::GenerateStreamId()
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GenerateStreamId" )
+ TUint32 id = 0;
+
+ while( id == 0 )
+ {
+ id = static_cast<TUint32>( Math::Random() );
+ }
+
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::GenerateStreamId, exit with id", id )
+ return id;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::UnuseL
+// Ususes stream
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::UnuseL(
+ const TUint32 aLinkId,
+ const TUint32 aStreamId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::UnuseL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt linkId = FindLinkL( aLinkId );
+ iClientArray[linkId]->UnuseL( aStreamId );
+ __SUBCONTROLLER( "CMccUlDlClient::UnuseL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetLocalIpAddressesL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::GetLocalIpAddressesL(
+ TMccCreateLink& aClientData )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetLocalIpAddressesL" )
+
+ TInt linkId = FindLinkL( aClientData.iLinkID );
+ iClientArray[linkId]->GetLocalIpAddressesL( aClientData );
+
+ __SUBCONTROLLER( "CMccUlDlClient::GetLocalIpAddressesL, exit" )
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SendMccEventToClient
+// -----------------------------------------------------------------------------
+//
+TInt CMccUlDlClient::SendMccEventToClient( TMccEvent& aEvent )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SendMccEventToClient" )
+
+ aEvent.iSessionId = iSessionId;
+
+ return iMccEventHandler->SendMccEventToClient( aEvent );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::StateChange
+// -----------------------------------------------------------------------------
+//
+void CMccUlDlClient::StateChange( TInt aState, TUint32 aLinkId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StateChange" )
+
+ iMccEventHandler->StateChange( aState, aLinkId );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::ErrorOccured
+// -----------------------------------------------------------------------------
+//
+void CMccUlDlClient::ErrorOccured(
+ TInt aError,
+ TUint32 /*aSessionId*/,
+ TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32 aEndpointId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::ErrorOccured" )
+
+ // Probably caller don't know the session id, so fill it here
+ iMccEventHandler->ErrorOccured( aError,
+ iSessionId,
+ aLinkId,
+ aStreamId,
+ aEndpointId );
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::FindLinkL
+// finds correct link to handle
+// -----------------------------------------------------------------------------
+//
+TInt CMccUlDlClient::FindLinkL( const TUint32 aLinkId )
+ {
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::FindLinkL, linkid", aLinkId )
+ TInt err = KErrNotFound;
+ TInt index = 0;
+ TBool flagFound = EFalse;
+
+ for ( TInt i = 0; i < iClientArray.Count() && flagFound == EFalse ; i++ )
+ {
+ TUint32 linkId = reinterpret_cast<TUint32>(iClientArray[i]);
+
+ if( linkId == aLinkId )
+ {
+ index = i;
+ err = KErrNone;
+ flagFound = ETrue;
+ }
+ }
+
+ if ( KErrNotFound == err )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::FindLinkL, Link not found" )
+ User::Leave( err );
+ }
+
+ __SUBCONTROLLER( "CMccUlDlClient::FindLinkL, exit" )
+ return index;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::StoreDlStream()
+// stores the pointer to ul/dl stream
+// -----------------------------------------------------------------------------
+//
+TInt CMccUlDlClient::StoreLink( CMccSubThreadClientBase* aClient )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::StoreLink" )
+ TInt err = KErrNone;
+ err = iClientArray.Append( aClient );
+ __SUBCONTROLLER_INT1( "CMccUlDlClient::StoreLink, exit with", err )
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::BindContextIntoStreamL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::BindContextIntoStreamL( TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32 aEndpointId,
+ const TMccCryptoContext& aCryptoContext )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::BindContextIntoStreamL, IN ")
+
+ TInt link = FindLinkL( aLinkId );
+
+ iClientArray[link]->BindContextIntoStreamL( aStreamId, aEndpointId, aCryptoContext );
+
+ __SUBCONTROLLER( "CMccUlDlClient::BindContextIntoStreamL, EXIT ")
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::RemoveContextL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::RemoveContextL( TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32 aEndpointId )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::RemoveContextL, IN ")
+
+ TInt link = FindLinkL( aLinkId );
+
+ iClientArray[link]->RemoveContextL( aStreamId, aEndpointId );
+
+ __SUBCONTROLLER( "CMccUlDlClient::RemoveContextL, EXIT ")
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::SetParameterL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMccUlDlClient::SetParameterL(
+ TUint32 aParam,
+ TUint32 aLinkId,
+ TUint32 aStreamId,
+ TUint32 aEndpointId,
+ const TDesC8& aVal )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::SetParameterL" )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient linkid", aLinkId )
+ __SUBCONTROLLER_INT1( "CMccUlDlClient streamId", aStreamId )
+ TInt linkId = FindLinkL( aLinkId );
+ iClientArray[linkId]->SetParameterL( aParam, aStreamId, aEndpointId, aVal );
+ __SUBCONTROLLER( "CMccUlDlClient::SetParameterL, exit" )
+ }
+
+// -----------------------------------------------------------------------------
+// CMccUlDlClient::GetParameterL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void GetParameterL(
+ TUint32 /*aParam*/,
+ TUint32 /*aLinkId*/,
+ TUint32 /*aStreamId*/,
+ TUint32 /*aEndpointId*/,
+ TDesC8& /*aVal*/ )
+ {
+ __SUBCONTROLLER( "CMccUlDlClient::GetParameterL" )
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// End of File