--- 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
--- 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;
};
--- 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;
- }
- }
- }
- }
- }
--- 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
--- 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 <aknview.h>
#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<TUid> 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
--- 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" );
}
--- 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 );
--- 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" );
+ }
+
--- 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
};
/**
--- 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;
--- 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 );
+ }
}
// ---------------------------------------------------------------------------
--- 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<CMceMediaStream>& 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 )
{
--- 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 );
}
--- 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;