diff -r 8c9c07ad8b6b -r 65a3ef1d5bd0 voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp --- a/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp Mon Jun 21 15:29:21 2010 +0300 +++ b/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp Thu Aug 19 09:45:22 2010 +0300 @@ -18,7 +18,7 @@ // INCLUDE FILES #include -#include +#include #include #include // TInetAddr, TSockAddr #include @@ -73,6 +73,11 @@ const TUint32 KIMLaunchUid = 0x200255D0; const TInt KIMSettingsId = 1; +// Bearer related constants +const TUint32 KBearerNotSpecified = 0; +const TUint32 KBearerWlanOnly = 1; +const TUint32 KBearerCellularOnly = 2; + // Following lines are for enabling debug prints. #ifdef _DEBUG #define DBG_PRINT(p) RDebug::Print(_L(p)) @@ -877,9 +882,22 @@ priorityArray.Append( iCodecs[codecIndex]->iPriorityIndex ); } priorityArray.Sort(); + + //delete possible duplicate priority index + for ( TInt index = 0; index < priorityArray.Count()-1; ++index ) + { + TInt tmpIndex = index + 1; + while ( tmpIndex < priorityArray.Count() && + priorityArray[tmpIndex] == priorityArray[index] ) + { + priorityArray.Remove( tmpIndex ); + } + } + RPointerArray tmpArray; - for ( TInt priorityIndex = 0; priorityIndex < numberOfCodecs; + TInt numberOfPriority = priorityArray.Count(); + for ( TInt priorityIndex = 0; priorityIndex < numberOfPriority; priorityIndex++ ) { for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; @@ -992,13 +1010,6 @@ cRCSEProfileEntry->iVoIPPluginUID = iVoIPPluginUid; } - // AllowVoIPOverWCDMA - if ( KNotSet != iAllowVoIPOverWCDMA ) - { - cRCSEProfileEntry->iAllowVoIPoverWCDMA = - static_cast( iAllowVoIPOverWCDMA ); - } - // VoIPDigits if ( KNotSet != iVoIPDigits ) { @@ -1569,6 +1580,7 @@ CleanupStack::PushL( sipManagedProf ); // CS:4 sipManagedProf->SetParameter( KSIPSnapId, iSnapId ); sipManagedProf->SetParameter( KSIPAccessPointId, (TUint32)0 ); + DBG_PRINT2( "CWPVoIPItem::SavingFinalizedL - SNAP ID (1): %d", iSnapId ); sipReg->SaveL( *sipManagedProf ); CleanupStack::PopAndDestroy( sipManagedProf ); // CS:3 CleanupStack::Pop( sipProf ); // CS:2 @@ -1718,6 +1730,7 @@ // Update sip profile to use default snap sipManagedProf->SetParameter( KSIPAccessPointId, (TUint32)0 ); sipManagedProf->SetParameter( KSIPSnapId, iSnapId ); + DBG_PRINT2( "CWPVoIPItem::SavingFinalizedL - SNAP ID (2): %d", iSnapId ); sipReg->SaveL( *sipManagedProf ); } } @@ -1727,6 +1740,7 @@ sipProf = NULL; // sipReg, sipObs CleanupStack::PopAndDestroy( 2, sipObs ); // CS:0 + sipReg = NULL; } if ( iSnapIdSet ) @@ -1772,6 +1786,51 @@ DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ Service provider entry updated" ); + DBG_PRINT2( "CWPVoIPItem::SavingFinalizedL - \ + set allow VoIP over wcdma iAlowVoIPOverWCDMA=%d", iAllowVoIPOverWCDMA ); + + //*********************** + // Allow VoIP over WCDMA + //*********************** + CSIPProfileRegistryObserver* sipObs = + CSIPProfileRegistryObserver::NewLC(); // CS:1 + CSIPManagedProfileRegistry* sipReg = + CSIPManagedProfileRegistry::NewLC( *sipObs ); // CS:2 + CSIPProfile* sipProf = NULL; + sipProf = sipReg->ProfileL( iSipId ); + CleanupStack::PushL( sipProf ); // CS:3 + CSIPManagedProfile* sipManagedProf = + static_cast( sipProf ); + CleanupStack::PushL( sipManagedProf ); // CS:4 + + if ( iAllowVoIPOverWCDMA == 1 ) + { + DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ + set bearer not specified" ); + + // If VoIP is allowed over wcdma set bearer type to sip as + // not specified. + sipManagedProf->SetParameter( KBearerType, KBearerNotSpecified ); + } + else + { + DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ + set bearer setting wlan only" ); + + // If not allowed set bearer type to sip as wlan only + sipManagedProf->SetParameter( KBearerType, KBearerWlanOnly ); + } + + sipReg->SaveL( *sipManagedProf ); + CleanupStack::PopAndDestroy( sipManagedProf ); // CS:3 + CleanupStack::Pop( sipProf ); // CS:2 + sipProf = NULL; + // sipReg, sipObs + CleanupStack::PopAndDestroy( 2, sipObs ); // CS:0 + + DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ + bearer settings set" ); + // property, spEntry spSettings, cRCSEProfileEntry, cRCSEProfileRegistry CleanupStack::PopAndDestroy( 5, cRCSEProfileRegistry ); // CS:0 iSipIdSet = EFalse;