multimediacommsengine/tsrc/mccstub/src/mmccinterface_stub.cpp
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Mcc Interface
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "MmccInterface_stub.h"
       
    21 #include "CMccController_stub.h"
       
    22 #include <MmccNetworkSettings.h>
       
    23 #include <mmccevents.h>
       
    24 #include "MmccCodecAMR.h"
       
    25 #include "MmccCodecDTMF.h"
       
    26 #include <MmccCodecInformation.h>
       
    27 #include <MmccCodecInformationFactory.h>
       
    28 #include "MmccInterfaceLogs.h"
       
    29 #include <ECam.h>
       
    30 
       
    31 
       
    32 // These have to be same as in rtpdef.h, but can not include rtpdef.h here,
       
    33 // since that results compilation errors for redefinition of TRtpPeerStat and
       
    34 // TTimeStamps
       
    35 //typedef TUint32 TRtpId;
       
    36 //const TRtpId KNullId = 0xffffffff;
       
    37 
       
    38 
       
    39 
       
    40 const TUid KImplementMccController  = { 0 };
       
    41 
       
    42 // EXTERNAL DATA STRUCTURES
       
    43 
       
    44 // EXTERNAL FUNCTION PROTOTYPES  
       
    45 
       
    46 // CONSTANTS
       
    47 
       
    48 // MACROS
       
    49 
       
    50 // LOCAL CONSTANTS AND MACROS
       
    51 
       
    52 // MODULE DATA STRUCTURES
       
    53 
       
    54 // LOCAL FUNCTION PROTOTYPES
       
    55 
       
    56 // FORWARD DECLARATIONS
       
    57 
       
    58 
       
    59 // ============================= LOCAL FUNCTIONS ===============================
       
    60 
       
    61 
       
    62 // ============================ MEMBER FUNCTIONS ===============================
       
    63 
       
    64 // ---------------------------------------------------------------------------
       
    65 // CMccInterface::CMccInterface
       
    66 // C++ default constructor can NOT contain any code, that
       
    67 // might leave.
       
    68 // ---------------------------------------------------------------------------
       
    69 //
       
    70 CMccInterface::CMccInterface() 
       
    71     {
       
    72     }
       
    73 
       
    74 // ---------------------------------------------------------------------------
       
    75 // CMccInterface::ConstructL
       
    76 // Symbian 2nd phase constructor can leave.
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 void CMccInterface::ConstructL( MMccCtrlObserver& aObserver )
       
    80     {
       
    81 	__INTERFACE( "MccInterface::ConstructL" )
       
    82     TInt err = KErrNone;
       
    83    
       
    84     // Open Controller
       
    85     err = OpenController( KImplementMccController );
       
    86     if ( err )
       
    87         {
       
    88         User::Leave( err );
       
    89         }
       
    90 
       
    91 
       
    92 	// No need to ask CMccControllerStub here, since OpenController() created
       
    93 	// it when necessary.
       
    94     iController->iObserver = &aObserver;
       
    95 
       
    96     //iMccEvent = CMccEvent::NewL( iController, aObserver );
       
    97     //iMccEvent->RequestEventNotification();
       
    98 
       
    99 	CapabilitiesL();
       
   100 	__INTERFACE( "MccInterface::ConstructL, exit" )
       
   101     }
       
   102 
       
   103 // ---------------------------------------------------------------------------
       
   104 // CMccInterface::NewL()
       
   105 // Static constructor.
       
   106 // ---------------------------------------------------------------------------
       
   107 //
       
   108 EXPORT_C CMccInterface* CMccInterface::NewL( MMccCtrlObserver& aObserver )
       
   109     {
       
   110     CMccInterface* self = new(ELeave) CMccInterface();
       
   111     CleanupStack::PushL( self );
       
   112     self->ConstructL( aObserver );
       
   113     CleanupStack::Pop( self );
       
   114     return self;
       
   115     }
       
   116 
       
   117 // ---------------------------------------------------------------------------
       
   118 // CMccInterface::~CMccInterface()
       
   119 // Destructor
       
   120 // ---------------------------------------------------------------------------
       
   121 //
       
   122 CMccInterface::~CMccInterface()
       
   123     {
       
   124 	__INTERFACE( "MccInterface::~CMccInterface" )
       
   125 
       
   126 	// Always ask controller stub, since if there are multiple CMccInterface
       
   127 	// instances, and one of them closes controller, the other CMccInterface
       
   128 	// instances wouldn't know it.
       
   129 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   130 	if ( ctrl )
       
   131 		{
       
   132 		ctrl->Close();
       
   133 		}
       
   134 
       
   135     iCodecInformation.ResetAndDestroy();
       
   136     iCodecInformation.Close();
       
   137 	__INTERFACE( "MccInterface::~CMccInterface, exit" )
       
   138     }
       
   139 
       
   140 // -----------------------------------------------------------------------------
       
   141 // CMccInterface::CapabilitiesL()
       
   142 // Get supported codecs from controller.
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 void CMccInterface::CapabilitiesL()
       
   146     {
       
   147 	__INTERFACE( "MccInterface::CapabilitiesL" )
       
   148     RArray<TFourCC> codecs;     
       
   149     CleanupClosePushL( codecs );       
       
   150     CMccCodecInformationFactory* codecFactory = CMccCodecInformationFactory::NewL();
       
   151     CleanupStack::PushL( codecFactory );
       
   152     
       
   153     User::LeaveIfError( GetSupportedCodecs( codecs ) );
       
   154 
       
   155     TFourCC fourCCValue;
       
   156     
       
   157 	__INTERFACE_INT1( "MccInterface::CapabilitiesL, count of found codecs:", codecs.Count() )
       
   158     for ( TInt k = 0; k < codecs.Count(); k++ )
       
   159         {
       
   160         fourCCValue = codecs[k];
       
   161         
       
   162         CMccCodecInformation* codec = codecFactory->CreateCodecInformationL( fourCCValue );
       
   163         if ( codec )
       
   164             {
       
   165             CleanupStack::PushL( codec );
       
   166 			__INTERFACE_STR8( "MccInterface::CapabilitiesL, appending:", codec->SdpName() )
       
   167             iCodecInformation.AppendL( codec );            
       
   168             CleanupStack::Pop( codec );
       
   169             }
       
   170         }
       
   171     
       
   172     
       
   173     CleanupStack::PopAndDestroy( codecFactory );
       
   174     CleanupStack::PopAndDestroy( &codecs );
       
   175     
       
   176 	__INTERFACE( "MccInterface::CapabilitiesL, exit" )
       
   177     }
       
   178     
       
   179 // -----------------------------------------------------------------------------
       
   180 // CMccInterface::GetSupportedCodecs()
       
   181 // Get supported codecs.
       
   182 // -----------------------------------------------------------------------------
       
   183 //
       
   184 TInt CMccInterface::GetSupportedCodecs( RArray<TFourCC>& aCodecs )
       
   185     {
       
   186 	__INTERFACE( "MccInterface::GetSupportedCodecs" )
       
   187 	
       
   188 
       
   189 	// Always ask controller stub, since if there are multiple CMccInterface
       
   190 	// instances, and one of them closes controller, the other CMccInterface
       
   191 	// instances wouldn't know it.
       
   192 	TInt err( KErrNone );
       
   193 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   194 	if ( ctrl )
       
   195 		{
       
   196 		err = ctrl->ControllerCalled( CMccControllerStub::EMccGetSupportedCodecs );
       
   197 		}
       
   198 	else
       
   199 		{
       
   200 		return KErrNotFound;
       
   201 		}
       
   202 
       
   203 /*    
       
   204     TMccSession session;
       
   205     
       
   206     TInt count = session.iFourCCArray.Count();
       
   207     for ( TInt i = 0; i < count; i++)
       
   208         {
       
   209         session.iFourCCArray[i] = NULL;
       
   210         }
       
   211 
       
   212     TMccSessionPckg package( session );
       
   213 
       
   214     err = iController.CustomCommandSync( iMessageDest,
       
   215                                          EMccGetSupportedCodecs,
       
   216                                          package,
       
   217                                          KNullDesC8,
       
   218                                          package );
       
   219 
       
   220     if ( !err ) 
       
   221         {
       
   222         count =  package().iFourCCArray.Count();
       
   223 		__INTERFACE_INT1( "MccInterface::GetSupportedCodecs, found", count )
       
   224         for( TInt i = 0; i < count; i++ )
       
   225             {
       
   226             if ( package().iFourCCArray[i] != NULL )
       
   227                 {
       
   228                 aCodecs.Append( package().iFourCCArray[i] );
       
   229                 }
       
   230             }
       
   231         }
       
   232   */
       
   233   
       
   234     if ( !err )
       
   235         {
       
   236         err = aCodecs.Append( KMccFourCCIdAMRNB );
       
   237         if ( !err )
       
   238             {
       
   239             err = aCodecs.Append( KMccFourCCIdH263 );
       
   240             }
       
   241         }
       
   242     
       
   243     
       
   244 	__INTERFACE_INT1( "MccInterface::GetSupportedCodecs, exit with ", err )
       
   245     return err;
       
   246     }
       
   247 
       
   248 // -----------------------------------------------------------------------------
       
   249 // CMccInterface::OpenController()
       
   250 // Opens Mcc Controller
       
   251 // -----------------------------------------------------------------------------
       
   252 //
       
   253 TInt CMccInterface::OpenController( const TUid& /*aControllerUid*/ )
       
   254     {
       
   255 	__INTERFACE( "MccInterface::OpenController" )
       
   256     
       
   257     TRAPD( error, CMccControllerStub::OpenL() );
       
   258     iController = CMccControllerStub::Stub();
       
   259     
       
   260     if ( iController && !error )
       
   261         {
       
   262         error = iController->iLeaveError; 
       
   263         }
       
   264         
       
   265     /*
       
   266     TMMFPrioritySettings settings;
       
   267     settings.iPriority = EPriorityNormal;
       
   268 
       
   269     error = iController.Open( aControllerUid, settings );
       
   270     if ( error )
       
   271         {
       
   272         iController.Close();
       
   273         }
       
   274     */
       
   275 	__INTERFACE_INT1( "MccInterface::OpenController, exit with", error)
       
   276     return error;
       
   277     }
       
   278 
       
   279 // ---------------------------------------------------------------------------
       
   280 // CMccInterface::SetRemoteAddress
       
   281 // Set remote IP address and port number for a given RTP session.
       
   282 // ---------------------------------------------------------------------------
       
   283 //
       
   284 EXPORT_C TInt CMccInterface::SetRemoteAddress(  TUint32 aSessionId, TUint32 aLinkId,
       
   285                                                const TInetAddr& /*aRemoteAddr*/, 
       
   286                                                TUint /*aRemoteRtcpPort*/ )
       
   287     {
       
   288 	__INTERFACE( "MccInterface::SetRemoteAddress" )
       
   289 	
       
   290 	// Always ask controller stub, since if there are multiple CMccInterface
       
   291 	// instances, and one of them closes controller, the other CMccInterface
       
   292 	// instances wouldn't know it.
       
   293 	TInt err( KErrNotFound );
       
   294 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   295 	if ( ctrl )
       
   296 		{
       
   297 		err = ctrl->ControllerCalled( CMccControllerStub::EMccSetRemoteAddress,
       
   298 									  aSessionId,
       
   299 									  aLinkId );
       
   300 		}
       
   301     /*
       
   302     TMccAddress addr;
       
   303     addr.iSessionID = aSessionId;
       
   304     addr.iLinkID = aLinkId;
       
   305     addr.iAddress = aRemoteAddr;
       
   306     TMccAddressPckg package( addr );
       
   307 
       
   308     err = iController.CustomCommandSync( iMessageDest,
       
   309                                          EMccSetRemoteAddress,
       
   310                                          package,
       
   311                                          KNullDesC8 );
       
   312     */
       
   313 	__INTERFACE_INT1( "MccInterface::SetRemoteAddress, exit with ", err )
       
   314     return err;
       
   315     }
       
   316 
       
   317 // ---------------------------------------------------------------------------
       
   318 // CMccInterface::CreateSession
       
   319 // Creates a new RTP session with a remote participant.
       
   320 // ---------------------------------------------------------------------------
       
   321 //
       
   322 EXPORT_C TInt CMccInterface::CreateSession( TUint32& aSessionId )
       
   323     {
       
   324 	__INTERFACE( "MccInterface::CreateSession" )
       
   325 	
       
   326 	// Always ask controller stub, since if there are multiple CMccInterface
       
   327 	// instances, and one of them closes controller, the other CMccInterface
       
   328 	// instances wouldn't know it.
       
   329 	TInt result( KErrNotFound );
       
   330 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   331 	if ( ctrl )
       
   332 		{
       
   333 		result = ctrl->ControllerCalled( CMccControllerStub::EMccCreateSession );
       
   334 		aSessionId = ctrl->NextSessionId();
       
   335 		__INTERFACE_INT1( "MccInterface::CreateSession, sesid ", aSessionId )
       
   336 		}
       
   337 	
       
   338 	/*
       
   339     TMccCreateSession pktSession;
       
   340     TMccCreateSessionPckg package( pktSession );
       
   341 
       
   342     TInt result = iController.CustomCommandSync( iMessageDest,
       
   343                                                  EMccCreateSession,
       
   344                                                  package,
       
   345                                                  KNullDesC8,
       
   346                                                  package );
       
   347 
       
   348     if ( result == KErrNone )
       
   349         {
       
   350         aSessionId = package().iSessionID;
       
   351         }
       
   352     */
       
   353 	__INTERFACE_INT1( "MccInterface::CreateSession, exit with ", result )
       
   354     return result;
       
   355     }
       
   356 
       
   357 // ---------------------------------------------------------------------------
       
   358 // CMccInterface::CreateLink
       
   359 // Creates a new Mcc link with a remote participant.
       
   360 // ---------------------------------------------------------------------------
       
   361 //
       
   362 EXPORT_C TInt CMccInterface::CreateLink( TUint32 aSessionId,
       
   363                                          TInt aLinkType,
       
   364                                          TUint32& aLinkId,
       
   365                                          TMccNetSettings& /*aNetSettings*/ )
       
   366     {    
       
   367 	__INTERFACE( "MccInterface::CreateLink")
       
   368 	
       
   369 	// Always ask controller stub, since if there are multiple CMccInterface
       
   370 	// instances, and one of them closes controller, the other CMccInterface
       
   371 	// instances wouldn't know it.
       
   372 	TInt result( KErrNotFound );
       
   373 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   374 	if ( ctrl )
       
   375 		{
       
   376 		result = ctrl->ControllerCalled( CMccControllerStub::EMccCreateLink,
       
   377 				                  		aSessionId,
       
   378 				                  		KMceNotAssigned,
       
   379 				                  		KMceNotAssigned,
       
   380 				                  		KMceNotAssigned,
       
   381 				                  		aLinkType );
       
   382 		aLinkId = ctrl->NextLinkId();
       
   383 		__INTERFACE_INT1( "MccInterface::CreateLink, lid ", aLinkId )
       
   384 		}
       
   385 
       
   386     /*	
       
   387     TMccCreateLink pktLink;
       
   388     pktLink.iSessionID = aSessionId;
       
   389     pktLink.iLinkType = aLinkType;
       
   390     pktLink.iIapId = aNetSettings.iIapId;
       
   391     pktLink.iAddress = aNetSettings.iRemoteAddress;
       
   392     pktLink.iPort = aNetSettings.iLocalPort;
       
   393     pktLink.iMediaSignaling = aNetSettings.iMediaSignalling;
       
   394 
       
   395     TMccCreateLinkPckg package( pktLink );
       
   396 
       
   397     TInt result = iController.CustomCommandSync( iMessageDest,
       
   398                                                  EMccCreateLink,
       
   399                                                  package,
       
   400                                                  KNullDesC8,
       
   401                                                  package );
       
   402 
       
   403     if ( result == KErrNone )
       
   404         {
       
   405         aNetSettings.iLocalPort = package().iPort;
       
   406         aLinkId = package().iLinkID;
       
   407         }*/
       
   408 
       
   409 	__INTERFACE_INT1( "MccInterface::CreateLink, exit with ", result )
       
   410     return result;
       
   411     }
       
   412 
       
   413 // ---------------------------------------------------------------------------
       
   414 // CMccInterface::CloseSession
       
   415 // Closes RTP session.
       
   416 // ---------------------------------------------------------------------------
       
   417 //
       
   418 EXPORT_C TInt CMccInterface::CloseSession( TUint32 aSessionId )
       
   419     {
       
   420 	__INTERFACE_INT1( "MccInterface::CloseSession, sesid ", aSessionId )
       
   421 
       
   422 	// Always ask controller stub, since if there are multiple CMccInterface
       
   423 	// instances, and one of them closes controller, the other CMccInterface
       
   424 	// instances wouldn't know it.
       
   425 	TInt err( KErrNotFound );
       
   426 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   427 	if ( ctrl )
       
   428 		{
       
   429 		err = ctrl->ControllerCalled( CMccControllerStub::EMccCloseSession,
       
   430 									  aSessionId );
       
   431 		}
       
   432 /*    
       
   433     TMccSession sessID;
       
   434     sessID.iSessionID = aSessionId;
       
   435     TMccSessionPckg package( sessID );
       
   436 
       
   437     err = iController.CustomCommandSync( iMessageDest,
       
   438                                          EMccCloseSession,
       
   439                                          package,
       
   440                                          KNullDesC8 );
       
   441 */
       
   442                                          
       
   443 	__INTERFACE_INT1( "MccInterface::CloseSession, exit with ", err )
       
   444     return err;
       
   445     }
       
   446 
       
   447 // ---------------------------------------------------------------------------
       
   448 // CMccInterface::CloseLink
       
   449 // Closes Mcc link.
       
   450 // ---------------------------------------------------------------------------
       
   451 //
       
   452 EXPORT_C TInt CMccInterface::CloseLink( TUint32 aSessionId, TUint32 aLinkId )
       
   453     {
       
   454 	__INTERFACE_INT1( "MccInterface::CloseLink, lid ", aLinkId )
       
   455 	
       
   456 	// Always ask controller stub, since if there are multiple CMccInterface
       
   457 	// instances, and one of them closes controller, the other CMccInterface
       
   458 	// instances wouldn't know it.
       
   459 	TInt err( KErrNotFound );
       
   460 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   461 	if ( ctrl )
       
   462 		{
       
   463 		err = ctrl->ControllerCalled( CMccControllerStub::EMccCloseLink,
       
   464 									  aSessionId,
       
   465 									  aLinkId );
       
   466 		}
       
   467 
       
   468     /*
       
   469     TMccGenericMessage message;
       
   470     message.iSessionID = aSessionId;
       
   471     message.iLinkID = aLinkId;
       
   472     TMccGenericMsgBuffer package( message );
       
   473 
       
   474     err = iController.CustomCommandSync( iMessageDest,
       
   475                                          EMccCloseLink,
       
   476                                          package,
       
   477                                          KNullDesC8 );
       
   478     */                                         
       
   479 	__INTERFACE_INT1( "MccInterface::CloseLink, exit with ", err )
       
   480     return err;
       
   481     }
       
   482 
       
   483 // ---------------------------------------------------------------------------
       
   484 // CMccInterface::CreateStream
       
   485 // Creates a stream to a RTP session.
       
   486 // ---------------------------------------------------------------------------
       
   487 //
       
   488 EXPORT_C TInt CMccInterface::CreateStream( TUint32 aSessionId, 
       
   489                                            TUint32 aLinkId,
       
   490                                            TUint32& aStreamId,
       
   491                                            TInt aStreamType,
       
   492                                            CMccCodecInformation& aCodecInformation )
       
   493     {
       
   494 	__INTERFACE( "MccInterface::CreateStream" )
       
   495 
       
   496 	// Always ask controller stub, since if there are multiple CMccInterface
       
   497 	// instances, and one of them closes controller, the other CMccInterface
       
   498 	// instances wouldn't know it.
       
   499 	TInt err( KErrNotFound );
       
   500 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   501 	if ( ctrl )
       
   502 		{
       
   503 		err = ctrl->ControllerCalled( CMccControllerStub::EMccCreateStream,
       
   504 									  aSessionId, 
       
   505                                       aLinkId,
       
   506                                       KMceNotAssigned,
       
   507                                       KMceNotAssigned, 
       
   508                                       KMceNotAssigned,
       
   509                                       aStreamType );
       
   510 		aStreamId = ctrl->NextStreamId();
       
   511 		__INTERFACE_INT1( "MccInterface::CreateStream, sid ", aStreamId )
       
   512 		}
       
   513     
       
   514     /*
       
   515     TMccGenericMessage genMessage;
       
   516     genMessage.iSessionID = aSessionId;
       
   517     genMessage.iLinkID = aLinkId;
       
   518         
       
   519     TMccGenericMsgBuffer msgBuffer( genMessage );
       
   520     TMccCreateStreamParam message;
       
   521     message.iPayloadType = aCodecInformation->PayloadType();
       
   522     message.iFourCC = aCodecInformation->FourCC();
       
   523     message.iStreamType = aStreamType;
       
   524     message.iPrioritySettings.iPriority = aCodecInformation->Priority();
       
   525     message.iPrioritySettings.iPref =
       
   526     	TMdaPriorityPreference( aCodecInformation->PriorityPreference() );
       
   527     TMccCreateStreamParamPckg messagePckg( message );
       
   528      
       
   529     TInt err = iController.CustomCommandSync( iMessageDest, EMccCreateStream,
       
   530                                          msgBuffer, messagePckg,
       
   531                                          msgBuffer );
       
   532 
       
   533 	if( err != KErrNone )
       
   534 	    {
       
   535         return err;
       
   536 	    }
       
   537 
       
   538     aStreamId = msgBuffer().iStreamID;
       
   539     */
       
   540     
       
   541     err = this->SetCodec( aSessionId, aLinkId, aStreamId, aCodecInformation );
       
   542 	    
       
   543 	__INTERFACE_INT1( "MccInterface::CreateStream, exit with ", err )
       
   544     return err;
       
   545     }
       
   546 
       
   547 // ---------------------------------------------------------------------------
       
   548 // CMccInterface::DeleteStream
       
   549 // Deletes media stream in a given session.
       
   550 // ---------------------------------------------------------------------------
       
   551 //
       
   552 EXPORT_C TInt CMccInterface::DeleteStream( TUint32 aSessionId, 
       
   553                                            TUint32 aLinkId, 
       
   554 				                           TUint32 aStreamId )
       
   555     {
       
   556 	__INTERFACE_INT1( "MccInterface::DeleteStream, sid ", aStreamId )
       
   557 	
       
   558 	// Always ask controller stub, since if there are multiple CMccInterface
       
   559 	// instances, and one of them closes controller, the other CMccInterface
       
   560 	// instances wouldn't know it.
       
   561 	TInt err( KErrNotFound );
       
   562 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   563 	if ( ctrl )
       
   564 		{
       
   565 		err = ctrl->ControllerCalled( CMccControllerStub::EMccDeleteStream,
       
   566 									  aSessionId, 
       
   567                                       aLinkId,
       
   568                                       aStreamId,
       
   569                                       0 );
       
   570 		}
       
   571 
       
   572     /*
       
   573     TMccSession sessID;
       
   574     sessID.iSessionID = aSessionId;
       
   575     sessID.iLinkID = aLinkId;
       
   576     sessID.iStreamID = aStreamId;
       
   577     sessID.iEndpointID = aSinkSourceId;
       
   578     TMccSessionPckg package( sessID );
       
   579 
       
   580     err = iController.CustomCommandSync( iMessageDest,
       
   581                                          EMccDeleteStream,
       
   582                                          package,
       
   583                                          KNullDesC8 );
       
   584     */
       
   585     
       
   586 	__INTERFACE_INT1( "MccInterface::DeleteStream, exit with ", err )
       
   587     return err;
       
   588     }
       
   589 
       
   590 // ---------------------------------------------------------------------------
       
   591 // CMccInterface::StartInactivityTimer
       
   592 // Starts inactivity timer for a stream in a given session.
       
   593 // ---------------------------------------------------------------------------
       
   594 //
       
   595 EXPORT_C TInt CMccInterface::StartInactivityTimer( TUint32 aSessionId,
       
   596                                                    TUint32 aLinkId,
       
   597                                                    TUint32 aStreamId,
       
   598                                                    TUint32 /*aTimeoutTime*/,
       
   599                                                    TUint32 aEndpointId )
       
   600     {
       
   601 	__INTERFACE( "MccInterface::StartInactivityTimer" )
       
   602 	
       
   603 	// Always ask controller stub, since if there are multiple CMccInterface
       
   604 	// instances, and one of them closes controller, the other CMccInterface
       
   605 	// instances wouldn't know it.
       
   606 	TInt err( KErrNotFound );
       
   607 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   608 	if ( ctrl )
       
   609 		{
       
   610 		err = ctrl->ControllerCalled( CMccControllerStub::EMccInactivityTimerStart, 
       
   611                                       aSessionId,
       
   612                                       aLinkId,
       
   613                                       aStreamId,
       
   614                                       aEndpointId );
       
   615 		}
       
   616 
       
   617     /*	
       
   618     TMccInactivityTimer inactivityTimer;
       
   619     inactivityTimer.iSessionID = aSessionId;
       
   620     inactivityTimer.iLinkID = aLinkId;
       
   621     inactivityTimer.iStreamID = aStreamId;
       
   622     inactivityTimer.iTimeoutTime = aTimeoutTime;
       
   623     TMccInactivityTimerPckg package( inactivityTimer );
       
   624     
       
   625     TInt err = iController.CustomCommandSync( iMessageDest,
       
   626                                               EMccInactivityTimerStart,
       
   627                                               package,
       
   628                                               KNullDesC8 );
       
   629 	*/
       
   630     
       
   631 	__INTERFACE_INT1( "MccInterface::StartInactivityTimer, exit with ", err )
       
   632     return err;
       
   633     } 
       
   634 
       
   635 // ---------------------------------------------------------------------------
       
   636 // CMccInterface::StopInactivityTimer
       
   637 // Stops inactivity timer for a stream in a given session.
       
   638 // ---------------------------------------------------------------------------
       
   639 //
       
   640 EXPORT_C TInt CMccInterface::StopInactivityTimer( TUint32 aSessionId,
       
   641                                                   TUint32 aLinkId,
       
   642                                                   TUint32 aStreamId,
       
   643                                                   TUint32 aEndpointId )
       
   644     {
       
   645 	__INTERFACE( "MccInterface::StopInactivityTimer" )
       
   646 
       
   647 	// Always ask controller stub, since if there are multiple CMccInterface
       
   648 	// instances, and one of them closes controller, the other CMccInterface
       
   649 	// instances wouldn't know it.
       
   650 	TInt err( KErrNotFound );
       
   651 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   652 	if ( ctrl )
       
   653 		{
       
   654 		err = ctrl->ControllerCalled( CMccControllerStub::EMccInactivityTimerStop, 
       
   655                                       aSessionId,
       
   656                                       aLinkId,
       
   657                                       aStreamId,
       
   658                                       aEndpointId );
       
   659 		}
       
   660 
       
   661     /*	
       
   662     TMccGenericMessage genMessage;
       
   663     genMessage.iSessionID = aSessionId;
       
   664     genMessage.iLinkID = aLinkId;
       
   665     genMessage.iStreamID = aStreamId;
       
   666     TMccGenericMsgBuffer msgBuffer( genMessage );
       
   667     
       
   668     TInt err = iController.CustomCommandSync( iMessageDest,
       
   669                                               EMccInactivityTimerStop,
       
   670                                               msgBuffer,
       
   671                                               KNullDesC8 );
       
   672 	*/
       
   673 
       
   674 	__INTERFACE_INT1( "MccInterface::StopInactivityTimer, exit with ", err )
       
   675     return err;
       
   676     }
       
   677 
       
   678 // ---------------------------------------------------------------------------
       
   679 // CMccInterface::PrepareStream
       
   680 // Prepares a stream so that it is ready to be started.
       
   681 // ---------------------------------------------------------------------------
       
   682 //
       
   683 EXPORT_C TInt CMccInterface::PrepareStream( TUint32 aSessionId, 
       
   684                                             TUint32 aLinkId, 
       
   685 				                            TUint32 aStreamId,
       
   686 				                            TUint32 aSinkSourceId )
       
   687     {
       
   688 	__INTERFACE_INT1( "MccInterface::PrepareStream, sid", aStreamId )
       
   689 
       
   690 	// Always ask controller stub, since if there are multiple CMccInterface
       
   691 	// instances, and one of them closes controller, the other CMccInterface
       
   692 	// instances wouldn't know it.
       
   693 	TInt err( KErrNotFound );
       
   694 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   695 	if ( ctrl )
       
   696 		{
       
   697 		err = ctrl->ControllerCalled( CMccControllerStub::EMccPrepareStream,
       
   698 									  aSessionId, 
       
   699                                       aLinkId,
       
   700                                       aStreamId,
       
   701                                       aSinkSourceId );
       
   702 		}
       
   703 
       
   704     /*	
       
   705     TInt err = KErrNone;
       
   706     TMccSession sessID;
       
   707     sessID.iSessionID = aSessionId;
       
   708     sessID.iLinkID = aLinkId;
       
   709     sessID.iStreamID = aStreamId;
       
   710     sessID.iEndpointID = aSinkSourceId;
       
   711     TMccSessionPckg package( sessID );
       
   712 
       
   713     err = iController.CustomCommandSync( iMessageDest,
       
   714                                          EMccPrepareStream,
       
   715                                          package,
       
   716                                          KNullDesC8 );
       
   717     */
       
   718     
       
   719 	__INTERFACE_INT1( "MccInterface::PrepareStream, exit with ", err )
       
   720     return err;
       
   721     }
       
   722 
       
   723 // ---------------------------------------------------------------------------
       
   724 // CMccInterface::StartStream
       
   725 // Starts to send/receive media stream in a given session.
       
   726 // ---------------------------------------------------------------------------
       
   727 //
       
   728 EXPORT_C TInt CMccInterface::StartStream( TUint32 aSessionId, 
       
   729                                           TUint32 aLinkId, 
       
   730 				                          TUint32 aStreamId,
       
   731 				                          TUint32 aSinkSourceId,
       
   732 				                          TBool aPaused,
       
   733 				                          TBool aEnableRTCP )
       
   734     {
       
   735 	__INTERFACE_INT1( "MccInterface::StartStream, sid", aStreamId )
       
   736 
       
   737 	// Always ask controller stub, since if there are multiple CMccInterface
       
   738 	// instances, and one of them closes controller, the other CMccInterface
       
   739 	// instances wouldn't know it.
       
   740 	TInt err( KErrNotFound );
       
   741 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   742 	if ( ctrl )
       
   743 		{
       
   744 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccStartStream, 
       
   745                                                aSessionId,
       
   746                                                aLinkId,
       
   747                                                aStreamId,
       
   748                                                aSinkSourceId,
       
   749                                                aPaused,
       
   750                                                aEnableRTCP );
       
   751 		}
       
   752 
       
   753     /*	
       
   754     TInt err = KErrNone;
       
   755     TMccStream params;
       
   756     params.iSessionID = aSessionId;
       
   757     params.iLinkID = aLinkId;
       
   758     params.iStreamID = aStreamId;
       
   759     params.iEndpointID = aSinkSourceId;
       
   760     params.iStreamPaused = aPaused;
       
   761     params.iEnableRTCP = aEnableRTCP;
       
   762     TMccStreamPckg package( params );
       
   763 
       
   764     err = iController.CustomCommandSync( iMessageDest,
       
   765                                          EMccStartStream,
       
   766                                          package,
       
   767                                          KNullDesC8 );
       
   768     */
       
   769 
       
   770 	__INTERFACE_INT1( "MccInterface::StartStream, exit with ", err )
       
   771     return err;
       
   772     }
       
   773 
       
   774 // ---------------------------------------------------------------------------
       
   775 // CMccInterface::PauseStream
       
   776 // Pauses media stream in a given session. No RTP packets are send/received anymore.
       
   777 // ---------------------------------------------------------------------------
       
   778 //
       
   779 EXPORT_C TInt CMccInterface::PauseStream( TUint32 aSessionId, 
       
   780                                           TUint32 aLinkId, 
       
   781 				                          TUint32 aStreamId,
       
   782 				                          TUint32 aSinkSourceId,
       
   783 				                          TBool aEnableRTCP )
       
   784     {
       
   785 	__INTERFACE_INT1( "MccInterface::PauseStream, sid", aStreamId )
       
   786 	
       
   787 	// Always ask controller stub, since if there are multiple CMccInterface
       
   788 	// instances, and one of them closes controller, the other CMccInterface
       
   789 	// instances wouldn't know it.
       
   790 	TInt err( KErrNotFound );
       
   791 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   792 	if ( ctrl )
       
   793 		{
       
   794 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccPauseStream, 
       
   795                                                aSessionId,
       
   796                                                aLinkId,
       
   797                                                aStreamId,
       
   798                                                aSinkSourceId,
       
   799                                                EFalse,
       
   800                                                aEnableRTCP );
       
   801 		}
       
   802 
       
   803 	/*
       
   804     TInt err = KErrNone;
       
   805     TMccStream params;
       
   806     params.iSessionID = aSessionId;
       
   807     params.iLinkID = aLinkId;
       
   808     params.iStreamID = aStreamId;
       
   809     params.iEndpointID = aSinkSourceId;
       
   810     params.iEnableRTCP = aEnableRTCP;
       
   811     TMccStreamPckg package( params );
       
   812 
       
   813     err = iController.CustomCommandSync( iMessageDest,
       
   814                                          EMccPauseStream,
       
   815                                          package,
       
   816                                          KNullDesC8 );
       
   817     */
       
   818                                          
       
   819 	__INTERFACE_INT1( "MccInterface::PauseStream, exit with ", err )
       
   820     return err;
       
   821     }
       
   822 
       
   823 // ---------------------------------------------------------------------------
       
   824 // CMccInterface::ResumeStream
       
   825 // Resumes paused media stream in a given session.
       
   826 // ---------------------------------------------------------------------------
       
   827 //
       
   828 EXPORT_C TInt CMccInterface::ResumeStream( TUint32 aSessionId, 
       
   829                                            TUint32 aLinkId, 
       
   830 				                           TUint32 aStreamId,
       
   831 				                           TUint32 aSinkSourceId,
       
   832 				                           TBool aEnableRTCP )
       
   833     {
       
   834 	__INTERFACE_INT1( "MccInterface::ResumeStream, sid", aStreamId )
       
   835 
       
   836 	TInt err( KErrNotFound );
       
   837 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   838 	if ( ctrl )
       
   839 		{
       
   840 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccResumeStream, 
       
   841                                                aSessionId,
       
   842                                                aLinkId,
       
   843                                                aStreamId,
       
   844                                                aSinkSourceId,
       
   845                                                EFalse,
       
   846                                                aEnableRTCP );
       
   847 		}
       
   848 
       
   849     /*	
       
   850     TInt err = KErrNone;
       
   851     TMccStream params;
       
   852     params.iSessionID = aSessionId;
       
   853     params.iLinkID = aLinkId;
       
   854     params.iStreamID = aStreamId;
       
   855     params.iEndpointID = aSinkSourceId;
       
   856     params.iEnableRTCP = aEnableRTCP;
       
   857     TMccStreamPckg package( params );
       
   858 
       
   859     err = iController.CustomCommandSync( iMessageDest,
       
   860                                          EMccResumeStream,
       
   861                                          package,
       
   862                                          KNullDesC8 );
       
   863     */
       
   864 	__INTERFACE_INT1( "MccInterface::ResumeStream, exit with ", err )
       
   865     return err;
       
   866     }
       
   867 
       
   868 // ---------------------------------------------------------------------------
       
   869 // CMccInterface::StopStream
       
   870 // Stops sending/receiving media stream in a given session.
       
   871 // ---------------------------------------------------------------------------
       
   872 //
       
   873 EXPORT_C TInt CMccInterface::StopStream( TUint32 aSessionId, 
       
   874                                          TUint32 aLinkId, 
       
   875 				                         TUint32 aStreamId,
       
   876 				                         TUint32 aSinkSourceId )
       
   877     {
       
   878 	__INTERFACE_INT1( "MccInterface::StopStream, sid", aStreamId )
       
   879 	
       
   880 	TInt err( KErrNotFound );
       
   881 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   882 	if ( ctrl )
       
   883 		{
       
   884 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccStopStream,
       
   885                                                aSessionId,
       
   886                                                aLinkId,
       
   887                                                aStreamId,
       
   888                                                aSinkSourceId );
       
   889 		}
       
   890 
       
   891     /*    	
       
   892     TInt err = KErrNone;
       
   893     TMccSession sessID;
       
   894     sessID.iSessionID = aSessionId;
       
   895     sessID.iLinkID = aLinkId;
       
   896     sessID.iStreamID = aStreamId;
       
   897     sessID.iEndpointID = aSinkSourceId;
       
   898     TMccSessionPckg package( sessID );
       
   899 
       
   900     err = iController.CustomCommandSync( iMessageDest,
       
   901                                          EMccStopStream,
       
   902                                          package,
       
   903                                          KNullDesC8 );
       
   904 
       
   905     */
       
   906     
       
   907 	__INTERFACE_INT1( "MccInterface::StopStream, exit with ", err )
       
   908     return err;
       
   909     }
       
   910 
       
   911 // ---------------------------------------------------------------------------
       
   912 // CMccInterface::TranscodeFile
       
   913 // ---------------------------------------------------------------------------
       
   914 //
       
   915 EXPORT_C TInt CMccInterface::TranscodeFile( 
       
   916     const TDesC8& /*aSourceFile*/, 
       
   917     const TDesC8& /*aDestFile*/,
       
   918 	TUint32 /*aQuality*/, 
       
   919 	TUint32& aSessionId,  
       
   920 	const CMccCodecInformation* /*aVideoCodec*/,
       
   921 	const CMccCodecInformation* /*aAudioCodec*/ )
       
   922     {
       
   923     __INTERFACE( "MccInterface::TranscodeFile" )
       
   924     aSessionId = 1;
       
   925 
       
   926 	TInt err( KErrNotFound );
       
   927 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   928 	if ( ctrl )
       
   929 		{
       
   930 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccTranscodeFile,
       
   931                                                aSessionId,
       
   932                                                KMceNotAssigned,
       
   933                                                KMceNotAssigned,
       
   934                                                KMceNotAssigned );
       
   935 		}
       
   936                                           
       
   937 	__INTERFACE_INT1( "MccInterface::TranscodeFile, exit with ", err )
       
   938 	
       
   939 	return err;
       
   940     }
       
   941   
       
   942 // ---------------------------------------------------------------------------
       
   943 // CMccInterface::CancelTranscodeFile
       
   944 // ---------------------------------------------------------------------------
       
   945 //
       
   946 EXPORT_C TInt CMccInterface::CancelTranscodeFile( TUint32 aSessionId )
       
   947     {
       
   948     __INTERFACE( "MccInterface::CancelTranscodeFile" )
       
   949 
       
   950 	TInt err( KErrNotFound );
       
   951 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   952 	if ( ctrl )
       
   953 		{
       
   954 		err = ctrl->ControllerStreamCtrCalled( CMccControllerStub::EMccCancelTranscodeFile, 
       
   955                                                aSessionId,
       
   956                                                KMceNotAssigned,
       
   957                                                KMceNotAssigned,
       
   958                                                KMceNotAssigned );
       
   959 		}
       
   960 
       
   961   	__INTERFACE_INT1( "MccInterface::CancelTranscodeFile, exit with ", err )                                     
       
   962   	
       
   963   	return err;
       
   964     }
       
   965 
       
   966 // -----------------------------------------------------------------------------
       
   967 // CMccInterfaceImpl::CodecL()
       
   968 // Gets current codec used in a given stream.
       
   969 // -----------------------------------------------------------------------------
       
   970 //
       
   971 EXPORT_C CMccCodecInformation* CMccInterface::CodecL( TUint32 aSessionId,
       
   972                                                          TUint32 aLinkId,
       
   973                                                          TUint32 aStreamId )
       
   974     {
       
   975 	__INTERFACE( "MccInterface::CodecL" )  
       
   976 
       
   977 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
   978 	__ASSERT_ALWAYS( ctrl != NULL, User::Leave( KErrNotFound ) );
       
   979 	ctrl->ControllerCalled( CMccControllerStub::EMccGetCodec, 
       
   980                             aSessionId,
       
   981                             aLinkId,
       
   982                             aStreamId );
       
   983     CMccControllerStub::TCodecInfo codecBuffer;
       
   984     codecBuffer.iSessionID = aSessionId;
       
   985     codecBuffer.iLinkID = aLinkId;
       
   986     codecBuffer.iStreamID = aStreamId;
       
   987     
       
   988     ctrl->GetCodec( codecBuffer );
       
   989 	
       
   990 /*	
       
   991     TMccGenericMessage msg;
       
   992     msg.iSessionID = aSessionId;
       
   993     msg.iLinkID = aLinkId;
       
   994     msg.iStreamID = aStreamId;
       
   995     TMccGenericMsgBuffer msgBuffer( msg );
       
   996     
       
   997     TMccCodecInfo codecInfo;
       
   998     TMccCodecInfoBuffer codecBuffer( codecInfo );
       
   999     
       
  1000     TInt err = ctrl->CustomCommandSync( iMessageDest, EMccGetCodec, msgBuffer,
       
  1001                                          KNullDesC8, codecBuffer );
       
  1002     
       
  1003     if ( err != KErrNone )
       
  1004         {
       
  1005         User::Leave( err );
       
  1006         }
       
  1007   */
       
  1008         
       
  1009     // Now we need to find the correspoding codec from iCodecArray & clone it.
       
  1010     // Then we need to set the parameters returned from controller which are in codecInfo
       
  1011     // to that cloned codec.
       
  1012     TInt index = 0;
       
  1013     TInt count = iCodecInformation.Count();
       
  1014     TInt counter = 0;
       
  1015     
       
  1016     // If fourCC match, we've got the right one.
       
  1017     TFourCC fourCC;
       
  1018     while ( counter < count )
       
  1019         {
       
  1020         fourCC = iCodecInformation[counter]->FourCC();
       
  1021         if( fourCC == codecBuffer.iFourCC )
       
  1022             {
       
  1023             index = counter;
       
  1024             counter = count;
       
  1025             }
       
  1026         
       
  1027         counter++;
       
  1028         }
       
  1029     
       
  1030     if( index == KErrNotFound )
       
  1031         {
       
  1032         User::Leave( KErrNotFound );
       
  1033         }
       
  1034 
       
  1035     CMccCodecInformation* retCodec = iCodecInformation[index]->CloneDetailedL();
       
  1036     CleanupStack::PushL( retCodec );
       
  1037     retCodec->SetBitrate( codecBuffer.iBitrate );
       
  1038     retCodec->SetPTime( codecBuffer.iPtime );
       
  1039     retCodec->SetMaxPTime( codecBuffer.iMaxPtime );
       
  1040     retCodec->SetPayloadType( codecBuffer.iPayloadType );
       
  1041     retCodec->SetCodecMode( TCodecMode( codecBuffer.iCodecMode ) );
       
  1042     retCodec->EnableVAD( codecBuffer.iEnableDTX );
       
  1043     retCodec->SetJitterBufInactivityTimeOut( codecBuffer.iJitterBufInactivityTimeOut );
       
  1044     retCodec->SetJitterBufThreshold( codecBuffer.iJitterBufThreshold );
       
  1045     retCodec->SetJitterBufBufferLength( codecBuffer.iJitterBufBufferLength );
       
  1046     retCodec->SetAllowedBitrates( codecBuffer.iBitrateMask );
       
  1047     retCodec->SetMaxBitrate( codecBuffer.iMaxBitrate );
       
  1048     retCodec->SetAverageBitrate( codecBuffer.iAverageBitrate );
       
  1049   	retCodec->SetFramerate( codecBuffer.iFramerate );
       
  1050     retCodec->SetFrameWidth( codecBuffer.iVideoWidth );
       
  1051     retCodec->SetFrameHeight( codecBuffer.iVideoHeight );
       
  1052     
       
  1053     retCodec->CreateFmtpAttrListL();
       
  1054     CleanupStack::Pop( retCodec );
       
  1055     
       
  1056 	__INTERFACE( "MccInterface::CodecL, exit" )    
       
  1057     return retCodec;
       
  1058     }
       
  1059 
       
  1060 // ---------------------------------------------------------------------------
       
  1061 // CMccInterface::SetCodec
       
  1062 // Sets codec to be used in a given stream.
       
  1063 // ---------------------------------------------------------------------------
       
  1064 //
       
  1065 EXPORT_C TInt CMccInterface::SetCodec( TUint32 aSessionId, 
       
  1066                                        TUint32 aLinkId, 
       
  1067                                        TUint32 aStreamId, 
       
  1068                                        CMccCodecInformation& aCodecInformation
       
  1069                                        )
       
  1070     {
       
  1071 	__INTERFACE( "MccInterface::SetCodec" )
       
  1072 
       
  1073 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1074 	if ( !ctrl )
       
  1075 		{
       
  1076 		return KErrNotFound;
       
  1077 		}
       
  1078 	TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccSetCodec, 
       
  1079                             		   aSessionId,
       
  1080                             		   aLinkId,
       
  1081                             		   aStreamId );
       
  1082     if ( &aCodecInformation )
       
  1083         {
       
  1084         CMccControllerStub::TCodecInfo codecInfo;
       
  1085         
       
  1086         codecInfo.iFourCC           = aCodecInformation.FourCC();
       
  1087         codecInfo.iAlgoUsed         = aCodecInformation.Algo();
       
  1088         codecInfo.iBitrate          = aCodecInformation.Bitrate();
       
  1089         codecInfo.iCodecMode        = aCodecInformation.CodecMode();
       
  1090         codecInfo.iEnableDTX        = aCodecInformation.VAD();
       
  1091         codecInfo.iMaxPtime         = aCodecInformation.MaxPTime();
       
  1092         codecInfo.iPtime            = aCodecInformation.PTime();
       
  1093         codecInfo.iPayloadType      = aCodecInformation.PayloadType();
       
  1094         codecInfo.iRedundantPayload = aCodecInformation.RedundancyPT();
       
  1095         codecInfo.iRedundancyCount  = static_cast<TUint8>( aCodecInformation.RedCount() );
       
  1096         codecInfo.iFrameSize        = static_cast<TUint8>( aCodecInformation.FrameSize() );
       
  1097         codecInfo.iHwFrameTime      = static_cast<TUint8>( aCodecInformation.FrameTime() );
       
  1098         codecInfo.iBitrateMask      = aCodecInformation.AllowedBitrates();
       
  1099 		codecInfo.iMaxBitrate		= aCodecInformation.MaxBitrate();
       
  1100 		codecInfo.iAverageBitrate	= aCodecInformation.AverageBitrate();
       
  1101 		codecInfo.iFramerate		= aCodecInformation.Framerate();
       
  1102 		codecInfo.iVideoWidth		= aCodecInformation.FrameWidth();
       
  1103 		codecInfo.iVideoHeight		= aCodecInformation.FrameHeight();
       
  1104         
       
  1105         //jitterbuffer settings
       
  1106         codecInfo.iJitterBufInactivityTimeOut = aCodecInformation.JitterBufInactivityTimeOut();
       
  1107         codecInfo.iJitterBufThreshold          = aCodecInformation.JitterBufThreshold();
       
  1108         codecInfo.iJitterBufBufferLength      = aCodecInformation.JitterBufBufferLength();
       
  1109         //playtone settings
       
  1110         
       
  1111         //codecInfo.iJitterBufPlayToneTimeout = aCodecInformation->JitterBufPlayToneTimeOut();
       
  1112         //codecInfo.iJitterBufPlayToneFrequency = aCodecInformation->JitterBufPlayToneFrequency();
       
  1113         //codecInfo.iJitterBufPlayToneDuration  = aCodecInformation->JitterBufPlayToneDuration();
       
  1114         
       
  1115         codecInfo.iSessionID = aSessionId;
       
  1116         codecInfo.iLinkID    = aLinkId;
       
  1117         codecInfo.iStreamID  = aStreamId;
       
  1118         ctrl->SetCodec( codecInfo );
       
  1119         
       
  1120         /*
       
  1121         TMccCodecInfoBuffer infoBuffer( codecInfo );
       
  1122         
       
  1123         TInt err = iController.CustomCommandSync( iMessageDest,
       
  1124                                              EMccSetCodec,
       
  1125                                              infoBuffer,
       
  1126                                              KNullDesC8,
       
  1127                                              infoBuffer );
       
  1128         
       
  1129         // Return payloadtype allocated
       
  1130     	aCodecInformation->SetPayloadType( infoBuffer().iPayloadType );
       
  1131         */
       
  1132         return err;    
       
  1133         }
       
  1134     else
       
  1135         {
       
  1136         return KErrArgument;
       
  1137         }   
       
  1138     }
       
  1139   
       
  1140 // ---------------------------------------------------------------------------
       
  1141 // CMccInterface::GetCapabilities
       
  1142 // Get Capabilities
       
  1143 // ---------------------------------------------------------------------------
       
  1144 //
       
  1145 EXPORT_C TInt CMccInterface::GetCapabilities(
       
  1146                   RPointerArray<CMccCodecInformation>& aCodecInformation ) const
       
  1147 	{
       
  1148 	__INTERFACE( "MccInterface::GetCapabilities" )      
       
  1149     TInt count = iCodecInformation.Count();
       
  1150     aCodecInformation.ResetAndDestroy();
       
  1151     
       
  1152     if( count )
       
  1153         {
       
  1154         CMccCodecInformation* tempCodec = NULL;
       
  1155         TInt err( KErrNone );
       
  1156         
       
  1157     	for ( TInt i = 0; i < count; i++ )
       
  1158     	    {
       
  1159     	    // FIX ME for leavescan, easiest way to do this is to introduce an API
       
  1160     	    // break so we can do harm on offending clients.
       
  1161     	    TRAP( err, (tempCodec = iCodecInformation[i]->CloneDefaultsL()) );
       
  1162     	    
       
  1163     	    if( err != KErrNone )
       
  1164     	        {
       
  1165     	        aCodecInformation.ResetAndDestroy();
       
  1166     	        return err;
       
  1167     	        }
       
  1168     	        
       
  1169     		err = aCodecInformation.Append( tempCodec );
       
  1170     		
       
  1171     		if (err != KErrNone )
       
  1172     			{
       
  1173     			delete tempCodec;
       
  1174     			}
       
  1175     	    }
       
  1176 
       
  1177     	return err;
       
  1178         }
       
  1179     else
       
  1180         {
       
  1181         return KErrNotReady;
       
  1182         }
       
  1183     }
       
  1184 
       
  1185 // ---------------------------------------------------------------------------
       
  1186 // CMccInterface::SendMediaSignallingL
       
  1187 // Sends media signalling to uplink if possible
       
  1188 // ---------------------------------------------------------------------------
       
  1189 //
       
  1190 EXPORT_C void CMccInterface::SendMediaSignalL( const TMccEvent& aEvent )
       
  1191     {
       
  1192 	__INTERFACE( "MccInterface::SendMediaSignalL" ) 
       
  1193 
       
  1194 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1195 	__ASSERT_ALWAYS( ctrl != NULL, User::Leave( KErrNotFound ) );
       
  1196     ctrl->ControllerSignal( aEvent.iSessionId,
       
  1197                             aEvent.iLinkId,
       
  1198                             aEvent.iStreamId,
       
  1199                             aEvent.iEndpointId,
       
  1200                             aEvent.iEventType );
       
  1201 	
       
  1202     if( KNullId == aEvent.iSessionId )
       
  1203         {
       
  1204         User::Leave( KErrArgument );
       
  1205         }
       
  1206     else
       
  1207         {
       
  1208         // Need to pass a pointer as TMccSignal does not have a public
       
  1209         // constructor and it is sort of an "abstract base class"
       
  1210         //TMccSignal* tmp = const_cast<TMccSignal*>( &aSignal );
       
  1211         /*        
       
  1212         TMccSignalPtrPkg sigPkg( tmp );
       
  1213         TInt err = ctrl->CustomCommandSync( iMessageDest, 
       
  1214                                                   EMccSendMediaSignal,
       
  1215                                                   sigPkg, KNullDesC8 );
       
  1216         */
       
  1217         User::LeaveIfError( ctrl->iLeaveError );
       
  1218         }
       
  1219     }
       
  1220 
       
  1221 // ---------------------------------------------------------------------------
       
  1222 // CMccInterface::LinkExists
       
  1223 // ---------------------------------------------------------------------------
       
  1224 //
       
  1225 EXPORT_C TBool CMccInterface::LinkExists( TUint32 /*aSessionId*/,
       
  1226 	TUint32& /*aLinkId*/, const TMccNetSettings& /*aNetSettings*/ )
       
  1227 	{
       
  1228 	__INTERFACE( "MccInterface::LinkExists" )      
       
  1229 	return EFalse;
       
  1230 	}
       
  1231 
       
  1232 // ---------------------------------------------------------------------------
       
  1233 // CMccInterface::GetSSRC
       
  1234 // Get Synchronization source
       
  1235 // ---------------------------------------------------------------------------
       
  1236 //
       
  1237 EXPORT_C TInt CMccInterface::GetSSRC( TUint32 aSessionId,
       
  1238                                  		TUint32 aLinkId,
       
  1239                                  		TUint32 aStreamId,
       
  1240                                  		TUint32 aEndpointId,
       
  1241                                  		TUint32& aSSRC )
       
  1242 	{
       
  1243 	__INTERFACE( "MccInterface::GetSSRC" )
       
  1244 
       
  1245 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1246 	if ( !ctrl )
       
  1247 		{
       
  1248 		return KErrNotFound;
       
  1249 		}
       
  1250     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccGetSSRC,
       
  1251                                        aSessionId,
       
  1252                                        aLinkId,
       
  1253                                        aStreamId,
       
  1254                                        aEndpointId );
       
  1255 	aSSRC = 200;
       
  1256 	/*
       
  1257     TMccGenericMessage message;
       
  1258     message.iSessionID = aSessionId;
       
  1259     message.iLinkID    = aLinkId;
       
  1260     message.iStreamID  = aStreamId;
       
  1261     TMccGenericMsgBuffer messagePckg( message );
       
  1262     
       
  1263     // payload contains SSRC info
       
  1264 	TMccSSRC     ssrc;
       
  1265 	TMccSSRCPckg ssrcPckg ( ssrc );
       
  1266 	
       
  1267     TInt err = ctrl->CustomCommandSync( iMessageDest, 
       
  1268                                               EMccGetSSRC,
       
  1269                                               messagePckg, 
       
  1270                                               KNullDesC8,
       
  1271                                               ssrcPckg 
       
  1272                                              );
       
  1273 
       
  1274     if ( err == KErrNone )
       
  1275         {
       
  1276         aSSRC = ssrcPckg().iSSRC;// ssrc.iSSRC; 
       
  1277         }
       
  1278         
       
  1279 	__INTERFACE_INT1( "MccInterface::GetSSRC, exit with", err)      
       
  1280 	*/
       
  1281     return err;
       
  1282 	}
       
  1283 		
       
  1284 // ---------------------------------------------------------------------------
       
  1285 // CMccInterface::AddDataSink
       
  1286 // ---------------------------------------------------------------------------
       
  1287 //
       
  1288 EXPORT_C TInt CMccInterface::AddDataSink( const TUid /*aSinkType*/, 
       
  1289 	const TDesC8& /*aParam*/, TUint32& aSinkSourceId )
       
  1290 	{
       
  1291 	__INTERFACE( "MccInterface::AddDataSink" )      
       
  1292 
       
  1293 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1294 	if ( !ctrl )
       
  1295 		{
       
  1296 		return KErrNotFound;
       
  1297 		}
       
  1298 
       
  1299     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccGetSinkId ); 
       
  1300     aSinkSourceId = ctrl->NextEndpointId();
       
  1301 
       
  1302     /*
       
  1303 	
       
  1304     TInt err = KErrNone;
       
  1305     err = ctrl->AddDataSink( aSinkType, aParam );
       
  1306     if ( err == KErrNone )
       
  1307     	{
       
  1308 	    TMccSession sessID;
       
  1309 	    TMccSessionPckg package( sessID );
       
  1310 
       
  1311 	    err = ctrl->CustomCommandSync( iMessageDest,
       
  1312 	                                         EMccGetSinkId,
       
  1313 	                                         package,
       
  1314 	                                         KNullDesC8,
       
  1315 	                                         package );
       
  1316     	
       
  1317     	aSinkSourceId = package().iEndpointID;
       
  1318     	}
       
  1319 
       
  1320 	__INTERFACE_INT1( "MccInterface::AddDataSink, exit with", err)      
       
  1321 	*/
       
  1322     return err;    	
       
  1323 	}
       
  1324 
       
  1325 // ---------------------------------------------------------------------------
       
  1326 // CMccInterface::AddDataSource
       
  1327 // ---------------------------------------------------------------------------
       
  1328 //
       
  1329 EXPORT_C TInt CMccInterface::AddDataSource( const TUid /*aSourceType*/,
       
  1330 	const TDesC8& /*aParam*/, TUint32& aSinkSourceId )
       
  1331 	{
       
  1332 	__INTERFACE( "MccInterface::AddDataSource" )
       
  1333 	
       
  1334 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1335 	if ( !ctrl )
       
  1336 		{
       
  1337 		return KErrNotFound;
       
  1338 		}
       
  1339     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccGetSourceId );
       
  1340     aSinkSourceId = ctrl->NextEndpointId();
       
  1341      
       
  1342 	/*
       
  1343     TInt err = KErrNone;
       
  1344     err = ctrl->AddDataSource( aSourceType, aParam );		
       
  1345     if ( err == KErrNone )
       
  1346     	{
       
  1347 	    TMccSession sessID;
       
  1348 	    TMccSessionPckg package( sessID );
       
  1349 
       
  1350 	    err = ctrl->CustomCommandSync( iMessageDest,
       
  1351 	                                         EMccGetSourceId,
       
  1352 	                                         package,
       
  1353 	                                         KNullDesC8,
       
  1354 	                                         package );
       
  1355     	
       
  1356     	aSinkSourceId = package().iEndpointID;
       
  1357     	}
       
  1358 
       
  1359 	__INTERFACE_INT1( "MccInterface::AddDataSource, exit with", err)      
       
  1360 	*/
       
  1361     return err;    	
       
  1362 	}
       
  1363 
       
  1364 // ---------------------------------------------------------------------------
       
  1365 // CMccInterface::GetSupportedBitrates
       
  1366 // Gets supported bit rates from the codec of the specified stream
       
  1367 // ---------------------------------------------------------------------------
       
  1368 //
       
  1369 EXPORT_C TBool CMccInterface::StreamsExists( TUint32 aSessionId,
       
  1370 	TUint32 aLinkId )
       
  1371 	{
       
  1372 	__INTERFACE( "MccInterface::StreamsExists" )
       
  1373 
       
  1374 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1375 	return ctrl && ctrl->StreamsExists( aSessionId, aLinkId );
       
  1376 	}
       
  1377 	
       
  1378 // ---------------------------------------------------------------------------
       
  1379 // CMccInterface::GetSupportedBitrates
       
  1380 // Gets supported bit rates from the codec of the specified stream
       
  1381 // ---------------------------------------------------------------------------
       
  1382 //
       
  1383 TInt CMccInterface::GetSupportedBitrates( TUint32 aSessionId,
       
  1384                                           TUint32 aLinkId,
       
  1385                                           TUint32 aStreamId,
       
  1386                                           RArray<TUint>& aBitrates )
       
  1387     {
       
  1388 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1389 	if ( !ctrl )
       
  1390 		{
       
  1391 		return KErrNotFound;
       
  1392 		}
       
  1393     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccGetSupportedBitrates,
       
  1394                                        aSessionId,
       
  1395                                        aLinkId,
       
  1396                                        aStreamId );       
       
  1397     TInt index = 0;
       
  1398     aBitrates.Append( iCodecInformation[index]->Bitrate() );
       
  1399     
       
  1400     /*
       
  1401     TMccGenericMessage message;
       
  1402     message.iSessionID = aSessionId;
       
  1403     message.iLinkID = aLinkId;
       
  1404     message.iStreamID = aStreamId;
       
  1405     TMccGenericMsgBuffer messagePckg( message );
       
  1406 
       
  1407     TMccBitrates bitrates;
       
  1408     TMccBitratesPckg bitratePckg( bitrates );
       
  1409 
       
  1410     TInt err = ctrl->CustomCommandSync( iMessageDest, 
       
  1411                                               EMccGetSupportedBitrates,
       
  1412                                               messagePckg, KNullDesC8,
       
  1413                                               bitratePckg );
       
  1414 
       
  1415     if ( err != KErrNone )
       
  1416         {
       
  1417         return err;
       
  1418         }
       
  1419 
       
  1420     // The package should now contain the bitrates
       
  1421     for ( TInt i = 0; i < KMaxBitrates; i++ )
       
  1422         {
       
  1423         if ( bitratePckg().iBitrates[i] != 0 )
       
  1424             {
       
  1425             aBitrates.Append( bitratePckg().iBitrates[i] );
       
  1426             }
       
  1427         }
       
  1428     */        
       
  1429     return err;
       
  1430     }
       
  1431 
       
  1432 // ---------------------------------------------------------------------------
       
  1433 // CMccInterface::UpdateDataSink
       
  1434 // ---------------------------------------------------------------------------
       
  1435 //
       
  1436 EXPORT_C TInt CMccInterface::UpdateDataSink( TUint32 aSessionId, TUint32 aLinkId, 
       
  1437                              TUint32 aStreamId, TUint32 aEndpointId,
       
  1438                              const TDesC8& /*aParam*/ )
       
  1439     {
       
  1440 	__INTERFACE( "MccInterface::UpdateDataSink" )
       
  1441 
       
  1442 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1443 	if ( !ctrl )
       
  1444 		{
       
  1445 		return KErrNotFound;
       
  1446 		}
       
  1447     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccUpdateDataSink,
       
  1448                                        aSessionId,
       
  1449                                        aLinkId,
       
  1450                                        aStreamId,
       
  1451                                        aEndpointId );
       
  1452     return err;
       
  1453 	
       
  1454 	/*
       
  1455     TInt err = KErrNone;
       
  1456     TMccStream params;
       
  1457     params.iSessionID = aSessionId;
       
  1458     params.iLinkID = aLinkId;
       
  1459     params.iStreamID = aStreamId;
       
  1460     params.iEndpointID = aEndpointId;
       
  1461     TMccStreamPckg package( params );
       
  1462 
       
  1463     err = iController.CustomCommandSync( iMessageDest,
       
  1464                                          EMccUpdateDataSink,
       
  1465                                          package,
       
  1466                                          aParam );
       
  1467                                          
       
  1468 	__INTERFACE_INT1( "MccInterface::UpdateDataSink, exit with ", err )
       
  1469     return err;
       
  1470     */    
       
  1471     }
       
  1472 
       
  1473 // ---------------------------------------------------------------------------
       
  1474 // CMccInterface::UpdateDataSource
       
  1475 // ---------------------------------------------------------------------------
       
  1476 //
       
  1477 EXPORT_C TInt CMccInterface::UpdateDataSource( TUint32 aSessionId, TUint32 aLinkId, 
       
  1478                                                TUint32 aStreamId, TUint32 aEndpointId,
       
  1479                                                const TDesC8& /*aParam*/ )
       
  1480     {
       
  1481 	__INTERFACE( "MccInterface::UpdateDataSource" )
       
  1482 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1483 	if ( !ctrl )
       
  1484 		{
       
  1485 		return KErrNotFound;
       
  1486 		}
       
  1487     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccUpdateDataSource,
       
  1488                                        aSessionId,
       
  1489                                        aLinkId,
       
  1490                                        aStreamId,
       
  1491                                        aEndpointId );
       
  1492     return err;
       
  1493 	
       
  1494 	/*
       
  1495     TInt err = KErrNone;
       
  1496     TMccStream params;
       
  1497     params.iSessionID = aSessionId;
       
  1498     params.iLinkID = aLinkId;
       
  1499     params.iStreamID = aStreamId;
       
  1500     params.iEndpointID = aEndpointId;
       
  1501     TMccStreamPckg package( params );
       
  1502 
       
  1503     err = ctrl->CustomCommandSync( iMessageDest,
       
  1504                                          EMccUpdateDataSource,
       
  1505                                          package,
       
  1506                                          aParam );
       
  1507                                          
       
  1508 	__INTERFACE_INT1( "MccInterface::UpdateDataSource, exit with ", err )
       
  1509     return err;
       
  1510     */
       
  1511     }
       
  1512 
       
  1513 // ---------------------------------------------------------------------------
       
  1514 // CMccInterface::RemoveDataSink
       
  1515 // ---------------------------------------------------------------------------
       
  1516 //    
       
  1517 EXPORT_C TInt CMccInterface::RemoveDataSink( 
       
  1518     TUint32 aSessionId, 
       
  1519     TUint32 aLinkId, 
       
  1520     TUint32 aStreamId, 
       
  1521     TUint32 aEndpointId )
       
  1522     {
       
  1523     __INTERFACE( "MccInterface::RemoveDataSink" )
       
  1524 
       
  1525 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1526 	if ( !ctrl )
       
  1527 		{
       
  1528 		return KErrNotFound;
       
  1529 		}
       
  1530     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccRemoveDataSink,
       
  1531                                        aSessionId,
       
  1532                                        aLinkId,
       
  1533                                        aStreamId,
       
  1534                                        aEndpointId );
       
  1535     
       
  1536 /*    
       
  1537     TMMFMessageDestination sourceHandleInfo = FindEndpointInfo( aEndpointId, err );
       
  1538     if ( !err )
       
  1539         {
       
  1540         err = ctrl->RemoveDataSink( sourceHandleInfo );
       
  1541         RemoveEndpointInfo( aEndpointId );
       
  1542         }
       
  1543 */        
       
  1544     return err;
       
  1545     }
       
  1546 
       
  1547 // ---------------------------------------------------------------------------
       
  1548 // CMccInterface::RemoveDataSource
       
  1549 // ---------------------------------------------------------------------------
       
  1550 //
       
  1551 EXPORT_C TInt CMccInterface::RemoveDataSource( 
       
  1552     TUint32 aSessionId, 
       
  1553     TUint32 aLinkId, 
       
  1554     TUint32 aStreamId, 
       
  1555     TUint32 aEndpointId )
       
  1556     {
       
  1557     __INTERFACE( "MccInterface::RemoveDataSource" )
       
  1558 
       
  1559 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1560 	if ( !ctrl )
       
  1561 		{
       
  1562 		return KErrNotFound;
       
  1563 		}
       
  1564     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccRemoveDataSource,
       
  1565                                        aSessionId,
       
  1566                                        aLinkId,
       
  1567                                        aStreamId,
       
  1568                                        aEndpointId );
       
  1569     /*
       
  1570     TMMFMessageDestination sinkHandleInfo = FindEndpointInfo( aEndpointId, err );
       
  1571     if ( !err )
       
  1572         {
       
  1573         err = ctrl->RemoveDataSource( sinkHandleInfo );
       
  1574         RemoveEndpointInfo( aEndpointId );
       
  1575         }
       
  1576     */    
       
  1577     return err;
       
  1578     }
       
  1579 
       
  1580 // ---------------------------------------------------------------------------
       
  1581 // CMccInterface::Reuse
       
  1582 // ---------------------------------------------------------------------------
       
  1583 //
       
  1584 EXPORT_C TInt CMccInterface::Reuse( TUint32 aSessionId, TUint32 aLinkId, 
       
  1585                              TUint32 aStreamId, TUint32 aEndpointId )
       
  1586     {
       
  1587 	__INTERFACE( "MccInterface::Reuse" )
       
  1588 	
       
  1589 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1590 	if ( !ctrl )
       
  1591 		{
       
  1592 		return KErrNotFound;
       
  1593 		}
       
  1594     TInt err = ctrl->ControllerCalled( CMccControllerStub::EMccReuse,
       
  1595                                        aSessionId,
       
  1596                                        aLinkId,
       
  1597                                        aStreamId,
       
  1598                                        aEndpointId );
       
  1599     return err;
       
  1600 
       
  1601 	/*
       
  1602     TInt err = KErrNone;
       
  1603     TMccStream params;
       
  1604     params.iSessionID = aSessionId;
       
  1605     params.iLinkID = aLinkId;
       
  1606     params.iStreamID = aStreamId;
       
  1607     params.iEndpointID = aEndpointId;
       
  1608     TMccStreamPckg package( params );
       
  1609 
       
  1610     err = iController.CustomCommandSync( iMessageDest,
       
  1611                                          EMccReuse,
       
  1612                                          package,
       
  1613                                          KNullDesC8 );
       
  1614                                          
       
  1615 	__INTERFACE_INT1( "MccInterface::Reuse, exit with ", err )
       
  1616     return err;
       
  1617     */    
       
  1618     }
       
  1619 
       
  1620 // ---------------------------------------------------------------------------
       
  1621 // CMccInterface::ReferenceCount
       
  1622 // ---------------------------------------------------------------------------
       
  1623 //    
       
  1624 EXPORT_C TInt CMccInterface::ReferenceCount( TUint32 aSessionId, TUint32 aLinkId, 
       
  1625                               TUint32 /*aStreamId*/, TUint32 /*aEndpointId*/,
       
  1626                               TUint& aCount )
       
  1627     {
       
  1628     __INTERFACE( "MccInterface::ReferenceCount" )
       
  1629     
       
  1630     CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1631 	if ( !ctrl )
       
  1632 		{
       
  1633 		return KErrNotFound;
       
  1634 		}
       
  1635     TInt err = ctrl->iLeaveError;
       
  1636     
       
  1637     if ( !ctrl->iRefCount )
       
  1638         {
       
  1639         CMccControllerStub::TLink link;
       
  1640         link.iSessionID = aSessionId;
       
  1641         link.iLinkID = aLinkId;
       
  1642         CMccControllerStub::TLink& l = ctrl->GetLink( link );
       
  1643         aCount = l.iStreams;
       
  1644         }
       
  1645     else
       
  1646         {
       
  1647         aCount = ctrl->iRefCount;
       
  1648         }
       
  1649     
       
  1650     /*    
       
  1651     TMccGenericMessage genMessage;
       
  1652     genMessage.iSessionID = aSessionId;
       
  1653     genMessage.iLinkID = aLinkId;
       
  1654     genMessage.iStreamID = aStreamId;
       
  1655     genMessage.iEndpointID = aEndpointId;
       
  1656         
       
  1657     TMccGenericMsgBuffer msgBuffer( genMessage );
       
  1658     
       
  1659     TInt err( KErrNone );
       
  1660     
       
  1661     err = ctrl->CustomCommandSync( iMessageDest,
       
  1662                                          EMccGetReferenceCount,
       
  1663                                          msgBuffer,
       
  1664                                          KNullDesC8,
       
  1665                                          msgBuffer );
       
  1666     
       
  1667     if ( !err )
       
  1668         {
       
  1669         aCount = msgBuffer().iParam4;
       
  1670         __INTERFACE_INT1( "MccInterface::ReferenceCount, refcount:", aCount )
       
  1671         }
       
  1672         
       
  1673     __INTERFACE_INT1( "MccInterface::ReferenceCount, exit with ", err )
       
  1674     */
       
  1675     
       
  1676     return err;
       
  1677     }
       
  1678 
       
  1679 // ---------------------------------------------------------------------------
       
  1680 // CMccInterface::GetParameter
       
  1681 // ---------------------------------------------------------------------------
       
  1682 //
       
  1683 EXPORT_C TInt CMccInterface::GetParameter( TUint32 aSessionId, TUint32 aLinkId, 
       
  1684     TUint32 aStreamId, TUint32 aEndpointId,
       
  1685     TUint32 aParam, TDes8& aVal )
       
  1686 	{
       
  1687 	__INTERFACE( "MccInterface::GetParameter" )
       
  1688 	
       
  1689 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1690 	if ( !ctrl )
       
  1691 		{
       
  1692 		return KErrNotFound;
       
  1693 		}
       
  1694 	
       
  1695 	if ( aParam == KMccConfigKey )
       
  1696 	    {
       
  1697 	    _LIT8( value, "configKey" );
       
  1698 	    aVal.Copy( value );
       
  1699 	    }
       
  1700 	
       
  1701     return ctrl->ControllerStreamSettings( aSessionId,
       
  1702     									   aLinkId,
       
  1703     									   aStreamId,
       
  1704     									   aEndpointId,
       
  1705     									   aParam,
       
  1706     									   EFalse );
       
  1707 	}
       
  1708 
       
  1709 // ---------------------------------------------------------------------------
       
  1710 // CMccInterface::SetParameter
       
  1711 // ---------------------------------------------------------------------------
       
  1712 //
       
  1713 EXPORT_C TInt CMccInterface::SetParameter( TUint32 aSessionId, TUint32 aLinkId, 
       
  1714     TUint32 aStreamId, TUint32 aEndpointId,
       
  1715     TUint32 aParam, const TDesC8& /*aVal*/ )
       
  1716 	{
       
  1717 	__INTERFACE( "MccInterface::SetParameter" )
       
  1718 	
       
  1719 	CMccControllerStub* ctrl = CMccControllerStub::Stub();
       
  1720 	if ( !ctrl )
       
  1721 		{
       
  1722 		return KErrNotFound;
       
  1723 		}
       
  1724     return ctrl->ControllerStreamSettings( aSessionId,
       
  1725     									   aLinkId,
       
  1726     									   aStreamId,
       
  1727     									   aEndpointId,
       
  1728     									   aParam,
       
  1729     									   ETrue );
       
  1730 	}
       
  1731 
       
  1732 	
       
  1733 // ================= OTHER EXPORTED FUNCTIONS ==============
       
  1734 
       
  1735 // -----------------------------------------------------------------------------
       
  1736 // E32Dll.
       
  1737 // DLL Entry point
       
  1738 // Returns: KErrNone
       
  1739 // -----------------------------------------------------------------------------
       
  1740 //
       
  1741 #ifndef EKA2
       
  1742 EXPORT_C TInt E32Dll( TDllReason )
       
  1743     {
       
  1744     return KErrNone;
       
  1745     }
       
  1746 #endif
       
  1747 
       
  1748 
       
  1749 //  End of File