# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1266612274 -7200 # Node ID fc8c25e5a2e8cb4d2157188941d81165bdbd1b23 # Parent 7b872347d83b010ca466b4a859159775952baa0e Revision: 201003 Kit: 201007 diff -r 7b872347d83b -r fc8c25e5a2e8 callcontinuity/rom/vcc.iby --- a/callcontinuity/rom/vcc.iby Tue Feb 02 00:05:57 2010 +0200 +++ b/callcontinuity/rom/vcc.iby Fri Feb 19 22:44:34 2010 +0200 @@ -27,10 +27,10 @@ data=ZSYSTEM\install\vcc_stub.sis System\Install\vcc_stub.sis // wpvccprovisioning -ECOM_PLUGIN_UDEB(wpvccadapter.dll,wpvccadapter.rsc) +ECOM_PLUGIN(wpvccadapter.dll,wpvccadapter.rsc) // nsmldmvccadapter -ECOM_PLUGIN_UDEB(nsmldmvccadapter.dll,nsmldmvccadapter.rsc) +ECOM_PLUGIN(nsmldmvccadapter.dll,nsmldmvccadapter.rsc) // vcchotrigger file=ABI_DIR\BUILD_DIR\vcchotrigger.dll SHARED_LIB_DIR\vcchotrigger.dll diff -r 7b872347d83b -r fc8c25e5a2e8 callcontinuity/vcc/inc/cvccdirector.h --- a/callcontinuity/vcc/inc/cvccdirector.h Tue Feb 02 00:05:57 2010 +0200 +++ b/callcontinuity/vcc/inc/cvccdirector.h Fri Feb 19 22:44:34 2010 +0200 @@ -463,13 +463,7 @@ */ void CreateConferenceL( MCCPConferenceCall& aConferenceCall ); - /* - * Check if Voip was enabled/disabled and load/destroy it - * @since S60 3.2 - * @param aConferenceCall Created conference - */ - void CheckVoipEnabledL( TServiceId aServiceId ); - + private: // data @@ -551,8 +545,7 @@ */ CVccDtmfProvider* iDtmfProvider; - TBool iSvpLoaded; - + friend class T_CVccDirector; friend class T_CVccDTMFProvider; }; diff -r 7b872347d83b -r fc8c25e5a2e8 callcontinuity/vcc/src/cvccdirector.cpp --- a/callcontinuity/vcc/src/cvccdirector.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/callcontinuity/vcc/src/cvccdirector.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -62,7 +62,6 @@ { RUBY_DEBUG_BLOCKL( "CVccDirector::ConstructL" ); - iSvpLoaded = EFalse; FillCallProviderArrayL(); // Create the HO-trigger and connect to the wlan network @@ -143,7 +142,7 @@ //creating cs and sipvoipproviders //List implementations - //Only load cs plugin in the boot. SVP will be loaded when needed. + RImplInfoPtrArray implementations; TCleanupItem arrayCleanup( PointerArrayCleanup, &implementations ); CleanupStack::PushL( arrayCleanup ); @@ -154,7 +153,7 @@ { RUBY_DEBUG1( "- for loop counter value: %d", i ); CImplementationInformation *info = implementations[i]; - if ( info->ImplementationUid().iUid == KCSCallProviderPlugId ) + if ( IsVccOwnedPlugin ( info->ImplementationUid().iUid ) ) { CConvergedCallProvider* provider = CConvergedCallProvider::NewL( info->ImplementationUid() ); @@ -167,8 +166,6 @@ } CleanupStack::PopAndDestroy();//implementations - - TRAP_IGNORE( CheckVoipEnabledL( VccSettingsReader::VoIPServiceIdL() ) ); } // --------------------------------------------------------------------------- @@ -674,10 +671,9 @@ // Only VCC service changes are notified // ----------------------------------------------------------------------------- // -void CVccDirector::HandleNotifyChange( TServiceId aServiceId ) +void CVccDirector::HandleNotifyChange( TServiceId /*aServiceId*/ ) { RUBY_DEBUG_BLOCK( "CVccDirector::HandleNotifyChange" ); - CheckVoipEnabledL( aServiceId ); if( !IsPluginInitialized()) RetryInitialization(); @@ -979,90 +975,3 @@ iConference = CVccConferenceCall::NewL( aConferenceCall, iPerfArray ); aConferenceCall.AddObserverL( *iConference ); } - -// ----------------------------------------------------------------------------- -// CVccDirector::CheckVoipEnabledL -// ----------------------------------------------------------------------------- -// -void CVccDirector::CheckVoipEnabledL( TServiceId aServiceId ) - { - RUBY_DEBUG_BLOCK( "CVccDirector::CheckVoipEnabledL" ); - - TInt vccService = VccSettingsReader::VccServiceIdL(); - TInt voipService = 0; - if( vccService ) - { - voipService = VccSettingsReader::VoIPServiceIdL(); - } - if( voipService == aServiceId ) - { - RUBY_DEBUG0( "CVccDirector::HandleNotifyChange -- VoIP Service" ); - CSPProperty* property = CSPProperty::NewLC(); - CSPSettings* settings = CSPSettings::NewLC(); - settings->FindPropertyL( aServiceId, - ESubPropertyVoIPEnabled, *property ); - - TOnOff enabled( EOONotSet ); - property->GetValue( enabled ); - - CleanupStack::PopAndDestroy( settings ); - CleanupStack::PopAndDestroy( property ); - //if voip is enabled load also SVP and put it into providers array - if( enabled && !iSvpLoaded ) - { - RUBY_DEBUG0( "CVccDirector::HandleNotifyChange -- VoIP enabled, load SVP" ); - RImplInfoPtrArray implementations; - TCleanupItem arrayCleanup( PointerArrayCleanup, &implementations ); - CleanupStack::PushL( arrayCleanup ); - - CConvergedCallProvider::ListImplementationsL( implementations ); - - for( TInt i = 0; i < implementations.Count(); i++ ) - { - RUBY_DEBUG1( "- for loop counter value: %d", i ); - CImplementationInformation *info = implementations[i]; - if( info->ImplementationUid().iUid == KSipVoipCallProviderPlugId ) - { - CConvergedCallProvider* provider = - CConvergedCallProvider::NewL( info->ImplementationUid() ); - CleanupStack::PushL( provider ); - - User::LeaveIfError( iProviders.Append( provider ) ); - - CleanupStack::Pop( provider ); //provider - - if( iDtmfProvider ) - { - provider->DTMFProviderL( *iDtmfProvider ); - } - } - } - iSvpLoaded = ETrue; - CleanupStack::PopAndDestroy(); //implementations - } - //if voip is disabled, destroy SVP and remove it from providers array. - else if( !enabled ) - { - RUBY_DEBUG0( "CVccDirector::HandleNotifyChange -- VoIP disabled, destroy SVP" ); - - for( TInt i = 0; i < iProviders.Count(); i++ ) - { - if( iProviders[ i ]->Uid().iUid == KSipVoipCallProviderPlugId ) - { - delete iProviders[ i ]; - iProviders.Remove( i ); - iProviders.Compress(); - for( TInt a = 0; a < iInitialisedPlugins.Count(); a++ ) - { - if( iInitialisedPlugins[ a ] == KSipVoipCallProviderPlugId ) - { - iInitialisedPlugins.Remove( a ); - iInitialisedPlugins.Compress(); - } - } - iSvpLoaded = EFalse; - } - } - } - } - } diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscapplicationui/group/cscappui.mmp --- a/commsconfig/cscapplicationui/group/cscappui.mmp Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscapplicationui/group/cscappui.mmp Fri Feb 19 22:44:34 2010 +0200 @@ -25,7 +25,7 @@ TARGETTYPE exe UID 0x100039CE 0x10275458 -CAPABILITY CAP_APPLICATION TrustedUI NetworkControl +CAPABILITY CAP_APPLICATION TrustedUI NetworkControl AllFiles VENDORID VID_DEFAULT SOURCEPATH ../src diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscapplicationui/inc/cscserviceview.h --- a/commsconfig/cscapplicationui/inc/cscserviceview.h Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscapplicationui/inc/cscserviceview.h Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -21,6 +21,7 @@ #include #include "mcscservicecontainerobserver.h" +#include "mcscengtimerobserver.h" class CCSCAppUi; class CCSCDialog; @@ -43,7 +44,8 @@ */ NONSHARABLE_CLASS( CCSCServiceView ) : public CAknView, public MEikListBoxObserver, - public MCSCServiceContainerObserver + public MCSCServiceContainerObserver, + public MCSCEngTimerObserver { public: @@ -98,17 +100,8 @@ * @since S60 v5.1 */ void InitializeWithStartupParametersL(); - - /** - * Updates container data because of layout change. - * - * @since S60 v3.2 - * @param aType for layout change type - */ - void UpdateLayout( TInt aType ); - - + // from base class CAknView /** @@ -214,7 +207,8 @@ * @since S60 v3.2 */ void UpdateCbaL(); - + + protected: // from base class MEIkListBoxObserver @@ -230,8 +224,7 @@ void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); - - + private: @@ -300,6 +293,16 @@ void DoDeactivate(); + // from base class MCSCEngTimerObserver + + /** + * From MCSCEngTimerObserver. + * + * @since S60 v5.0 + */ + void TimerExpired(); + + private: // data /** @@ -359,6 +362,27 @@ */ RArray iOfferedPluginUids; + /** + * Pointer to timer + * Own. + */ + CCSCEngTimer* iEngTimer; + + /** + * Plugin info. + */ + TServicePluginInfo iPluginInfo; + + /** + * Next plugin index. + */ + TUint iNextPluginIndex; + + /** + * Uid. + */ + TUid iUid; + #ifdef _DEBUG friend class UT_CSC; #endif diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscapplicationui/src/cscappui.cpp --- a/commsconfig/cscapplicationui/src/cscappui.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscapplicationui/src/cscappui.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -211,17 +211,9 @@ // void CCSCAppUi::HandleResourceChangeL( TInt aType ) { - CSCDEBUG( "CCSCAppUi::HandleResourceChangeL - begin" ); - - if ( aType == KAknsMessageSkinChange || - aType == KEikDynamicLayoutVariantSwitch ) - { - iServiceView->UpdateLayout( aType ); - } + CSCDEBUG( "CCSCAppUi::HandleResourceChangeL" ); CAknViewAppUi::HandleResourceChangeL( aType ); - - CSCDEBUG( "CCSCAppUi::HandleResourceChangeL - end" ); } diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscapplicationui/src/cscservicecontainer.cpp --- a/commsconfig/cscapplicationui/src/cscservicecontainer.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscapplicationui/src/cscservicecontainer.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -551,6 +551,14 @@ mainPaneRect ); SetRect( mainPaneRect ); DrawNow(); + iListBox->DrawNow(); + + // Get handler to status pane. + CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); + if ( statusPane ) + { + statusPane->DrawNow(); + } } CCoeControl::HandleResourceChange( aType ); diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscapplicationui/src/cscserviceview.cpp --- a/commsconfig/cscapplicationui/src/cscserviceview.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscapplicationui/src/cscserviceview.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -151,27 +151,9 @@ delete iSettingsUi; delete iContainer; - - CSCDEBUG( "CCSCServiceView::~CCSCServiceView - end" ); - } - + delete iEngTimer; -// --------------------------------------------------------------------------- -// Updates container data because of layout change. -// --------------------------------------------------------------------------- -// -void CCSCServiceView::UpdateLayout( TInt aType ) - { - CSCDEBUG( "CCSCServiceView::UpdateLayout - begin" ); - - if ( iContainer ) - { - iContainer->SetRect( ClientRect() ); - TRAP_IGNORE( iContainer->UpdateServiceViewL() ); - iContainer->HandleResourceChange( aType ); - } - - CSCDEBUG( "CCSCServiceView::UpdateLayout - end" ); + CSCDEBUG( "CCSCServiceView::~CCSCServiceView - end" ); } @@ -513,70 +495,68 @@ TBool CCSCServiceView::HandleServiceConfigurationL( TUid aUid ) { CSCDEBUG( "CCSCServiceView::HandleServiceConfigurationL" ); - + TInt initializedCount( iServicePluginHandler.PluginCount( CCSCEngServicePluginHandler::EInitialized ) ); - + TBool canceled( EFalse ); TServicePluginInfo pluginInfo; - + + iUid = aUid; + if ( KNullUid != aUid ) { for ( TInt i( 0 ) ; i < initializedCount ; i++ ) { pluginInfo = iServicePluginHandler.ItemFromPluginInfoArray( i ); - + if ( aUid == pluginInfo.iPluginsUid && !pluginInfo.iProvisioned ) { iStartupHandler.ResetUid( CCSCEngStartupHandler::EPluginUid ); - + iOfferedPluginUids.Append( pluginInfo.iPluginsUid ); - - CCSCNoteUtilities::TCSCNoteType - type = CCSCNoteUtilities::ECSCConfigureServiceQuery; - - if ( CCSCNoteUtilities::ShowCommonQueryL( - type, pluginInfo.iProviderName ) ) - { - iServicePluginHandler.DoProvisioningL( - pluginInfo.iPluginsUid, KCSCServiceViewId ); - } - else - { - canceled = ETrue; - } + + iPluginInfo = pluginInfo; + + iNextPluginIndex = i; + + delete iEngTimer; + iEngTimer = NULL; + iEngTimer = CCSCEngTimer::NewL( *this ); + + iEngTimer->StartTimer( CCSCEngTimer::ENoteDelayTimer ); + + break; } } - + } else { for ( TInt j( 0 ) ; j < initializedCount ; j++ ) { pluginInfo = iServicePluginHandler.ItemFromPluginInfoArray( j ); - + if ( !pluginInfo.iProvisioned ) { iOfferedPluginUids.Append( pluginInfo.iPluginsUid ); - - CCSCNoteUtilities::TCSCNoteType type = - CCSCNoteUtilities::ECSCConfigureServiceQuery; - - if ( CCSCNoteUtilities::ShowCommonQueryL( - type, pluginInfo.iProviderName ) ) - { - iServicePluginHandler.DoProvisioningL( - pluginInfo.iPluginsUid, KCSCServiceViewId ); - } - else - { - canceled = ETrue; - } + + iPluginInfo = pluginInfo; + + iNextPluginIndex = j; + + delete iEngTimer; + iEngTimer = NULL; + iEngTimer = CCSCEngTimer::NewL( *this ); + + iEngTimer->StartTimer( CCSCEngTimer::ENoteDelayTimer ); + + break; } } } - - return canceled; + + return canceled; } @@ -790,12 +770,10 @@ { // launched from active idle iStartupHandler.SetStartedFromHomescreen( ETrue ); - ExecuteStartupActionsL( EFalse, ETrue ); } else { iStartupHandler.SetStartedFromHomescreen( EFalse ); - ExecuteStartupActionsL(); } } @@ -824,4 +802,59 @@ CSCDEBUG( "CCSCServiceView::DoDeactivate - end" ); } + + +// --------------------------------------------------------------------------- +// From class MCSCEngTimerObserver. +// CCSCServiceView::TimerExpired +// --------------------------------------------------------------------------- +// +void CCSCServiceView::TimerExpired() + { + CSCDEBUG( "CCSCServiceView::TimerExpired - begin" ); + iStartupHandler.ResetUid( CCSCEngStartupHandler::EPluginUid ); + iOfferedPluginUids.Append( iPluginInfo.iPluginsUid ); + + CCSCNoteUtilities::TCSCNoteType + type = CCSCNoteUtilities::ECSCConfigureServiceQuery; + + if ( CCSCNoteUtilities::ShowCommonQueryL( + type, iPluginInfo.iProviderName ) ) + { + iServicePluginHandler.DoProvisioningL( + iPluginInfo.iPluginsUid, KCSCServiceViewId ); + } + + iNextPluginIndex++; + TInt pluginCount = iServicePluginHandler.PluginCount( + CCSCEngServicePluginHandler::EInitialized ); + + for ( ; iNextPluginIndex < pluginCount; iNextPluginIndex++ ) + { + CSCDEBUG2( "CCSCServiceView::TimerExpired -iNextPluginIndex = %d", + iNextPluginIndex ); + + iPluginInfo = + iServicePluginHandler.ItemFromPluginInfoArray( iNextPluginIndex ); + + if ( KNullUid != iUid ) + { + if ( iUid == iPluginInfo.iPluginsUid && !iPluginInfo.iProvisioned ) + { + iEngTimer->StartTimer( CCSCEngTimer::ENoteDelayTimer ); + break; + } + } + else + { + if ( !iPluginInfo.iProvisioned ) + { + iEngTimer->StartTimer( CCSCEngTimer::ENoteDelayTimer ); + break; + } + } + } + CSCDEBUG( "CCSCServiceView::TimerExpired - end" ); + } + diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscengine/inc/cscengtimer.h --- a/commsconfig/cscengine/inc/cscengtimer.h Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscengine/inc/cscengtimer.h Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -40,7 +40,8 @@ */ enum TTimerType { - EConnectionMonitoringTimer = 0 + EConnectionMonitoringTimer = 0, + ENoteDelayTimer }; /** diff -r 7b872347d83b -r fc8c25e5a2e8 commsconfig/cscengine/src/cscengtimer.cpp --- a/commsconfig/cscengine/src/cscengtimer.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/commsconfig/cscengine/src/cscengtimer.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -21,6 +21,7 @@ #include "mcscengtimerobserver.h" const TInt KWaitConnectionToClose = 5000000; // 5 seconds +const TInt KWaitNoteDelayTime = 20000; // 20 ms // ======== MEMBER FUNCTIONS ======== @@ -92,6 +93,10 @@ { CTimer::After( KWaitConnectionToClose ); } + else if ( ENoteDelayTimer == aTimerType ) + { + CTimer::After( KWaitNoteDelayTime ); + } else { error = KErrArgument; diff -r 7b872347d83b -r fc8c25e5a2e8 sipvoipprovider/src/svpemergencysession.cpp --- a/sipvoipprovider/src/svpemergencysession.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/sipvoipprovider/src/svpemergencysession.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -453,6 +453,11 @@ TRAP_IGNORE( StartTimerL( KSVPTerminatingTime, KSVPRemoteEndDiedExpired ) ) } + else if ( CMceMediaStream::EStreaming == aStream.State() ) + { + SVPDEBUG1("CSVPEmergencySession::StreamStateChanged() - EStreaming") + StopTimer( KSVPRemoteEndDiedExpired ); + } } // --------------------------------------------------------------------------- diff -r 7b872347d83b -r fc8c25e5a2e8 sipvoipprovider/src/svpsessionbase.cpp --- a/sipvoipprovider/src/svpsessionbase.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/sipvoipprovider/src/svpsessionbase.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -3099,6 +3099,43 @@ delete iSession; iSession = aUpdatedSession; + // lets check should mic be muted + const RPointerArray& streamsArray = iSession->Streams(); + const TInt streamCount( streamsArray.Count() ); + if ( streamCount && iMuted ) + { + SVPDEBUG1( "CSVPSessionBase::SetUpdatedSession Mic should be muted" ) + + if ( IsMobileOriginated() ) + { + for ( TInt i = 0; i < streamCount; i++ ) + { + if ( streamsArray[i]->Source()->IsEnabled() ) + { + SVPDEBUG1( "CSVPSessionBase::SetUpdatedSession Mic is not muted" ) + SVPDEBUG1( " -> disable mic" ) + streamsArray[i]->Source()->DisableL(); + } + else + { + SVPDEBUG1( "CSVPSessionBase::SetUpdatedSession Mic is already" ) + SVPDEBUG1( " muted -> no need to disable mic" ) + } + } + } + else + { + // mute mic source + for ( TInt i = 0; i < streamCount; i++ ) + { + if ( streamsArray[i]->BoundStreamL().Source()->IsEnabled() ) + { + streamsArray[i]->BoundStreamL().Source()->DisableL(); + } + } + } + } + // Update changed session also to the transfercontroller if ( iTransferController ) { diff -r 7b872347d83b -r fc8c25e5a2e8 sipvoipprovider/svphold/src/svpholdconnectedstate.cpp --- a/sipvoipprovider/svphold/src/svpholdconnectedstate.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/sipvoipprovider/svphold/src/svpholdconnectedstate.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -211,7 +211,6 @@ // Not hold request SVPDEBUG1( "CSVPHoldConnectedState::RemoteSessionHoldL:"); SVPDEBUG1( "Not hold request" ); - User::Leave( KErrSVPHoldNotHoldRequest ); } diff -r 7b872347d83b -r fc8c25e5a2e8 voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp --- a/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp Tue Feb 02 00:05:57 2010 +0200 +++ b/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp Fri Feb 19 22:44:34 2010 +0200 @@ -1591,11 +1591,137 @@ TUint32 snapId( 0 ); err = sipManagedProf->GetParameter( KSIPSnapId, snapId ); + if ( KErrNone == err ) { iSnapId = snapId; iSnapIdSet = ETrue; } + else if ( KErrNotFound == err ) + { + TUint32 iapId( 0 ); + err = sipManagedProf->GetParameter( KSIPAccessPointId, iapId ); + + if ( KErrNone == err ) + { + // Copy connection method to default SNAP + RCmManagerExt cmManager; + CleanupClosePushL( cmManager ); + cmManager.OpenL(); + + TCmDefConnValue defConn; + cmManager.ReadDefConnL( defConn ); + iSnapId = defConn.iId; + iSnapIdSet = ETrue; + + RCmDestinationExt defaultSnap; + CleanupClosePushL( defaultSnap ); + defaultSnap = cmManager.DestinationL( iSnapId ); + + RCmConnectionMethodExt connection = + cmManager.ConnectionMethodL( iapId ); + CleanupClosePushL( connection ); + + // Get connection name + HBufC* connectionName = + connection.GetStringAttributeL( CMManager::ECmName ); + CleanupStack::PushL( connectionName ); + + RBuf parsedConnectionName; + CleanupClosePushL( parsedConnectionName ); + parsedConnectionName.CreateL( connectionName->Des().Length() ); + + // Parse possible unique number from end of connection + // method name. accesspoint(xx) --> accesspoint + TInt pos = connectionName->Des().Locate( '(' ); + if ( KErrNotFound != pos ) + { + parsedConnectionName.Copy( + connectionName->Des().Left( pos ) ); + } + else + { + parsedConnectionName.Copy( + connectionName->Des() ); + } + + // Check if connection method already exists in default snap + TBool matchFound( EFalse ); + TInt conMethodCount = defaultSnap.ConnectionMethodCount(); + + for ( TInt i( 0 ) ; + i < conMethodCount && matchFound == 0; i ++ ) + { + RCmConnectionMethodExt cm = + defaultSnap.ConnectionMethodL( i ); + CleanupClosePushL( cm ); + + HBufC* cmName = + cm.GetStringAttributeL( CMManager::ECmName ); + CleanupStack::PushL( cmName ); + + RBuf parsedCmName; + CleanupClosePushL( parsedCmName ); + parsedCmName.CreateL( cmName->Des().Length() ); + + // Parse possible unique number from end of connection + // method name. accesspoint(xx) --> accesspoint + TInt pos = cmName->Des().Locate( '(' ); + if ( KErrNotFound != pos ) + { + parsedCmName.Copy( cmName->Des().Left( pos ) ); + } + else + { + parsedCmName.Copy( cmName->Des() ); + } + + // Compare connection method names + if ( parsedConnectionName.Compare( parsedCmName ) == 0 ) + { + matchFound = ETrue; + } + + CleanupStack::PopAndDestroy( &parsedCmName ); + CleanupStack::PopAndDestroy( cmName ); + CleanupStack::PopAndDestroy( &cm ); + } + + CleanupStack::PopAndDestroy( &parsedConnectionName ); + CleanupStack::PopAndDestroy( connectionName ); + + // Add copy only if not already exists with same name + if ( !matchFound ) + { + defaultSnap.AddConnectionMethodL( + connection.CreateCopyL() ); + } + + // Change seamlessness level for linked WLAN IAP so that + // roaming is allowed without asking it from the user. + TUint32 bearerType = connection.GetIntAttributeL( + CMManager::ECmBearerType ); + + if ( KUidWlanBearerType == bearerType ) + { + connection.SetIntAttributeL( + CMManager::ECmSeamlessnessLevel, + CMManager::ESeamlessnessShowprogress ); + } + + defaultSnap.UpdateL(); + + CleanupStack::PopAndDestroy( &connection ); + CleanupStack::PopAndDestroy( &defaultSnap ); + CleanupStack::PopAndDestroy( &cmManager ); + + // Update sip profile to use default snap + sipManagedProf->SetParameter( KSIPAccessPointId, (TUint32)0 ); + sipManagedProf->SetParameter( KSIPSnapId, iSnapId ); + sipReg->SaveL( *sipManagedProf ); + } + } + CleanupStack::PopAndDestroy( sipManagedProf ); // CS:3 CleanupStack::Pop( sipProf ); // CS:2 sipProf = NULL;