--- a/convergedconnectionhandler/cchclientapi/cchuinotif/src/cchuinotifierimpl.cpp Mon Jun 21 15:29:21 2010 +0300
+++ b/convergedconnectionhandler/cchclientapi/cchuinotif/src/cchuinotifierimpl.cpp Thu Aug 19 09:45:22 2010 +0300
@@ -26,6 +26,8 @@
#include <cenrepnotifyhandler.h>
#include <ctsydomainpskeys.h>
#include <crcseprofileregistry.h>
+#include <sipprofile.h>
+#include <sipmanagedprofileregistry.h>
#include <AknNotiferAppServerApplication.h> // Application Key enable/disable
#include "cchuilogger.h"
@@ -35,6 +37,7 @@
#include "cchuinotifconnectionhandler.h"
#include "cchuicallstatelistener.h"
+const TUint32 KBearerSettingWlanOnly = 1;
// ======== MEMBER FUNCTIONS ========
@@ -55,6 +58,7 @@
{
CCCHUiNotifierBase::ConstructL();
iCallStateListener = CCchUiCallStateListener::NewL( *this );
+ iSipProfileRegistry = CSIPManagedProfileRegistry::NewL( *this );
}
CCCHUiNotifierImpl::~CCCHUiNotifierImpl()
@@ -1104,21 +1108,69 @@
{
CCHUIDEBUG( "CCCHUiNotifierImpl::IsVoIPOverWCDMAAllowed - IN" );
+ TBool allowed( EFalse );
CRCSEProfileRegistry* cRCSEProfileRegistry;
cRCSEProfileRegistry = CRCSEProfileRegistry::NewLC();
- TBool ret = EFalse;
+
RPointerArray<CRCSEProfileEntry> entries;
+
+ CleanupStack::PushL( TCleanupItem ( ResetAndDestroy, &entries ) ); //CS
+
cRCSEProfileRegistry->FindByServiceIdL( iServiceId, entries );
if( entries.Count() )
{
- ret = CRCSEProfileEntry::EOn == entries[ 0 ]->iAllowVoIPoverWCDMA;
+ RArray<TSettingIds> settingIdArray;
+ CleanupClosePushL( settingIdArray ); // CS 3
+ settingIdArray = entries[ 0 ]->iIds;
+ TInt sipProfileId( KErrNotFound );
+ for ( TUint i( 0 ) ; i < settingIdArray.Count() ; i++ )
+ {
+ if ( settingIdArray[ i ].iProfileType ==
+ CRCSEProfileEntry::EProtocolSIP )
+ {
+ sipProfileId = settingIdArray[ i ].iProfileId;
+ }
+ }
+ TUint32 bearerSetting( KErrNone );
+ if ( KErrNotFound != sipProfileId )
+ {
+ CSIPProfile* profile =
+ iSipProfileRegistry->ProfileL( sipProfileId );
+ CleanupStack::PushL( profile ); // CS 4
+ User::LeaveIfError(
+ profile->GetParameter( KBearerType, bearerSetting ) );
+ if ( KBearerSettingWlanOnly != bearerSetting )
+ {
+ allowed = ETrue;
+ }
+ CleanupStack::PopAndDestroy( profile ); // CS 3
+ }
+ CleanupStack::Pop( &settingIdArray ); // CS 2
}
- entries.ResetAndDestroy();
- entries.Close();
- CleanupStack::PopAndDestroy(); //cRCSEProfileRegistry
+ CleanupStack::PopAndDestroy( &entries ); // clItem CS 1
+
+ CleanupStack::PopAndDestroy(); //cRCSEProfileRegistry CS 0
- return ret;
+ return allowed;
+ }
+
+// ---------------------------------------------------------------------------
+// For deleting RPointerArray in case of leave
+// ---------------------------------------------------------------------------
+//
+void CCCHUiNotifierImpl::ResetAndDestroy( TAny* aPointerArray )
+ {
+ CCHUIDEBUG( "CCCHUiNotifierImpl::ResetAndDestroy - IN" );
+ if ( aPointerArray )
+ {
+ RPointerArray<CRCSEProfileEntry>* array =
+ reinterpret_cast<RPointerArray<CRCSEProfileEntry>*>( aPointerArray );
+ TInt i = array->Count();
+ array->ResetAndDestroy();
+ array->Close();
+ }
+ CCHUIDEBUG( "CCCHUiNotifierImpl::ResetAndDestroy - OUT" );
}
// ---------------------------------------------------------------------------
@@ -1272,3 +1324,24 @@
CCHUIDEBUG( "CCCHUiNotifierImpl::CallStateChangedL - End" );
}
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver.
+// ---------------------------------------------------------------------------
+//
+void CCCHUiNotifierImpl::ProfileRegistryEventOccurred(
+ TUint32 /*aSIPProfileId*/,
+ TEvent /*aEvent*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver.
+// ---------------------------------------------------------------------------
+//
+void CCCHUiNotifierImpl::ProfileRegistryErrorOccurred(
+ TUint32 /*aSIPProfileId*/,
+ TInt /*aError*/ )
+ {
+ }