mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp
changeset 22 496ad160a278
equal deleted inserted replaced
15:ccd8e69b5392 22:496ad160a278
       
     1 /*
       
     2 * Copyright (c) 2006-2007 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:  ?Description
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "musavailabilitypluginmanager.h"
       
    20 #include "musavasettings.h"
       
    21 #include "musunittesting.h"
       
    22 #include "musavainterface.h"
       
    23 #include "muslogger.h"
       
    24 #include "musavailabilitypluginmanagerobserver.h"
       
    25 #include "musmanagerservercommon.h"
       
    26 #include "musindicatorapi.h"
       
    27 #include "musapplicationmanager.h"
       
    28 
       
    29 #include <badesca.h>
       
    30 #include <bamdesca.h>
       
    31 #include <e32property.h>
       
    32 
       
    33 
       
    34 // CONSTANTS
       
    35 
       
    36 // Max number of digits in unsigned 32 bit integer (TInt32)
       
    37 const TUint KMaxInt32Length = 16;
       
    38 
       
    39 
       
    40 using namespace MultimediaSharing;
       
    41 
       
    42 // -----------------------------------------------------------------------------
       
    43 //
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 CMusAvailabilityPluginManager* CMusAvailabilityPluginManager::NewL(
       
    47                           MMusAvailabilityPluginManagerObserver& aObserver,
       
    48                           CMusApplicationManager& aApplicationManager )
       
    49     {
       
    50     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::NewL()" )
       
    51 
       
    52     CMusAvailabilityPluginManager* self =
       
    53                           CMusAvailabilityPluginManager::NewLC( aObserver,
       
    54                                                                 aApplicationManager );
       
    55 
       
    56     CleanupStack::Pop( self );
       
    57     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::NewL()" )
       
    58     return self;
       
    59     }
       
    60 
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 //
       
    64 // -----------------------------------------------------------------------------
       
    65 //
       
    66 CMusAvailabilityPluginManager* CMusAvailabilityPluginManager::NewLC(
       
    67                           MMusAvailabilityPluginManagerObserver& aObserver,
       
    68                           CMusApplicationManager& aApplicationManager )
       
    69     {
       
    70     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::NewLC()" )
       
    71 
       
    72     CMusAvailabilityPluginManager* self =
       
    73                    new( ELeave ) CMusAvailabilityPluginManager( aObserver, 
       
    74                                                                 aApplicationManager );
       
    75 
       
    76     CleanupStack::PushL( self );
       
    77     self->ConstructL();
       
    78     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::NewLC()" )
       
    79     return self;
       
    80     }
       
    81 
       
    82 
       
    83 // -----------------------------------------------------------------------------
       
    84 //
       
    85 // -----------------------------------------------------------------------------
       
    86 //
       
    87 CMusAvailabilityPluginManager::~CMusAvailabilityPluginManager()
       
    88     {
       
    89     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
    90              ~CMusAvailabilityPluginManager()" )
       
    91     delete iPlugin;
       
    92     delete iSessionParameters;
       
    93     delete iIndicator;
       
    94     iIndicator = NULL;
       
    95     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
    96              ~CMusAvailabilityPluginManager()" )
       
    97     }
       
    98 
       
    99 
       
   100 // -----------------------------------------------------------------------------
       
   101 //
       
   102 // -----------------------------------------------------------------------------
       
   103 //
       
   104 void CMusAvailabilityPluginManager::ConstructL()
       
   105     {
       
   106     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::ConstructL()" )
       
   107     iSessionParameters = new( ELeave ) CDesCArrayFlat( KParameterCount );
       
   108     iPlugin = CMusAvaInterface::NewL();
       
   109     iPlugin->SetObserver( *this );
       
   110    	iPlugin->SetSettingsObserver( *this );
       
   111     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::ConstructL()" )
       
   112     }
       
   113 
       
   114 
       
   115 // -----------------------------------------------------------------------------
       
   116 //
       
   117 // -----------------------------------------------------------------------------
       
   118 //
       
   119 CMusAvailabilityPluginManager::CMusAvailabilityPluginManager(
       
   120                           MMusAvailabilityPluginManagerObserver& aObserver,
       
   121                           CMusApplicationManager& aApplicationManager )
       
   122     : iObserver( aObserver ), 
       
   123       iApplicationManager( aApplicationManager )
       
   124     {
       
   125     iPluginStarted = EFalse;
       
   126     }
       
   127 
       
   128 // -----------------------------------------------------------------------------
       
   129 //
       
   130 // -----------------------------------------------------------------------------
       
   131 //
       
   132 TBool CMusAvailabilityPluginManager::ApplicationAllowed()
       
   133     {
       
   134     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   135         ApplicationAllowed()" )
       
   136     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   137         ApplicationAllowed()" )
       
   138     return ( iPlugin->MandatoryAvailability()
       
   139         || iPlugin->AvailabilityState( EMusAvaNameRegistration ) == 
       
   140             EMusAvaStatusInProgress
       
   141         || iPlugin->AvailabilityState( EMusAvaNameRegistration ) == 
       
   142             EMusAvaStatusAvailable );
       
   143     }
       
   144 // -----------------------------------------------------------------------------
       
   145 // If minumum availability is available returning mandaroty level status
       
   146 // and if mandatory level status is available returning extension level status
       
   147 // -----------------------------------------------------------------------------
       
   148 //
       
   149 TMusAvailabilityStatus CMusAvailabilityPluginManager::Availability()
       
   150     {
       
   151     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   152         Availability()" )
       
   153     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   154         	Availability()" )
       
   155     return MapAvailabilities( iPlugin->AvailabilityStatus() );
       
   156     }
       
   157 
       
   158 
       
   159 // -----------------------------------------------------------------------------
       
   160 //
       
   161 // -----------------------------------------------------------------------------
       
   162 //
       
   163 void CMusAvailabilityPluginManager::InvestigateAvailabilityL()
       
   164     {
       
   165     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   166              InvestigateAvailabilityL()" )
       
   167     if( !iPluginStarted )
       
   168         {
       
   169         iPlugin->StartL();
       
   170         iPluginStarted = ETrue;
       
   171         }
       
   172 
       
   173 
       
   174     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   175              InvestigateAvailabilityL()" )
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 //
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 void CMusAvailabilityPluginManager::PrepareForReceivedInviteL()
       
   183     {
       
   184     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   185                  PrepareForReceivedInviteL()" )
       
   186                  
       
   187     iPlugin->PrepareForReceivedInviteL();
       
   188     
       
   189     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   190                      PrepareForReceivedInviteL()" )
       
   191     }
       
   192 
       
   193 // -----------------------------------------------------------------------------
       
   194 //
       
   195 // -----------------------------------------------------------------------------
       
   196 //
       
   197 void CMusAvailabilityPluginManager::InvitationReceivedL()
       
   198     {
       
   199     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   200         InvitationReceivedL()" )
       
   201 
       
   202     if( !iPluginStarted )
       
   203         {
       
   204         iPlugin->StartL();
       
   205         iPluginStarted = ETrue;
       
   206         }
       
   207 
       
   208     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   209         InvitationReceivedL()" )
       
   210     }
       
   211 
       
   212 // -----------------------------------------------------------------------------
       
   213 // CMusAvailabilityPluginManager::OptionsReceived
       
   214 // -----------------------------------------------------------------------------
       
   215 //
       
   216 void CMusAvailabilityPluginManager::OptionsReceivedL()
       
   217     {
       
   218     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   219         OptionsReceivedL()" )
       
   220 
       
   221     if( !iPluginStarted )
       
   222         {
       
   223         iPlugin->StartL();
       
   224         iPluginStarted = ETrue;
       
   225         }
       
   226 
       
   227     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   228         OptionsReceivedL()" )
       
   229     }
       
   230 
       
   231 // -----------------------------------------------------------------------------
       
   232 // CMusAvailabilityPluginManager::LoadPluginL
       
   233 // -----------------------------------------------------------------------------
       
   234 //
       
   235 void CMusAvailabilityPluginManager::LoadPluginL()
       
   236     {
       
   237     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   238         LoadPluginL()" )
       
   239     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   240         LoadPluginL()" )
       
   241     }
       
   242 
       
   243 // -----------------------------------------------------------------------------
       
   244 // CMusAvailabilityPluginManager::UnloadPluginL
       
   245 // -----------------------------------------------------------------------------
       
   246 //
       
   247 void CMusAvailabilityPluginManager::StopPluginL()
       
   248     {
       
   249     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   250         StopPluginL()" )
       
   251     if( iPluginStarted )
       
   252         {
       
   253         iPlugin->Stop();
       
   254         iPluginStarted = EFalse;
       
   255         }
       
   256     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   257         StopPluginL()" )
       
   258     }
       
   259 
       
   260 // -----------------------------------------------------------------------------
       
   261 //
       
   262 // -----------------------------------------------------------------------------
       
   263 //
       
   264 MDesCArray& CMusAvailabilityPluginManager::SessionParametersL()
       
   265     {
       
   266     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   267         SessionParametersL()" )
       
   268     // update the values
       
   269     UpdateSessionParametersL();
       
   270 
       
   271     // then pass them
       
   272     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   273         SessionParametersL()" )
       
   274     return *iSessionParameters;
       
   275     }
       
   276 
       
   277 
       
   278 // -----------------------------------------------------------------------------
       
   279 //
       
   280 // -----------------------------------------------------------------------------
       
   281 //
       
   282 void CMusAvailabilityPluginManager::ManualQueryL()
       
   283     {
       
   284 
       
   285     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   286         ManualQueryL()" )
       
   287   	MMusAvaSettings& settings = iPlugin->Settings();
       
   288   	
       
   289     MUS_LOG( "mus: [MUSSRV]    Status available" )
       
   290     if( !iIndicator )
       
   291         {
       
   292         MUS_LOG( "mus: [MUSSRV]    Create indicator" )
       
   293         iIndicator = CMusIndicatorApi::NewL( *this );
       
   294         if( iIndicator->ConfirmationQueryL( CMusIndicatorApi::EVsRoamingActivationQuery ) )
       
   295         	{
       
   296         	settings.SetManualActivation( MMusAvaSettings::EActivationAllowed );
       
   297         	iPlugin->StartL();
       
   298         	}
       
   299         else
       
   300         	{
       
   301         	settings.SetManualActivation( MMusAvaSettings::EActivationNotAllowed );
       
   302         	}
       
   303         delete iIndicator;
       
   304         iIndicator = NULL;
       
   305         }
       
   306      else
       
   307      	{
       
   308      	if( iIndicator->ConfirmationQueryL( CMusIndicatorApi::EVsRoamingActivationQuery ) )
       
   309         	{
       
   310         	settings.SetManualActivation( MMusAvaSettings::EActivationAllowed );
       
   311         	iPlugin->StartL();
       
   312         	}
       
   313         else
       
   314         	{
       
   315         	settings.SetManualActivation( MMusAvaSettings::EActivationNotAllowed );	
       
   316         	}	
       
   317      	}
       
   318     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   319         ManualQueryL()" )  
       
   320     }
       
   321 
       
   322 TBool CMusAvailabilityPluginManager::PossibleToLaunch()
       
   323     {
       
   324     return iPlugin->ExtensionAvailability() && 
       
   325     	iPlugin->AvailabilityStatus() == 
       
   326     		MMusAvaObserver::EMusAvaStatusAvailable;
       
   327     }
       
   328 void CMusAvailabilityPluginManager::AvailabilityChanged( 
       
   329                                             TAvailabilityName /*aName*/, 
       
   330                                             TAvailabilityStatus aStatus )
       
   331     {
       
   332     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   333         AvailabilityChanged()" )
       
   334 	TRAPD( err , iObserver.AvailabilityChangedL( MapAvailabilities( aStatus ) ) );
       
   335     if ( err )
       
   336         {
       
   337         // Not sure about what to do. Very rare situation.
       
   338         MUS_LOG1( "mus: [MUSSRV] AvailabilityChangedL() leave code: %d",err )
       
   339         }
       
   340     // Do some indicator things...
       
   341     TRAP( err, IndicateAvailabilityL() );
       
   342     if ( err )
       
   343         {
       
   344         // Not sure about what to do. Very rare situation.
       
   345         MUS_LOG1( "mus: [MUSSRV] IndicateAvailabilityL() leave code: %d",err )
       
   346         }
       
   347 
       
   348     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   349         AvailabilityChanged()" )	
       
   350     }
       
   351 
       
   352 // -----------------------------------------------------------------------------
       
   353 //
       
   354 // -----------------------------------------------------------------------------
       
   355 //
       
   356 void CMusAvailabilityPluginManager::AvailabilityError( 
       
   357                                             TAvailabilityName /*aName*/, 
       
   358                                             TAvailabilityStatus aStatus )
       
   359     {
       
   360     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   361         AvailabilityError()" )
       
   362     TRAPD( err , iObserver.AvailabilityChangedL( MapAvailabilities( aStatus ) ) );
       
   363     if ( err )
       
   364         {
       
   365         // Not sure about what to do. Very rare situation.
       
   366         MUS_LOG1( "mus: [MUSSRV] AvailabilityChangedL() leave code: %d",err )
       
   367         }
       
   368 
       
   369     // Do some indicator things...
       
   370     TRAP( err, IndicateAvailabilityL() );
       
   371     if ( err )
       
   372         {
       
   373         MUS_LOG1( "mus: [MUSSRV] IndicateAvailabilityL() leave code: %d",err )
       
   374         }
       
   375 
       
   376     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   377         AvailabilityError()" )	
       
   378     }
       
   379 
       
   380 // -----------------------------------------------------------------------------
       
   381 // From MMusAvaSettingsObserver
       
   382 // -----------------------------------------------------------------------------
       
   383 //
       
   384 MMusAvaSettingsObserver::TApplicationState CMusAvailabilityPluginManager::
       
   385     ApplicationState()
       
   386     {
       
   387     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   388         ApplicationState()" )
       
   389     MMusAvaSettingsObserver::TApplicationState ret = EApplicationStateNotDefined;   
       
   390     if ( iApplicationManager.ApplicationRunning() )
       
   391         {
       
   392         ret = EApplicationIsRunning;
       
   393         }
       
   394     else
       
   395         {
       
   396         ret = EApplicationNotRunning;
       
   397         }
       
   398     
       
   399     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   400         ApplicationState()" )
       
   401     return ret;
       
   402     }
       
   403 
       
   404 // -----------------------------------------------------------------------------
       
   405 // From MMusAvaSettingsObserver
       
   406 // -----------------------------------------------------------------------------
       
   407 //
       
   408 TBool CMusAvailabilityPluginManager::OptionAllowed()
       
   409     {
       
   410     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   411         OptionAllowed()" )
       
   412     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   413         OptionAllowed()" )
       
   414     // TBD: Check it out
       
   415     return iPlugin->AvailabilityState( MMusAvaObserver::EMusAvaOptionHandler )
       
   416         >= EMusAvaStatusNotExecuted;
       
   417     }
       
   418 
       
   419 // -----------------------------------------------------------------------------
       
   420 // From MMusAvaSettingsObserver
       
   421 // -----------------------------------------------------------------------------
       
   422 //
       
   423 void CMusAvailabilityPluginManager::StartApplicationL( 
       
   424         MultimediaSharing::TMusUseCase aUseCase )
       
   425     {
       
   426     iObserver.StartSharingWithUseCaseL( aUseCase );        
       
   427     }
       
   428 
       
   429 // -----------------------------------------------------------------------------
       
   430 // From MMusIndicatorObserver.
       
   431 // Starts live video sharing.
       
   432 // -----------------------------------------------------------------------------
       
   433 //
       
   434 void CMusAvailabilityPluginManager::StartLiveSharingL()
       
   435     {
       
   436     iObserver.StartSharingWithUseCaseL( MultimediaSharing::EMusLiveVideo );
       
   437     }
       
   438 
       
   439 // -----------------------------------------------------------------------------
       
   440 // This functions cross-links TAvailabilityStatus and
       
   441 // MultimediaSharing::TMusAvailabilityStatus
       
   442 // -----------------------------------------------------------------------------
       
   443 //
       
   444 MultimediaSharing::TMusAvailabilityStatus
       
   445         CMusAvailabilityPluginManager::MapAvailabilities(
       
   446                             TAvailabilityStatus aStatus )
       
   447     {
       
   448     MultimediaSharing::TMusAvailabilityStatus status;
       
   449     switch( aStatus )
       
   450         {
       
   451         case EMusAvaStatusNotExecuted:
       
   452             {
       
   453             MUS_LOG( "mus: [MUSSRV]     that is \
       
   454                 EMultimediaSharingNotAvailable" )
       
   455             status = EMultimediaSharingNotAvailable;
       
   456             break;
       
   457             }
       
   458         case EMusAvaFailureCode:
       
   459             {
       
   460             MUS_LOG( "mus: [MUSSRV]     that is \
       
   461                 EMusAvaFailureCode" )
       
   462             status = EMultimediaFailureCode;
       
   463             break;
       
   464             }
       
   465         case EMusAvaStatusInProgress: // EMusAvaStatusRegistering:
       
   466             {
       
   467             MUS_LOG( "mus: [MUSSRV]     that is ESipRegistrationPending" )
       
   468             if ( iPlugin->CurrentAvailability() > EMusAvaNameRegistration )
       
   469                 {
       
   470                 // SIP registration already performed, we're available
       
   471                 MUS_LOG( "mus: [MUSSRV]     that is \
       
   472                     EMultimediaSharingAvailable - a" )
       
   473                 status = EMultimediaSharingAvailable;
       
   474                 }
       
   475             else if ( 
       
   476                 iPlugin->CurrentAvailability() == EMusAvaNameRegistration )
       
   477                 {
       
   478                 // SIP register pending
       
   479                 MUS_LOG( "mus: [MUSSRV]     that is \
       
   480                     ESipRegistrationPending - a" )
       
   481                 status = ESipRegistrationPending;
       
   482                 }
       
   483             else
       
   484                 {
       
   485                 MUS_LOG( "mus: [MUSSRV]     that is \
       
   486                     EMultimediaSharingNotAvailable - a" )
       
   487                 status = EMultimediaSharingNotAvailable;
       
   488                 }
       
   489             break;
       
   490             }
       
   491         case EMusAvaStatusAvailable:
       
   492             {
       
   493             MUS_LOG( "mus: [MUSSRV]     that is EMultimediaSharingAvailable" )
       
   494             status = EMultimediaSharingAvailable;
       
   495             break;
       
   496             }
       
   497         case EMusAvaStatusNoSipProfile:
       
   498             {
       
   499             MUS_LOG( "mus: [MUSSRV]     that is EErrNoSipProfile" )
       
   500             status = EErrNoSipProfile;
       
   501             break;
       
   502             }
       
   503         case EMusAvaStatusNotRegistered:
       
   504             {
       
   505             MUS_LOG( "mus: [MUSSRV]     that is EErrSipRegistration" )
       
   506             status = EErrSipRegistration;
       
   507             break;
       
   508             }
       
   509         case EMusAvaStatusNoCall:
       
   510             {
       
   511             MUS_LOG( "mus: [MUSSRV]     that is EErrNoActiveCall" )
       
   512             status = EErrNoActiveCall;
       
   513             break;
       
   514             }
       
   515         case EMusAvaStatusCallOnHold:
       
   516             {
       
   517             MUS_LOG( "mus: [MUSSRV]     that is EErrCallOnHold" )
       
   518             status = EErrCallOnHold;
       
   519             break;
       
   520             }
       
   521         case EMusAvaOptionNotAvailable:
       
   522             {
       
   523             MUS_LOG( "mus: [MUSSRV]     that is EErrOptionAvailable" )
       
   524             status = ESipOptionsNotCapable;
       
   525             break;
       
   526             }
       
   527         case EMusAvaStatusConferenceCall:
       
   528             {
       
   529             MUS_LOG( "mus: [MUSSRV]     that is EErrConferenceCall" )
       
   530             status = EErrConferenceCall;
       
   531             break;
       
   532             }
       
   533         case EMusAvaStatusOptionsSent:
       
   534             {
       
   535             MUS_LOG( "mus: [MUSSRV]     that is ESipOptionsCapable" )
       
   536             status = ESipOptionsSent;
       
   537             break;
       
   538             }
       
   539         case EMusAvaStatusOptionsNotSent:
       
   540             {
       
   541             MUS_LOG( "mus: [MUSSRV]     that is ESipOptionsNotSent" )
       
   542             status = ESipOptionsNotSent;
       
   543             break;
       
   544             }
       
   545         case EMusAvaNetworkType:
       
   546             {
       
   547             MUS_LOG( "mus: [MUSSRV]     that is EErrNetwork" )
       
   548             status = EErrNetwork;
       
   549             break;
       
   550             }
       
   551         case EMusAvaRoamingError:
       
   552             {
       
   553             MUS_LOG( "mus: [MUSSRV]     that is EErrRoaming" )
       
   554             status = EErrRoaming;
       
   555             break;
       
   556             }
       
   557         case EMusAvaConnectionErr:
       
   558             {
       
   559             MUS_LOG( "mus: [MUSSRV]     that is EErrConnection" )
       
   560             status = EErrConnection;
       
   561             break;
       
   562             }
       
   563         case EMusActivationError:
       
   564             {
       
   565             MUS_LOG( "mus: [MUSSRV]     that is EErrActivation" )
       
   566             status = EErrActivation;
       
   567             break;
       
   568             }
       
   569         
       
   570         case EMusAvaManualActivation:
       
   571             {
       
   572             MUS_LOG( "mus: [MUSSRV]     that is Manual Activation" )
       
   573             status = EManualActivation;
       
   574             break;
       
   575             }
       
   576 
       
   577         case EMusAvaEdgeDtmStatusUnknown:
       
   578             {
       
   579             MUS_LOG( "mus: [MUSSRV]     Edge/DTM support" )
       
   580             status = EErrNetwork;
       
   581             break;
       
   582             }
       
   583         default:
       
   584             MUS_LOG( "mus: [MUSSRV]     that is unknown; returning \
       
   585                 KErrUnknown" )
       
   586             status = ( TMusAvailabilityStatus ) KErrUnknown;
       
   587         }
       
   588     return status;
       
   589     }
       
   590 
       
   591 
       
   592 // -----------------------------------------------------------------------------
       
   593 //
       
   594 // -----------------------------------------------------------------------------
       
   595 //
       
   596 void CMusAvailabilityPluginManager::UpdateSessionParametersL()
       
   597     {
       
   598     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   599              UpdateSessionParametersL()" )
       
   600     // clear the table
       
   601     iSessionParameters->Delete( 0, iSessionParameters->Count() );
       
   602 
       
   603     HBufC* telNumber = TelNumberLC();
       
   604     iSessionParameters->AppendL( *telNumber );
       
   605     CleanupStack::PopAndDestroy( telNumber );
       
   606 
       
   607     HBufC* sipAddresses = SipAddressesLC();
       
   608     iSessionParameters->AppendL( *sipAddresses );
       
   609     CleanupStack::PopAndDestroy( sipAddresses );
       
   610 
       
   611     MMusAvaSettings& settings = iPlugin->Settings();
       
   612 
       
   613     // append sip address proposal
       
   614     iSessionParameters->AppendL( settings.SipAddressProposal() );
       
   615 
       
   616     TBuf<KMaxInt32Length> contactIdBuf;
       
   617     contactIdBuf.Num( settings.ContactId() );
       
   618 
       
   619     // append contact id
       
   620     iSessionParameters->AppendL( contactIdBuf );
       
   621     // append video codec
       
   622     HBufC* videoCodecs = VideoCodecsLC();
       
   623     iSessionParameters->AppendL( *videoCodecs );
       
   624     CleanupStack::PopAndDestroy( videoCodecs );
       
   625 
       
   626     TBuf<KMaxInt32Length> sipProfileIdBuf;
       
   627     sipProfileIdBuf.Num( settings.SipProfileId() );
       
   628 
       
   629     MUS_LOG1("iSessionParameters -> SIP Profile ID = %d ",
       
   630         settings.SipProfileId() )
       
   631 
       
   632     // append sip profile id
       
   633     iSessionParameters->AppendL( sipProfileIdBuf );
       
   634 
       
   635     HBufC* contactName = ContactNameLC();
       
   636     iSessionParameters->AppendL( *contactName );
       
   637     CleanupStack::PopAndDestroy( contactName );
       
   638 
       
   639     TBuf<KMaxInt32Length> fastModeBuf;
       
   640     fastModeBuf.Num( settings.FastMode() );
       
   641     MUS_LOG1("iSessionParameters -> fast mode = %d ",
       
   642         settings.FastMode() )
       
   643 
       
   644     // append fast mode
       
   645     iSessionParameters->AppendL( fastModeBuf );
       
   646     
       
   647     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   648              UpdateSessionParametersL()" )
       
   649     }
       
   650 
       
   651 
       
   652 // -----------------------------------------------------------------------------
       
   653 //
       
   654 // -----------------------------------------------------------------------------
       
   655 //
       
   656 HBufC* CMusAvailabilityPluginManager::SipAddressesLC()
       
   657     {
       
   658     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   659         SipAddressesLC()" )
       
   660     HBufC* sipAddresses = NULL;
       
   661 
       
   662     // We have to keep up with KMaxPropertySize since it is advertised through
       
   663     // RProperty to UI process.
       
   664     TBuf<RProperty::KMaxPropertySize> tbuf;
       
   665     _LIT( KComma, "," );
       
   666 
       
   667     MMusAvaSettings& settings = iPlugin->Settings();
       
   668     const MDesCArray& addresses = settings.SipAddresses();
       
   669     MUS_LOG1( "mus: [MUSSRV]    addresses.MdcaCount() %d", 
       
   670         addresses.MdcaCount() )        
       
   671     
       
   672     for( TInt i=0;i<addresses.MdcaCount();i++ )
       
   673         {             
       
   674          // Check enough space available in tbuf
       
   675         if ( tbuf.MaxSize()-tbuf.Size() >
       
   676              addresses.MdcaPoint(i).Size()+KComma().Size())
       
   677             {
       
   678             if( i > 0) tbuf.Append( KComma() );                
       
   679             tbuf.Append( addresses.MdcaPoint( i ) );                
       
   680             }
       
   681         else
       
   682             {
       
   683             // if no space just break and do not continue further.
       
   684             break;
       
   685             }            
       
   686         }
       
   687     sipAddresses = tbuf.AllocLC();
       
   688 
       
   689     MUS_LOG_TDESC( "mus: [MUSSRV]       SIP Address: ", (*sipAddresses) );
       
   690     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   691         SipAddressesLC()" )
       
   692 
       
   693     return sipAddresses;
       
   694     }
       
   695 
       
   696 
       
   697 // -----------------------------------------------------------------------------
       
   698 //
       
   699 // -----------------------------------------------------------------------------
       
   700 //
       
   701 HBufC* CMusAvailabilityPluginManager::VideoCodecsLC()
       
   702     {
       
   703     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   704         VideoCodecsLC()" )
       
   705     HBufC* videoCodecs = NULL;
       
   706 
       
   707     // We have to keep up with KMaxPropertySize since it is advertised through
       
   708     // RProperty to UI process.
       
   709     TBuf<RProperty::KMaxPropertySize> tbuf;
       
   710     _LIT( KComma, "," );
       
   711 
       
   712     MMusAvaSettings& settings = iPlugin->Settings();
       
   713     const MDesCArray& codecs = settings.VideoCodecs();
       
   714     MUS_LOG1( "mus: [MUSSRV]    addresses.MdcaCount() %d", 
       
   715         codecs.MdcaCount() )        
       
   716     
       
   717     for( TInt i=0;i<codecs.MdcaCount();i++ )
       
   718         {             
       
   719          // Check enough space available in tbuf
       
   720         if ( tbuf.MaxSize()-tbuf.Size() >
       
   721              codecs.MdcaPoint(i).Size()+KComma().Size())
       
   722             {
       
   723             if( i > 0) tbuf.Append( KComma() );                
       
   724             tbuf.Append( codecs.MdcaPoint( i ) );                
       
   725             }
       
   726         else
       
   727             {
       
   728             // if no space just break and do not continue further.
       
   729             break;
       
   730             }            
       
   731         }
       
   732     videoCodecs = tbuf.AllocLC();
       
   733 
       
   734     MUS_LOG_TDESC( "mus: [MUSSRV]       Video codecs: ", (*videoCodecs) );
       
   735     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   736         VideoCodecsLC()" )
       
   737 
       
   738     return videoCodecs;
       
   739     }
       
   740 
       
   741 
       
   742 // -----------------------------------------------------------------------------
       
   743 //
       
   744 // -----------------------------------------------------------------------------
       
   745 //
       
   746 HBufC* CMusAvailabilityPluginManager::TelNumberLC()
       
   747     {
       
   748     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   749         TelNumberLC()" )
       
   750 
       
   751     MMusAvaSettings& settings = iPlugin->Settings();
       
   752 
       
   753     HBufC* telNumber = settings.TelNumber().AllocLC();
       
   754 
       
   755     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   756         TelNumberLC()" )
       
   757 
       
   758     return telNumber;
       
   759     }
       
   760 
       
   761 
       
   762 // -----------------------------------------------------------------------------
       
   763 //
       
   764 // -----------------------------------------------------------------------------
       
   765 //
       
   766 HBufC* CMusAvailabilityPluginManager::ContactNameLC()
       
   767     {
       
   768     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   769         ContactNameLC()" )
       
   770 
       
   771     MMusAvaSettings& settings = iPlugin->Settings();
       
   772 
       
   773     HBufC* contactName = settings.ContactName().AllocLC();
       
   774 
       
   775     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   776         ContactNameLC()" )
       
   777 
       
   778     return contactName;
       
   779     }
       
   780 
       
   781 // -----------------------------------------------------------------------------
       
   782 //
       
   783 // -----------------------------------------------------------------------------
       
   784 //
       
   785 void CMusAvailabilityPluginManager::IndicateAvailabilityL()
       
   786     {
       
   787 
       
   788     MUS_LOG( "mus: [MUSSRV]  -> CMusAvailabilityPluginManager::\
       
   789         IndicateAvailabilityL()" )
       
   790 
       
   791     if( PossibleToLaunch() )
       
   792         {
       
   793         MUS_LOG( "mus: [MUSSRV]    Status available" )
       
   794         if( !iIndicator )
       
   795             {
       
   796             MUS_LOG( "mus: [MUSSRV]    Create indicator" )
       
   797             iIndicator = CMusIndicatorApi::NewL( *this );
       
   798             iIndicator->IndicateAvailabilityL();
       
   799             }
       
   800         iApplicationManager.SetIndicatorStatusL( ETrue );
       
   801         }
       
   802     else
       
   803         {
       
   804         MUS_LOG( "mus: [MUSSRV]    Not available" )
       
   805         iApplicationManager.SetIndicatorStatusL( EFalse );
       
   806         delete iIndicator;
       
   807         iIndicator = NULL;
       
   808         }
       
   809 
       
   810     MUS_LOG( "mus: [MUSSRV]  <- CMusAvailabilityPluginManager::\
       
   811         IndicateAvailabilityL()" )
       
   812     }
       
   813