multimediacommsengine/mmcecli/src/mcemanager.cpp
changeset 0 1bce908db942
child 49 64c62431ac08
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2005 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:    
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 #include <sipstrings.h>
       
    22 #include <stringpool.h>
       
    23 #include "mcemanager.h"
       
    24 #include "mceinsessionobserver.h"
       
    25 #include "mcesessionobserver.h"
       
    26 #include "mceeventobserver.h"
       
    27 #include "mcereferobserver.h"
       
    28 #include "mcetransactionobserver.h" 
       
    29 #include "mceintransactionobserver.h" 
       
    30 #include "mceinsession.h"
       
    31 #include "mceaudiocodec.h"
       
    32 #include "mcevideocodec.h"
       
    33 #include "mcefilesource.h"
       
    34 #include "mceevent.h"
       
    35 #include "mcerefer.h"
       
    36 #include "mcetransactiondatacontainer.h"
       
    37 #include "mce.h"
       
    38 #include "mcemanagerreceiver.h"
       
    39 #include "mceeventmanagerreceiver.h"
       
    40 #include "mceitcsender.h"
       
    41 #include "mceserial.h"
       
    42 #include "mceevents.h"
       
    43 #include "mceclilogs.h"
       
    44 #include "mcecomfilesource.h"
       
    45 
       
    46 // ============================ MEMBER FUNCTIONS ===============================
       
    47 
       
    48 
       
    49 // -----------------------------------------------------------------------------
       
    50 // CMceManager::NewL
       
    51 // -----------------------------------------------------------------------------
       
    52 //
       
    53 EXPORT_C CMceManager* CMceManager::NewL(
       
    54                         const TUid& aAppUid, 
       
    55 						TMceTransactionDataContainer* aContainer )
       
    56     {
       
    57      
       
    58     CMceManager* self = 
       
    59         new (ELeave) CMceManager( aAppUid, aContainer );
       
    60     CleanupStack::PushL( self );
       
    61     self->ConstructL();
       
    62     CleanupStack::Pop( self );
       
    63     return self;
       
    64     
       
    65     }
       
    66 
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CMceManager::~CMceManager
       
    70 // -----------------------------------------------------------------------------
       
    71 //
       
    72 EXPORT_C CMceManager::~CMceManager()
       
    73     {
       
    74     MCECLI_DEBUG("CMceManager::~CMceManager, Entry");
       
    75     
       
    76     if (iContainer)
       
    77     	{
       
    78     	iContainer->Clear();
       
    79     	iContainer = 0;
       
    80     	}			
       
    81     
       
    82     iSessions.Reset();
       
    83     iSessions.Close();
       
    84 
       
    85     iEvents.Reset();
       
    86     iEvents.Close();
       
    87 
       
    88     iRefers.Reset();
       
    89     iRefers.Close();
       
    90     
       
    91     iSupportedAudioCodecs.ResetAndDestroy();
       
    92     iSupportedVideoCodecs.ResetAndDestroy();
       
    93     
       
    94     iTranscodingFiles.Reset();
       
    95     iTranscodingFiles.Close();
       
    96     
       
    97     delete iSender;
       
    98 	delete iEventReceiver;
       
    99 	delete iSessionReceiver;
       
   100 	
       
   101 	if (iServerSession)
       
   102         {
       
   103         iServerSession->Close();
       
   104         }
       
   105 	delete iServerSession;
       
   106 	
       
   107     MCECLI_DEBUG("CMceManager::~CMceManager, Exit");
       
   108 	
       
   109     }
       
   110 
       
   111 // -----------------------------------------------------------------------------
       
   112 // CMceManager::SetInSessionObserver
       
   113 // -----------------------------------------------------------------------------
       
   114 //
       
   115 EXPORT_C void CMceManager::SetInSessionObserver( 
       
   116                         MMceInSessionObserver* aInSessionObserver )
       
   117     {
       
   118     iInSessionObserver = aInSessionObserver;
       
   119     }
       
   120 
       
   121 // -----------------------------------------------------------------------------
       
   122 // CMceManager::SetInEventObserver
       
   123 // -----------------------------------------------------------------------------
       
   124 //
       
   125 EXPORT_C void CMceManager::SetInEventObserver( 
       
   126                         MMceInEventObserver* aInEventObserver )
       
   127     {
       
   128     iInEventObserver = aInEventObserver;
       
   129     }
       
   130 
       
   131 // -----------------------------------------------------------------------------
       
   132 // CMceManager::SetInReferObserver
       
   133 // -----------------------------------------------------------------------------
       
   134 //
       
   135 EXPORT_C void CMceManager::SetInReferObserver( 
       
   136                         MMceInReferObserver* aInReferObserver )
       
   137     {
       
   138     iInReferObserver = aInReferObserver;
       
   139     }
       
   140 
       
   141 // -----------------------------------------------------------------------------
       
   142 // CMceManager::SetSessionObserver
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 EXPORT_C void CMceManager::SetSessionObserver( 
       
   146                         MMceSessionObserver* aSessionObserver )
       
   147     {
       
   148     iSessionObserver = aSessionObserver;
       
   149     }
       
   150 
       
   151 // -----------------------------------------------------------------------------
       
   152 // CMceManager::SetEventObserver
       
   153 // -----------------------------------------------------------------------------
       
   154 //
       
   155 EXPORT_C void CMceManager::SetEventObserver( 
       
   156                         MMceEventObserver* aEventObserver )
       
   157     {
       
   158     iEventObserver = aEventObserver;
       
   159     }
       
   160 
       
   161 // -----------------------------------------------------------------------------
       
   162 // CMceManager::SetReferObserver
       
   163 // -----------------------------------------------------------------------------
       
   164 //
       
   165 EXPORT_C void CMceManager::SetReferObserver( 
       
   166                         MMceReferObserver* aReferObserver )
       
   167     {
       
   168     iReferObserver = aReferObserver;
       
   169     }
       
   170     
       
   171 
       
   172 // -----------------------------------------------------------------------------
       
   173 // CMceManager::SetTransactionObserver 
       
   174 // -----------------------------------------------------------------------------
       
   175 //
       
   176 EXPORT_C void CMceManager::SetTransactionObserver( 
       
   177                         MMceTransactionObserver* aMceTransactionObserver )
       
   178     {
       
   179     iMceTransactionObserver = aMceTransactionObserver;
       
   180     }
       
   181     
       
   182     
       
   183     
       
   184 // -----------------------------------------------------------------------------
       
   185 // CMceManager::SetInTransactionObserver 
       
   186 // -----------------------------------------------------------------------------
       
   187 //
       
   188 EXPORT_C void CMceManager::SetInTransactionObserver( 
       
   189                         MMceInTransactionObserver* aMceInTransactionObserver )
       
   190     {
       
   191     iMceInTransactionObserver = aMceInTransactionObserver;
       
   192     }    
       
   193     
       
   194 // -----------------------------------------------------------------------------
       
   195 // CMceManager::SetMediaObserver
       
   196 // -----------------------------------------------------------------------------
       
   197 //
       
   198 EXPORT_C void CMceManager::SetMediaObserver( 
       
   199                         MMceStreamObserver* aMediaObserver )
       
   200     {
       
   201     iMediaObserver = aMediaObserver;
       
   202     }
       
   203 
       
   204 
       
   205 // -----------------------------------------------------------------------------
       
   206 // CMceManager::SetRtpObserver
       
   207 // -----------------------------------------------------------------------------
       
   208 //
       
   209 EXPORT_C void CMceManager::SetRtpObserver( 
       
   210                         MMceRtpObserver* aRtpObserver )
       
   211     {
       
   212     iRtpObserver = aRtpObserver;
       
   213     }
       
   214 
       
   215 // -----------------------------------------------------------------------------
       
   216 // CMceManager::SetRtpObserver
       
   217 // -----------------------------------------------------------------------------
       
   218 //
       
   219 EXPORT_C void CMceManager::SetDtmfObserver(
       
   220 			 MMceDtmfObserver* aDtmfObserver )
       
   221 	{
       
   222 	iDtmfObserver = aDtmfObserver;	
       
   223 	}
       
   224 
       
   225 // -----------------------------------------------------------------------------
       
   226 // CMceManager::SupportedAudioCodecs
       
   227 // -----------------------------------------------------------------------------
       
   228 //
       
   229 EXPORT_C const RPointerArray<const CMceAudioCodec>&
       
   230 CMceManager::SupportedAudioCodecs() const
       
   231     {
       
   232     return iSupportedAudioCodecs;
       
   233     }
       
   234 
       
   235 // -----------------------------------------------------------------------------
       
   236 // CMceManager::SupportedVideoCodecs
       
   237 // -----------------------------------------------------------------------------
       
   238 //
       
   239 EXPORT_C const RPointerArray<const CMceVideoCodec>&
       
   240 CMceManager::SupportedVideoCodecs() const
       
   241     {
       
   242     return iSupportedVideoCodecs;
       
   243     }
       
   244     
       
   245 // -----------------------------------------------------------------------------
       
   246 // CMceManager::Sessions
       
   247 // -----------------------------------------------------------------------------
       
   248 //
       
   249 EXPORT_C const RPointerArray<CMceSession>& CMceManager::Sessions() const
       
   250     {
       
   251     return iSessions;
       
   252     }
       
   253 
       
   254 // -----------------------------------------------------------------------------
       
   255 // CMceManager::Events
       
   256 // -----------------------------------------------------------------------------
       
   257 //
       
   258 EXPORT_C const RPointerArray<CMceEvent>& CMceManager::Events() const
       
   259     {
       
   260     return iEvents;
       
   261     }
       
   262 
       
   263 // -----------------------------------------------------------------------------
       
   264 // CMceManager::Refers
       
   265 // -----------------------------------------------------------------------------
       
   266 //
       
   267 EXPORT_C const RPointerArray<CMceRefer>& CMceManager::Refers() const
       
   268     {
       
   269     return iRefers;
       
   270     }
       
   271 
       
   272 // -----------------------------------------------------------------------------
       
   273 // CMceManager::SetDefaultHeadersL
       
   274 // -----------------------------------------------------------------------------
       
   275 //
       
   276 EXPORT_C void CMceManager::SetDefaultHeadersL( CDesC8Array* aMethods, 
       
   277                                                CDesC8Array* aHeaders )
       
   278     {
       
   279     MCECLI_DEBUG("CMceManager::SetDefaultHeadersL, Entry");
       
   280     
       
   281     TMceIds ids;
       
   282     PrepareForITC( ids, KMceCSSIPSession );
       
   283     
       
   284     TMceFactory factory;
       
   285     CMceMsgArray< TMceFactory >* msgArray = 
       
   286         new (ELeave) CMceMsgArray< TMceFactory >( factory );
       
   287     CleanupStack::PushL( msgArray ); 
       
   288 
       
   289     CMceMsgTextArray* methodsMsg = NULL;
       
   290     if ( aMethods )
       
   291         {
       
   292         methodsMsg = new ( ELeave ) CMceMsgTextArray( *aMethods );   
       
   293         }
       
   294     else
       
   295         {
       
   296         CDesC8Array* empty = new( ELeave ) CDesC8ArrayFlat( KMceArrayGranularity );
       
   297         CleanupStack::PushL( empty );
       
   298         methodsMsg = new ( ELeave ) CMceMsgTextArray( *empty );
       
   299         }
       
   300     
       
   301     CleanupStack::PushL( methodsMsg ); 
       
   302     msgArray->iArray.AppendL( methodsMsg ); 
       
   303     CleanupStack::Pop( methodsMsg );
       
   304     
       
   305     CMceMsgTextArray* hdrsMsg = NULL;
       
   306     if ( aHeaders )
       
   307         {
       
   308         hdrsMsg = new ( ELeave ) CMceMsgTextArray( *aHeaders );   
       
   309         }
       
   310     else
       
   311         {
       
   312         CDesC8Array* empty = new( ELeave ) CDesC8ArrayFlat( KMceArrayGranularity );
       
   313         CleanupStack::PushL( empty );
       
   314         hdrsMsg = new ( ELeave ) CMceMsgTextArray( *empty );
       
   315         }
       
   316      
       
   317     CleanupStack::PushL( hdrsMsg );
       
   318     msgArray->iArray.AppendL( hdrsMsg );
       
   319     CleanupStack::Pop( hdrsMsg );
       
   320     
       
   321     iSender->SendL( ids, EMceItcSetDefaultHeaders, *msgArray );  
       
   322     
       
   323     if ( !aHeaders )
       
   324         {
       
   325         CleanupStack::PopAndDestroy(); // empty
       
   326         }
       
   327     if ( !aMethods )
       
   328         {
       
   329         CleanupStack::PopAndDestroy(); // empty
       
   330         }
       
   331 
       
   332     CleanupStack::PopAndDestroy( msgArray );
       
   333     
       
   334     delete aMethods;
       
   335     delete aHeaders;
       
   336     
       
   337     MCECLI_DEBUG("CMceManager::SetDefaultHeadersL, Exit");
       
   338     
       
   339     }
       
   340 
       
   341 // -----------------------------------------------------------------------------
       
   342 // CMceManager::DefaultHeadersL
       
   343 // -----------------------------------------------------------------------------
       
   344 //
       
   345 EXPORT_C CDesC8Array* CMceManager::DefaultHeadersL( const TDesC8& aMethod ) const
       
   346     {
       
   347     MCECLI_DEBUG("CMceManager::DefaultHeadersL, Entry");
       
   348     MCECLI_DEBUG_SVALUE("method", aMethod );
       
   349     
       
   350     CDesC8Array* headers = NULL;
       
   351     
       
   352     TMceIds ids;
       
   353     PrepareForITC( ids, KMceCSSIPSession );
       
   354     	
       
   355  	headers = iSender->ReadArrayL( ids, EMceItcGetDefaultHeaders, aMethod );
       
   356  	
       
   357     MCECLI_DEBUG("CMceManager::DefaultHeadersL, Exit");
       
   358     
       
   359  	return headers;
       
   360  	
       
   361     }
       
   362 
       
   363 // -----------------------------------------------------------------------------
       
   364 // CMceManager::TranscodeL
       
   365 // -----------------------------------------------------------------------------
       
   366 //
       
   367 TUint32 CMceManager::TranscodeL( CMceFileSource& aFile )
       
   368     {
       
   369     MCECLI_DEBUG("CMceManager::TranscodeL, Entry");
       
   370     MCECLI_DEBUG_SVALUE("file", aFile.FileInfo().iFileName );
       
   371     
       
   372     TMceIds ids;
       
   373     PrepareForITC( ids, KMceCSSIPSession );
       
   374     
       
   375     TMceItcFunctions itcFunc = EMceItcTranscode;
       
   376     CMceMsgBase* msg = NULL;
       
   377     if ( aFile.iStream && aFile.iStream->Session() )
       
   378         {
       
   379         msg = new (ELeave) CMceMsgObject<CMceSession>( 
       
   380                 *aFile.iStream->Session(), EMceItcMsgTypeSession );
       
   381         
       
   382         itcFunc = EMceItcTranscodeWithSession;
       
   383         }
       
   384     else
       
   385         {
       
   386         msg = new (ELeave) CMceMsgObject<CMceMediaSource>( aFile, EMceItcMsgTypeSource );
       
   387         }
       
   388     
       
   389         
       
   390     CleanupStack::PushL( msg );
       
   391     
       
   392     iSender->SendL( ids, itcFunc, *msg );
       
   393     
       
   394     CleanupStack::PopAndDestroy( msg );
       
   395         
       
   396     iTranscodingFiles.AppendL( &aFile );
       
   397 
       
   398     MCECLI_DEBUG("CMceManager::TranscodeL, Exit");
       
   399     
       
   400     return ids.Get( KMceIdsIndexTCId );
       
   401     
       
   402     }
       
   403 
       
   404 // -----------------------------------------------------------------------------
       
   405 // CMceManager::CancelTranscodeL
       
   406 // -----------------------------------------------------------------------------
       
   407 //
       
   408 void CMceManager::CancelTranscodeL( const CMceFileSource& aFile, TUint32 aSessionId )
       
   409     {
       
   410     MCECLI_DEBUG("CMceManager::CancelTranscodeL, Entry");
       
   411     MCECLI_DEBUG_DVALUE("session id", aSessionId );
       
   412     
       
   413     TInt index = iTranscodingFiles.Find( &aFile );
       
   414     User::LeaveIfError( index );
       
   415     
       
   416     TMceIds ids;
       
   417     PrepareForITC( ids, KMceCSSIPSession );
       
   418 
       
   419     TMceItcArgTUint32 sessionId( aSessionId );
       
   420     iSender->WriteL( ids, EMceItcCancelTranscode, sessionId );
       
   421         
       
   422     TranscodeCompleted( aFile );
       
   423     
       
   424     MCECLI_DEBUG("CMceManager::CancelTranscodeL, Exit");
       
   425     
       
   426     }
       
   427 
       
   428 // -----------------------------------------------------------------------------
       
   429 // CMceManager::TranscodeCompleted
       
   430 // -----------------------------------------------------------------------------
       
   431 //
       
   432 void CMceManager::TranscodeCompleted( const CMceFileSource& aFile )
       
   433     {
       
   434     TInt index = iTranscodingFiles.Find( &aFile );
       
   435     if ( index >= 0 )
       
   436         {
       
   437         iTranscodingFiles.Remove( index );
       
   438         }
       
   439     }
       
   440 
       
   441 
       
   442 
       
   443 // -----------------------------------------------------------------------------
       
   444 // CMceManager::HandleIncomingEventL
       
   445 // -----------------------------------------------------------------------------
       
   446 //
       
   447 void CMceManager::HandleIncomingEventL( TMceIds& aIds )
       
   448     {
       
   449     MCECLI_DEBUG("CMceManager::HandleIncomingEventL, Entry");
       
   450     
       
   451     CMceFileSource* session = NULL;
       
   452     TInt index = 0;
       
   453     TInt status = KMceEventNotConsumed;
       
   454     
       
   455     while( status == KMceEventNotConsumed && index < iTranscodingFiles.Count() )
       
   456         {
       
   457         TMceEvent event( aIds, NULL, NULL );
       
   458         session = iTranscodingFiles[index];
       
   459         status = session->EventReceivedL( event );
       
   460         status = status == KMceEventNotOwner ? KMceEventNotConsumed : status;
       
   461         index++;
       
   462         }
       
   463     MCECLI_DEBUG("CMceManager::HandleIncomingEventL, Exit");        
       
   464     }
       
   465 
       
   466 // -----------------------------------------------------------------------------
       
   467 // CMceManager::FindAssociatedSession
       
   468 // -----------------------------------------------------------------------------
       
   469 //	
       
   470 CMceSession* CMceManager::FindAssociatedSession( TUint32 aDialogId ) const
       
   471     {
       
   472     for ( TInt i = 0; i < iSessions.Count(); i++ )
       
   473         {
       
   474         if ( aDialogId == iSessions[ i ]->DialogId() )
       
   475             {
       
   476             return iSessions[ i ];
       
   477             }
       
   478         }
       
   479     return NULL;
       
   480     }
       
   481 // -----------------------------------------------------------------------------
       
   482 // CMceManager::InSessionObserver
       
   483 // -----------------------------------------------------------------------------
       
   484 //
       
   485 MMceInSessionObserver* CMceManager::InSessionObserver() const
       
   486     {
       
   487     return iInSessionObserver;
       
   488     }
       
   489 	    
       
   490 // -----------------------------------------------------------------------------
       
   491 // CMceManager::InEventObserver
       
   492 // -----------------------------------------------------------------------------
       
   493 //
       
   494 MMceInEventObserver* CMceManager::InEventObserver() const
       
   495     {
       
   496     return iInEventObserver;
       
   497     }
       
   498 	    
       
   499 // -----------------------------------------------------------------------------
       
   500 // CMceManager::InReferObserver
       
   501 // -----------------------------------------------------------------------------
       
   502 //
       
   503 MMceInReferObserver* CMceManager::InReferObserver() const
       
   504     {
       
   505     return iInReferObserver;
       
   506     }
       
   507 
       
   508 // -----------------------------------------------------------------------------
       
   509 // CMceManager::SessionObserver
       
   510 // -----------------------------------------------------------------------------
       
   511 //
       
   512 MMceSessionObserver* CMceManager::SessionObserver() const
       
   513     {
       
   514     return iSessionObserver;
       
   515     }
       
   516 
       
   517 // -----------------------------------------------------------------------------
       
   518 // CMceManager::MediaObserver
       
   519 // -----------------------------------------------------------------------------
       
   520 //
       
   521 MMceStreamObserver* CMceManager::MediaObserver() const
       
   522     {
       
   523     return iMediaObserver;
       
   524     }
       
   525 
       
   526 // -----------------------------------------------------------------------------
       
   527 // CMceManager::RtpObserver
       
   528 // -----------------------------------------------------------------------------
       
   529 //
       
   530 MMceRtpObserver* CMceManager::RtpObserver() const
       
   531     {
       
   532     return iRtpObserver;
       
   533     }
       
   534 
       
   535 // -----------------------------------------------------------------------------
       
   536 // CMceEventManager::EventObserver
       
   537 // -----------------------------------------------------------------------------
       
   538 //
       
   539 MMceEventObserver* CMceManager::EventObserver() const
       
   540     {
       
   541     return iEventObserver;
       
   542     }
       
   543 
       
   544 // -----------------------------------------------------------------------------
       
   545 // CMceEventManager::ReferObserver
       
   546 // -----------------------------------------------------------------------------
       
   547 //
       
   548 MMceReferObserver* CMceManager::ReferObserver() const
       
   549     { 
       
   550     return iReferObserver;
       
   551     }
       
   552     
       
   553 // -----------------------------------------------------------------------------
       
   554 // CMceManager::TransactionObserver
       
   555 // -----------------------------------------------------------------------------
       
   556 //
       
   557 MMceTransactionObserver* CMceManager::TransactionObserver() const
       
   558     { 
       
   559     return iMceTransactionObserver;
       
   560     }
       
   561     
       
   562     
       
   563 // -----------------------------------------------------------------------------
       
   564 // CMceManager::TransactionObserver
       
   565 // -----------------------------------------------------------------------------
       
   566 //
       
   567 MMceInTransactionObserver* CMceManager::InTransactionObserver() const
       
   568     { 
       
   569     return iMceInTransactionObserver;
       
   570     }
       
   571     
       
   572         
       
   573 
       
   574 // -----------------------------------------------------------------------------
       
   575 // CMceEventManager::DtmfObserver
       
   576 // -----------------------------------------------------------------------------
       
   577 //    
       
   578 MMceDtmfObserver* CMceManager::DtmfObserver() const
       
   579     {
       
   580     return iDtmfObserver;
       
   581     }
       
   582     
       
   583 // -----------------------------------------------------------------------------
       
   584 // CMceManager::ServerSession
       
   585 // -----------------------------------------------------------------------------
       
   586 //
       
   587 RMce& CMceManager::ServerSession() const
       
   588     {
       
   589     return *iServerSession;
       
   590     }
       
   591 
       
   592 // -----------------------------------------------------------------------------
       
   593 // CMceManager::AppUid
       
   594 // -----------------------------------------------------------------------------
       
   595 //
       
   596 TUid CMceManager::AppUid() const
       
   597     {
       
   598     return iAppUid;
       
   599     }
       
   600 
       
   601 // -----------------------------------------------------------------------------
       
   602 // CMceManager::TransactionContainer
       
   603 // -----------------------------------------------------------------------------
       
   604 //
       
   605 TMceTransactionDataContainer* CMceManager::TransactionContainer() const
       
   606 	{
       
   607 	return iContainer;
       
   608 	}
       
   609 
       
   610 // -----------------------------------------------------------------------------
       
   611 // CMceManager::PrepareForITC
       
   612 // -----------------------------------------------------------------------------
       
   613 //
       
   614 void CMceManager::PrepareForITC( TMceIds& aId, TUint aRole ) const
       
   615     {
       
   616     
       
   617 	aId.iAppUID    = AppUid().iUid;
       
   618 	aId.iManagerType = static_cast<TMceSessionType>( aRole );
       
   619     
       
   620     }
       
   621 
       
   622 // -----------------------------------------------------------------------------
       
   623 // CMceManager::RegisterSessionL
       
   624 // -----------------------------------------------------------------------------
       
   625 //
       
   626 TUint32 CMceManager::RegisterSessionL( CMceSession* aSession, 
       
   627                                        CDesC8Array& aParams,
       
   628                                        TUint32& aDialogId,
       
   629                                        TBool& aConnectionState )
       
   630     {
       
   631     MCECLI_DEBUG("CMceManager::RegisterSessionL, Entry");
       
   632     
       
   633     TUint32 sessionID =  aSession->Id();
       
   634     if ( sessionID == KMceNotAssigned &&
       
   635     	 aSession->iFlatData->iType == CMceComSession::EOutSession )
       
   636         {        
       
   637     	TMceIds ids;
       
   638         PrepareForITC( ids, KMceCSSIPSession );
       
   639     	ids.iProfileID  = aSession->Profile();
       
   640     	ids.iDialogID = aDialogId;
       
   641     	ids.iDialogType = KMceDlgTypeInvite;
       
   642 
       
   643         CMceMsgTextArray* msgParams = new (ELeave) CMceMsgTextArray( aParams );
       
   644         CleanupStack::PushL( msgParams );
       
   645         
       
   646         iSender->SendL( ids, EMceItcCreateSession, *msgParams );
       
   647         CleanupStack::PopAndDestroy( msgParams );
       
   648         sessionID = ids.iSessionID;
       
   649         aDialogId = ids.iDialogID;
       
   650 		aConnectionState = ids.iSpare1;
       
   651         }
       
   652     else
       
   653         {
       
   654         //NOP
       
   655         MCECLI_DEBUG("CMceManager::RegisterSessionL, Allready registered");
       
   656         }
       
   657         
       
   658     AddSessionL( aSession );
       
   659     
       
   660     MCECLI_DEBUG_DVALUE("CMceManager::RegisterSessionL, Exit. session id", 
       
   661                         sessionID );
       
   662                         
       
   663     return sessionID;
       
   664     
       
   665     }
       
   666 
       
   667 // -----------------------------------------------------------------------------
       
   668 // CMceManager::UnregisterSession
       
   669 // -----------------------------------------------------------------------------
       
   670 //
       
   671 void CMceManager::UnregisterSession( CMceSession* aSession )
       
   672     {
       
   673     MCECLI_DEBUG("CMceManager::UnregisterSession, Entry");
       
   674     MCECLI_DEBUG_DVALUE("session id", aSession->Id() );
       
   675     MCECLI_DEBUG_DVALUE("zombie", aSession->IsZombie() );
       
   676 
       
   677     if ( !aSession->IsZombie() )
       
   678         {
       
   679     	TMceIds ids;
       
   680         PrepareForITC( ids, KMceCSSIPSession );
       
   681     	
       
   682     	TUint32 sessionID = aSession->Id();
       
   683 
       
   684         TRAP_IGNORE( iSender->SendL( ids, EMceItcDeleteSession, sessionID ) );
       
   685 
       
   686         }
       
   687         
       
   688     RemoveSession( aSession );
       
   689     
       
   690     MCECLI_DEBUG("CMceManager::UnregisterSession, Exit");
       
   691     }
       
   692   
       
   693 
       
   694 // -----------------------------------------------------------------------------
       
   695 // CMceManager::RemoveSession
       
   696 // -----------------------------------------------------------------------------
       
   697 //
       
   698 void CMceManager::RemoveSession( CMceSession* aSession )
       
   699     {
       
   700     MCECLI_DEBUG("CMceManager::RemoveSession, Entry");
       
   701     TInt index = iSessions.Find( aSession );
       
   702 
       
   703     if ( index >= 0 )
       
   704         {
       
   705         iSessions.Remove( index );
       
   706         MCECLI_DEBUG("CMceManager::RemoveSession, session removed");
       
   707         }
       
   708     
       
   709     MCECLI_DEBUG_DVALUE("CMceManager::RemoveSession, Exit. \
       
   710 sessions", iSessions.Count() );
       
   711     }
       
   712 
       
   713 // -----------------------------------------------------------------------------
       
   714 // CMceManager::IncomingSessionUpdateL
       
   715 // -----------------------------------------------------------------------------
       
   716 //
       
   717 void CMceManager::IncomingSessionUpdateL( CMceInSession& aNewSession, 
       
   718                                           CMceSession& aOldSession )
       
   719     {
       
   720     MCECLI_DEBUG("CMceManager::IncomingSessionUpdateL, Entry");
       
   721     MCECLI_DEBUG_DVALUE("old session id", aNewSession.Id() );
       
   722     MCECLI_DEBUG_DVALUE("new session id", aOldSession.Id() );
       
   723     
       
   724     AddSessionL( &aNewSession );
       
   725     RemoveSession( &aOldSession );
       
   726     aOldSession.SetZombie( aNewSession );
       
   727     
       
   728     MCECLI_DEBUG("CMceManager::IncomingSessionUpdateL, Exit");
       
   729     
       
   730     }
       
   731   
       
   732 // -----------------------------------------------------------------------------
       
   733 // CMceManager::FindRefer
       
   734 // -----------------------------------------------------------------------------
       
   735 //
       
   736 CMceRefer* CMceManager::FindRefer( const CMceEvent& aEvent )
       
   737     {
       
   738     CMceRefer* refer = NULL;
       
   739     for ( TInt ind = 0; ind < iRefers.Count() && !refer ; ind++ )
       
   740         {
       
   741         refer = iRefers[ ind ];
       
   742         if ( refer->ReferEvent() && 
       
   743              refer->ReferEvent()->Id() == aEvent.Id() )
       
   744             {
       
   745             // found 
       
   746             }
       
   747         else
       
   748             {
       
   749             refer = NULL;
       
   750             }
       
   751         }
       
   752     return refer;
       
   753     }
       
   754 
       
   755 // -----------------------------------------------------------------------------
       
   756 // CMceManager::RegisterEventL
       
   757 // -----------------------------------------------------------------------------
       
   758 //
       
   759 TUint32 CMceManager::RegisterEventL( CMceEvent* aEvent,
       
   760                                      CDesC8Array& aParams,
       
   761                                      TUint32& aDialogId,
       
   762                                      TUint32 aDialogType )
       
   763     {
       
   764     MCECLI_DEBUG("CMceManager::RegisterEventL, Entry");
       
   765     
       
   766 	TUint32 sessionID =  aEvent->Id();
       
   767     if ( sessionID == KMceNotAssigned && !aEvent->IsInEvent() )
       
   768         {
       
   769     	TMceIds ids;
       
   770         PrepareForITC( ids, KMceCSSIPEvent );
       
   771     	ids.iProfileID  = aEvent->ProfileId();
       
   772     	ids.iDialogID = aDialogId;
       
   773     	ids.iDialogType = aDialogType;
       
   774     	
       
   775         CMceMsgTextArray* msgParams = new (ELeave) CMceMsgTextArray( aParams );
       
   776         CleanupStack::PushL( msgParams );
       
   777         
       
   778         iSender->SendL( ids, EMceItcCreateSession, *msgParams );
       
   779         CleanupStack::PopAndDestroy( msgParams );
       
   780         sessionID = ids.iSessionID;
       
   781         aDialogId = ids.iDialogID;
       
   782         }
       
   783     else
       
   784         {
       
   785         //NOP
       
   786         MCECLI_DEBUG("CMceManager::RegisterEventL, Allready registered");
       
   787         }
       
   788         
       
   789     AddEventL( aEvent );
       
   790     
       
   791     MCECLI_DEBUG_DVALUE("CMceManager::RegisterEventL, Exit. session id", 
       
   792                         sessionID );
       
   793     
       
   794     return sessionID;
       
   795     }
       
   796     
       
   797 // -----------------------------------------------------------------------------
       
   798 // CMceManager::RegisterReferL
       
   799 // -----------------------------------------------------------------------------
       
   800 //
       
   801 TUint32 CMceManager::RegisterReferL( CMceRefer* aRefer,
       
   802                                      CDesC8Array& aParams,
       
   803                                      TUint32& aDialogId )
       
   804     {
       
   805     MCECLI_DEBUG("CMceManager::RegisterReferL, Entry");
       
   806     
       
   807 	TUint32 sessionID = KMceNotAssigned;
       
   808 	if( aRefer->ReferEvent() )
       
   809 	    {
       
   810 	    sessionID = aRefer->ReferEvent()->Id();
       
   811 	    }
       
   812 	else
       
   813 	    {
       
   814 	    sessionID = aRefer->Id();
       
   815 	    }
       
   816 	    
       
   817     if ( sessionID == KMceNotAssigned && !aRefer->ReferEvent() )
       
   818         {
       
   819     	TMceIds ids;
       
   820         PrepareForITC( ids, KMceCSSIPEvent );
       
   821     	ids.iProfileID = aRefer->ProfileId();
       
   822     	ids.iDialogID = aDialogId;
       
   823     	ids.iDialogType = KMceDlgTypeRefer;
       
   824     	
       
   825         CMceMsgTextArray* msgParams = new (ELeave) CMceMsgTextArray( aParams );
       
   826         CleanupStack::PushL( msgParams );
       
   827         
       
   828         iSender->SendL( ids, EMceItcCreateSession, *msgParams );
       
   829         CleanupStack::PopAndDestroy( msgParams );
       
   830         
       
   831         sessionID = ids.iSessionID;
       
   832         aDialogId = ids.iDialogID;
       
   833         
       
   834         }
       
   835     else
       
   836         {
       
   837         //NOP
       
   838         MCECLI_DEBUG("CMceManager::RegisterReferL, Allready registered");
       
   839         }
       
   840         
       
   841     AddReferL( aRefer );
       
   842     
       
   843     MCECLI_DEBUG_DVALUE("CMceManager::RegisterReferL, Exit. session id", 
       
   844                         sessionID );
       
   845     
       
   846     return sessionID;
       
   847     }
       
   848 
       
   849 // -----------------------------------------------------------------------------
       
   850 // CMceManager::UnregisterEvent 
       
   851 // -----------------------------------------------------------------------------
       
   852 //
       
   853 void CMceManager::UnregisterEvent( CMceEvent* aEvent )
       
   854     {
       
   855     
       
   856     // Delete the Session if necessary. 
       
   857     
       
   858     MCECLI_DEBUG("CMceManager::UnregisterEvent, Entry");
       
   859     if (aEvent->State() != CMceEvent::ETerminated)
       
   860     	{
       
   861     	TRAP_IGNORE( aEvent->TerminateL() )	
       
   862     	}      
       
   863     else
       
   864     	{
       
   865 	   	CMceRefer* refer = FindRefer( *aEvent );
       
   866 	    if ( refer )
       
   867 	        {
       
   868 	        refer->DetachReferEvent();
       
   869 	        }
       
   870 	        
       
   871 		TMceIds ids;
       
   872 	    PrepareForITC( ids, KMceCSSIPEvent );
       
   873 		
       
   874 		TUint32 sessionID = aEvent->Id();
       
   875 
       
   876 	    MCECLI_DEBUG_DVALUE("session id", sessionID );
       
   877 
       
   878 	    TRAP_IGNORE( iSender->SendL( ids, EMceItcDeleteSession, sessionID ) )
       
   879 	    
       
   880 	    TInt index = iEvents.Find( aEvent);
       
   881 
       
   882 	    if ( index >= 0 )
       
   883 	        {
       
   884 	        iEvents.Remove( index );
       
   885 	        MCECLI_DEBUG("CMceManager::UnregisterEvent, event removed");
       
   886 	        }
       
   887 	        
       
   888 	    MCECLI_DEBUG_DVALUE("CMceManager::UnregisterEvent, Exit.\
       
   889 		events", iEvents.Count() );
       
   890     	}
       
   891             
       
   892     }
       
   893 
       
   894 // -----------------------------------------------------------------------------
       
   895 // CMceManager::UnregisterRefer
       
   896 // -----------------------------------------------------------------------------
       
   897 //
       
   898 void CMceManager::UnregisterRefer( CMceRefer* aRefer )
       
   899     {   
       
   900     MCECLI_DEBUG("CMceManager::UnregisterRefer, Entry");
       
   901 	TMceIds ids;
       
   902     PrepareForITC( ids, KMceCSSIPEvent );
       
   903 	
       
   904 	TUint32 sessionID = aRefer->Id();
       
   905     MCECLI_DEBUG_DVALUE("session id", sessionID );
       
   906 
       
   907     if ( !aRefer->ReferEvent() )
       
   908         {
       
   909         // if event does no exist, delete the subsession.
       
   910         TRAP_IGNORE( iSender->SendL( ids, EMceItcDeleteSession, sessionID ) )
       
   911         }
       
   912         
       
   913     TInt index = iRefers.Find( aRefer);
       
   914 
       
   915     if ( index >= 0 )
       
   916         {
       
   917         iRefers.Remove( index );
       
   918         MCECLI_DEBUG("CMceManager::UnregisterRefer, refer removed");
       
   919         }
       
   920         
       
   921     MCECLI_DEBUG_DVALUE("CMceManager::UnregisterRefer, Exit.\
       
   922 refers", iRefers.Count() );
       
   923 
       
   924     }
       
   925     
       
   926 // -----------------------------------------------------------------------------
       
   927 // CMceManager::AddSessionL
       
   928 // -----------------------------------------------------------------------------
       
   929 //
       
   930 void CMceManager::AddSessionL( CMceSession* aSession )
       
   931     {
       
   932     MCECLI_DEBUG("CMceManager::AddSessionL, Entry");
       
   933     __ASSERT_ALWAYS( iSessions.Find( aSession ) < 0, User::Leave( KErrArgument ) );
       
   934     
       
   935     iSessions.AppendL( aSession );
       
   936 
       
   937     MCECLI_DEBUG_DVALUE("CMceManager::AddSessionL, Exit.\
       
   938 sessions", iSessions.Count() );
       
   939     
       
   940     }
       
   941 
       
   942 // -----------------------------------------------------------------------------
       
   943 // CMceManager::AddEventL
       
   944 // -----------------------------------------------------------------------------
       
   945 //
       
   946 void CMceManager::AddEventL( CMceEvent* aEvent )
       
   947     {
       
   948     MCECLI_DEBUG("CMceManager::AddEventL, Entry");
       
   949     __ASSERT_ALWAYS( iEvents.Find( aEvent ) < 0, User::Leave( KErrArgument ) );
       
   950     
       
   951     iEvents.AppendL( aEvent );
       
   952 
       
   953     MCECLI_DEBUG_DVALUE("CMceManager::AddEventL, Exit.\
       
   954 events", iEvents.Count() );
       
   955     
       
   956     }
       
   957 
       
   958 
       
   959 // -----------------------------------------------------------------------------
       
   960 // CMceManager::AddReferL
       
   961 // -----------------------------------------------------------------------------
       
   962 //
       
   963 void CMceManager::AddReferL( CMceRefer* aRefer )
       
   964     {
       
   965     MCECLI_DEBUG("CMceManager::AddReferL, Entry");
       
   966     __ASSERT_ALWAYS( iRefers.Find( aRefer ) < 0, User::Leave( KErrArgument ) );
       
   967     
       
   968     iRefers.AppendL( aRefer );
       
   969 
       
   970     MCECLI_DEBUG_DVALUE("CMceManager::AddReferL, Exit.\
       
   971 refers", iRefers.Count() );
       
   972     
       
   973     }
       
   974     
       
   975 // -----------------------------------------------------------------------------
       
   976 // CMceManager::CMceManager
       
   977 // -----------------------------------------------------------------------------
       
   978 //
       
   979 CMceManager::CMceManager( const TUid& aAppUid, 
       
   980                         TMceTransactionDataContainer* aContainer )
       
   981     :iContainer( aContainer ),
       
   982      iNextId( 0 ),
       
   983      iAppUid( aAppUid )
       
   984     {
       
   985     
       
   986     }
       
   987 
       
   988 
       
   989 // -----------------------------------------------------------------------------
       
   990 // CMceManager::ConstructL
       
   991 // -----------------------------------------------------------------------------
       
   992 //
       
   993 void CMceManager::ConstructL()	
       
   994     {
       
   995     MCECLI_DEBUG("CMceManager::ConstructL, Entry");
       
   996     
       
   997 	iServerSession = new (ELeave) RMce;
       
   998     User::LeaveIfError( iServerSession->Connect() );
       
   999         
       
  1000 	iSessionReceiver = new (ELeave) CMceManagerReceiver( *iServerSession, 
       
  1001 	                                              *this );
       
  1002 
       
  1003 	iEventReceiver = new (ELeave) CMceEventManagerReceiver( *iServerSession, 
       
  1004 	                                              *this );
       
  1005 	                                               
       
  1006     iSender = CMceItcSender::NewL( *iServerSession );
       
  1007     
       
  1008     ReceiveSupportedAudioCodecsL();
       
  1009     ReceiveSupportedVideoCodecsL();
       
  1010     	                           
       
  1011     User::LeaveIfError( iServerSession->SendClientUid( iAppUid ) );
       
  1012 
       
  1013     MCECLI_DEBUG("CMceManager::ConstructL, Exit");
       
  1014     
       
  1015     }
       
  1016 
       
  1017 
       
  1018 // -----------------------------------------------------------------------------
       
  1019 // CMceManager::ReceiveSupportedAudioCodecsL
       
  1020 // -----------------------------------------------------------------------------
       
  1021 //
       
  1022 void CMceManager::ReceiveSupportedAudioCodecsL()	
       
  1023     {
       
  1024     MCECLI_DEBUG("CMceManager::ReceiveSupportedAudioCodecsL, Entry");
       
  1025     
       
  1026 	TMceIds ids;
       
  1027     PrepareForITC( ids, KMceCSSIPSession );
       
  1028     	
       
  1029  	CDesC8Array* serializedCodecs = 
       
  1030  	    iSender->ReadArrayL( ids, EMceItcGetSupportedAudioCodecs );
       
  1031     CleanupStack::PushL( serializedCodecs );
       
  1032      	    
       
  1033     for ( TInt i = 0; i < serializedCodecs->MdcaCount(); i++ )
       
  1034         {
       
  1035         TPtrC8 serializedCodec = serializedCodecs->MdcaPoint( i );
       
  1036         CMceMsgObject<CMceAudioCodec>* audioCodecMsg = 
       
  1037                                 new (ELeave) CMceMsgObject<CMceAudioCodec>();
       
  1038         CleanupStack::PushL( audioCodecMsg );
       
  1039         audioCodecMsg->DecodeL( serializedCodec );
       
  1040         audioCodecMsg->PushL();
       
  1041         
       
  1042         iSupportedAudioCodecs.AppendL( audioCodecMsg->iObject );
       
  1043         audioCodecMsg->Pop();
       
  1044         CleanupStack::PopAndDestroy( audioCodecMsg );
       
  1045         }
       
  1046 
       
  1047     CleanupStack::PopAndDestroy( serializedCodecs );
       
  1048     
       
  1049     MCECLI_DEBUG("CMceManager::ReceiveSupportedAudioCodecsL, Exit");
       
  1050     }
       
  1051 
       
  1052 // -----------------------------------------------------------------------------
       
  1053 // CMceManager::ReceiveSupportedVideoCodecsL
       
  1054 // -----------------------------------------------------------------------------
       
  1055 //
       
  1056 void CMceManager::ReceiveSupportedVideoCodecsL()	
       
  1057     {
       
  1058     MCECLI_DEBUG("CMceManager::ReceiveSupportedVideoCodecsL, Entry");
       
  1059     
       
  1060 	TMceIds ids;
       
  1061     PrepareForITC( ids, KMceCSSIPSession );
       
  1062     	
       
  1063  	CDesC8Array* serializedCodecs = 
       
  1064  	    iSender->ReadArrayL( ids, EMceItcGetSupportedVideoCodecs );
       
  1065     CleanupStack::PushL( serializedCodecs );
       
  1066      	    
       
  1067     for ( TInt i = 0; i < serializedCodecs->MdcaCount(); i++ )
       
  1068         {
       
  1069         TPtrC8 serializedCodec = serializedCodecs->MdcaPoint( i );
       
  1070         CMceMsgObject<CMceVideoCodec>* videoCodecMsg = 
       
  1071                                 new (ELeave) CMceMsgObject<CMceVideoCodec>();
       
  1072         CleanupStack::PushL( videoCodecMsg );
       
  1073         videoCodecMsg->DecodeL( serializedCodec );
       
  1074         videoCodecMsg->PushL();
       
  1075         
       
  1076         iSupportedVideoCodecs.AppendL( videoCodecMsg->iObject );
       
  1077         videoCodecMsg->Pop();
       
  1078         CleanupStack::PopAndDestroy( videoCodecMsg );
       
  1079         }
       
  1080 
       
  1081     CleanupStack::PopAndDestroy( serializedCodecs );
       
  1082     
       
  1083     MCECLI_DEBUG("CMceManager::ReceiveSupportedVideoCodecsL, Exit");
       
  1084     }
       
  1085     
       
  1086     
       
  1087 // -----------------------------------------------------------------------------
       
  1088 // CMceManager::NextMediaId
       
  1089 // -----------------------------------------------------------------------------
       
  1090 //
       
  1091 TMceMediaId CMceManager::NextMediaId()	
       
  1092     {
       
  1093     iNextId++;
       
  1094     
       
  1095     return TMceMediaId( iAppUid, iNextId );
       
  1096         
       
  1097     }