diff -r 65a3ef1d5bd0 -r f742655b05bf voipplugins/sipconnectionprovider/src/scpsettinghandler.cpp --- a/voipplugins/sipconnectionprovider/src/scpsettinghandler.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1103 +0,0 @@ -/* -* Copyright (c) 2002-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" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "scpsettinghandler.h" -#include "scpservice.h" -#include "scpsubservice.h" -#include "scplogger.h" -#include "scputility.h" -#include "scpservicehandlerbase.h" -#include "sipconnectionprovideruids.hrh" -#include "scpprofilehandler.h" - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::CScpSettingHandler -// ----------------------------------------------------------------------------- -// -CScpSettingHandler::CScpSettingHandler( CScpProfileHandler& aProfileHandler ) : - iProfileHandler( aProfileHandler ) - { - SCPLOGSTRING( "CScpSettingHandler::CScpSettingHandler" ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::NewL -// ----------------------------------------------------------------------------- -// -CScpSettingHandler* CScpSettingHandler::NewL( CScpProfileHandler& aProfileHandler ) - { - SCPLOGSTRING( "CScpSettingHandler::NewL()" ); - - CScpSettingHandler* self = new( ELeave ) CScpSettingHandler( aProfileHandler ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::~CScpSettingHandler -// ----------------------------------------------------------------------------- -// -CScpSettingHandler::~CScpSettingHandler() - { - SCPLOGSTRING( "CScpSettingHandler::~CScpSettingHandler" ); - - delete iSpsVoIPUtils; - delete iSpSettings; - delete iRcseProfileEntry; - delete iRcseProfileRegistry; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::ConstructL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::ConstructL() - { - SCPLOGSTRING("CScpSettingHandler::ConstructL" ); - - iRcseProfileRegistry = CRCSEProfileRegistry::NewL(); - iRcseProfileEntry = CRCSEProfileEntry::NewL(); - - iSpSettings = CSPSettings::NewL(); - iSpsVoIPUtils = CSPSettingsVoIPUtils::NewL(); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetSipProfileIdByTypeL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetSipProfileIdByTypeL( TUint32 aServiceId, - TCCHSubserviceType aSubServiceType, - TUint32& aSipId ) const - { - SCPLOGSTRING3( "CScpSettingHandler::GetSipProfileIdByTypeL service id :%i type %d", - aServiceId, aSubServiceType ); - - switch ( aSubServiceType ) - { - case ECCHVoIPSub: - case ECCHIMSub: - { - GetVoipSipProfileIdL( aServiceId, aSipId ); - } - break; - - case ECCHVMBxSub: - { - GetVmbxSipProfileIdL( aServiceId, aSipId ); - } - break; - - case ECCHPresenceSub: - { - GetPresenceSipProfileIdL( aServiceId, aSipId ); - } - break; - - case ECCHUnknown: - { - GetUnknownSipProfileIdL( aServiceId, aSipId ); - } - break; - - default: - __ASSERT_DEBUG( EFalse, User::Panic( KNullDesC, KErrGeneral ) ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetSPSettingsIntPropertyL -// ----------------------------------------------------------------------------- -// - void CScpSettingHandler::GetSPSettingsIntPropertyL( TUint32 aServiceId, - TServicePropertyName aPropertyName, - TInt& aProperty ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetSPSettingsIntPropertyL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - TInt result = iSpSettings->FindEntryL( aServiceId, *entry ); - - if ( result == KErrNone ) - { - // Get asked property - const CSPProperty* property = NULL; - result = entry->GetProperty( property, aPropertyName ); - - if ( result == KErrNone && property ) - { - TInt value( 0 ); - property->GetValue( value ); - aProperty = value; - } - else - { - User::Leave( KErrNotFound ); - } - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetVoipSipProfileIdL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetVoipSipProfileIdL( TUint32 aServiceId, - TUint32& aSipId ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetVoipSipProfileIdL" ); - - RPointerArray entries; - - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( TScpUtility::ResetAndDestroyEntries, - &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aServiceId, entries ); - - if ( entries.Count() ) - { - CRCSEProfileEntry* entry = entries[0]; - if ( entry->iIds.Count() > 0 ) - { - aSipId = entry->iIds[0].iProfileId; - } - else - { - User::Leave( KErrNotFound ); - } - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( &entries ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetVmbxSipProfileIdL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetVmbxSipProfileIdL( TUint32 aServiceId, - TUint32& aSipId ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetVmbxSipProfileIdL" ); - - TInt sipId; - GetSPSettingsIntPropertyL( aServiceId, ESubPropertyVMBXSettingsId, sipId ); - aSipId = sipId; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetPresenceSipProfileIdL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetPresenceSipProfileIdL( TUint32 aServiceId, - TUint32& aSipId ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetPresenceSipProfileIdL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - TInt result = iSpSettings->FindEntryL( aServiceId, *entry ); - if ( result == KErrNone ) - { - // Get presence setting id for presence service - const CSPProperty* property = NULL; - result = entry->GetProperty( property, ESubPropertyPresenceSettingsId ); - - if ( result == KErrNone && property ) - { - TInt presId; - property->GetValue( presId ); - - //Found out what is sip id in presencesettings - TPresSettingsSet mySet; - User::LeaveIfError( PresSettingsApi::SettingsSetL( presId, mySet )); - - TInt sipId( 0 ); - sipId = mySet.iSipProfile; - aSipId = (TUint32)(sipId); - } - else - { - User::Leave( KErrNotFound ); - } - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetUnknownSipProfileIdL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetUnknownSipProfileIdL( TUint32 aServiceId, - TUint32& aSipId ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetVoipSipProfileIdL" ); - - TInt result( KErrNone ); - TUint32 genericSipId( KErrNone ); - RArray< TInt > sipIds; - CleanupClosePushL( sipIds ); - - TRAP( result, GetSipProfileIdByTypeL( aServiceId, ECCHVoIPSub, genericSipId ) ); - - if ( result == KErrNone ) - { - sipIds.AppendL( genericSipId ); - } - else if ( KErrNoMemory == result ) - { - User::Leave( KErrNoMemory ); - } - - TRAP( result, GetSipProfileIdByTypeL( aServiceId, ECCHVMBxSub, genericSipId ) ); - - if ( result == KErrNone ) - { - sipIds.AppendL( genericSipId ); - } - else if ( KErrNoMemory == result ) - { - User::Leave( KErrNoMemory ); - } - - TRAP( result, GetSipProfileIdByTypeL( aServiceId, ECCHPresenceSub, genericSipId ) ); - - if ( result == KErrNone ) - { - sipIds.AppendL( genericSipId ); - } - else if ( KErrNoMemory == result ) - { - User::Leave( KErrNoMemory ); - } - - // Check if all the sip profiles ids for different subservice types - // are the same - if ( sipIds.Count() > 0 ) - { - result = KErrNone; - aSipId = sipIds[0]; - - for( TInt i=0; i KErrNotFound, - User::Panic( KNullDesC, KErrNotFound ) ); - - if ( !aService.ContainsSubServiceType( ECCHVoIPSub ) && - ( aSubServiceType == ECCHVoIPSub || aSubServiceType == ECCHUnknown ) ) - { - SCPLOGSTRING( "CScpSettingHandler::UpdateSettingsL voip " ); - UpdateVoIPSettingsL( aService ); - } - - if ( !aService.ContainsSubServiceType( ECCHIMSub ) && - ( ECCHIMSub == aSubServiceType || ECCHUnknown == aSubServiceType ) ) - { - SCPLOGSTRING( "CScpSettingHandler::UpdateSettingsL IM" ); - UpdateImSettingsL( aService ); - } - - if ( !aService.ContainsSubServiceType( ECCHVMBxSub ) && - ( aSubServiceType == ECCHVMBxSub || aSubServiceType == ECCHUnknown ) ) - { - SCPLOGSTRING( "CScpSettingHandler::UpdateSettingsL vmbx " ); - UpdateVmbxSettingsL( aService ); - } - - if ( !aService.ContainsSubServiceType( ECCHPresenceSub ) && - (aSubServiceType == ECCHPresenceSub || aSubServiceType == ECCHUnknown ) ) - { - SCPLOGSTRING( "CScpSettingHandler::UpdateSettingsL presence x " ); - UpdatePresenceSettingsL( aService ); - } - - if ( aService.SubServiceCount() == 0 ) - { - User::Leave( KErrNotFound ); - } - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdateXdmUsernameL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdateXdmUsernameL( CScpService& aService, - TCCHSubserviceType aSubServiceType, const TDesC8& aUsername ) - { - SCPLOGSTRING2( "CScpSettingHandler::UpdateXdmUsernameL, service id: %d", - aService.ServiceId() ); - - if ( aService.ContainsSubServiceType( ECCHPresenceSub ) && - ( aSubServiceType == ECCHPresenceSub || - aSubServiceType == ECCHUnknown ) ) - { - CSPEntry* entry = CSPEntry::NewLC(); - User::LeaveIfError( iSpSettings->FindEntryL( - aService.ServiceId(), *entry ) ); - - if ( ArePresenceSettingsValid( *entry ) ) - { - TInt presenceSettingsId = GetPresenceSettingsId( *entry ); - - if ( presenceSettingsId != KErrNotFound ) - { - // Find out the sip profile that the presence is using - TPresSettingsSet mySet; - TRAPD( result, - PresSettingsApi::SettingsSetL( - presenceSettingsId, mySet ) ); - - if ( KErrNone == result && mySet.iSipProfile > 0 ) - { - // check XDM settings are valid - CXdmSettingsCollection* xdmCollection = NULL; - TRAPD( xdmResult, xdmCollection = - TXdmSettingsApi::SettingsCollectionL( - mySet.iXDMSetting ) ); - - if ( KErrNone == xdmResult && xdmCollection ) - { - CleanupStack::PushL( xdmCollection ); - - if ( iProfileHandler.ProfileExists( - mySet.iSipProfile ) ) - { - RBuf8 formattedUsername; - CleanupClosePushL( formattedUsername ); - - if( !TScpUtility::CheckSipUsername( aUsername ) ) - { - // Since username is returned with prefix and - // domain, it needs to be possible to also set - // it with prefix and domain. Strip prefix - // and domain from user aor if found. Prefix - // might be sip or sips so search by colon. - User::LeaveIfError( - TScpUtility::RemovePrefixAndDomain( - aUsername, formattedUsername ) ); - } - else - { - formattedUsername.CreateL( - aUsername.Length() ); - formattedUsername.Copy( aUsername ); - } - - RBuf userName; - CleanupClosePushL( userName ); - userName.CreateL( formattedUsername.Length() ); - userName.Copy( formattedUsername ); - - // Update username to XDM-setting. - TXdmSettingsApi::UpdatePropertyL( - mySet.iXDMSetting, - userName, - EXdmPropAuthName ); - - CleanupStack::PopAndDestroy( &userName ); - CleanupStack::PopAndDestroy( &formattedUsername ); - - SCPLOGSTRING( - "CScpSettingHandler::UpdateXdmUsernameL - DONE" ); - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( xdmCollection ); - } - } - } - } - CleanupStack::PopAndDestroy( entry ); - } - - if ( aService.SubServiceCount() == 0 ) - { - User::Leave( KErrNotFound ); - } - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdateXdmPasswordL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdateXdmPasswordL( CScpService& aService, - TCCHSubserviceType aSubServiceType, const TDesC8& aPassword ) - { - SCPLOGSTRING2( "CScpSettingHandler::UpdateXdmPasswordL, service id: %d", - aService.ServiceId() ); - - if ( aService.ContainsSubServiceType( ECCHPresenceSub ) && - ( aSubServiceType == ECCHPresenceSub || - aSubServiceType == ECCHUnknown ) ) - { - SCPLOGSTRING( "CScpSettingHandler::UpdateXdmPasswordL, presence" ); - - CSPEntry* entry = CSPEntry::NewLC(); - User::LeaveIfError( iSpSettings->FindEntryL( - aService.ServiceId(), *entry ) ); - - if ( ArePresenceSettingsValid( *entry ) ) - { - TInt presenceSettingsId = GetPresenceSettingsId( *entry ); - - if ( presenceSettingsId != KErrNotFound ) - { - // Find out the sip profile that the presence is using - TPresSettingsSet mySet; - - TRAPD( result, - PresSettingsApi::SettingsSetL( - presenceSettingsId, mySet ) ); - - if ( KErrNone == result && mySet.iSipProfile > 0 ) - { - // check XDM settings are valid - CXdmSettingsCollection* xdmCollection = NULL; - TRAPD( xdmResult, xdmCollection = - TXdmSettingsApi::SettingsCollectionL( - mySet.iXDMSetting ) ); - - if ( KErrNone == xdmResult && xdmCollection ) - { - CleanupStack::PushL( xdmCollection ); - - if ( iProfileHandler.ProfileExists( - mySet.iSipProfile ) ) - { - RBuf passwordBuf; - CleanupClosePushL( passwordBuf ); - passwordBuf.CreateL( aPassword.Length() ); - passwordBuf.Copy( aPassword ); - - // Update password to XDM-setting - TXdmSettingsApi::UpdatePropertyL( - mySet.iXDMSetting, - passwordBuf, - EXdmPropAuthSecret ); - - CleanupStack::PopAndDestroy( &passwordBuf ); - - SCPLOGSTRING( - "CScpSettingHandler::UpdateXdmPasswordL - DONE" ); - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( xdmCollection ); - } - } - } - } - CleanupStack::PopAndDestroy( entry ); - } - - if ( aService.SubServiceCount() == 0 ) - { - User::Leave( KErrNotFound ); - } - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdatePresenceSettingsL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdatePresenceSettingsL( CScpService& aService ) const - { - SCPLOGSTRING( "CScpSettingHandler::UpdatePresenceSettingsL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - - if ( iSpSettings->FindEntryL( aService.ServiceId(), *entry ) == KErrNone ) - { - if ( ArePresenceSettingsValid( *entry ) ) - { - TInt presenceSettingsId = GetPresenceSettingsId( *entry ); - - if ( presenceSettingsId != KErrNotFound ) - { - // Find out the sip profile that the presence is using - TPresSettingsSet mySet; - - TRAPD( result, - PresSettingsApi::SettingsSetL( presenceSettingsId, mySet ) ); - - if ( KErrNone == result && mySet.iSipProfile > 0 ) - { - // check XDM settings are valid - CXdmSettingsCollection* xdmCollection = NULL; - TRAPD( xdmResult, xdmCollection = - TXdmSettingsApi::SettingsCollectionL( mySet.iXDMSetting ) ); - - if ( KErrNone == xdmResult && xdmCollection ) - { - CleanupStack::PushL( xdmCollection ); - - if ( iProfileHandler.ProfileExists( mySet.iSipProfile ) ) - { - CScpSubService& presenceService = aService.AddSubServiceL( ECCHPresenceSub ); - - presenceService.SetSipProfileId( mySet.iSipProfile ); - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( xdmCollection ); - } - } - } - } - } - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::ArePresenceSettingsValid -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::ArePresenceSettingsValid( const CSPEntry& aEntry ) const - { - SCPLOGSTRING( "CScpSettingHandler::ArePresenceSettingsValid" ); - - const CSPProperty* property = NULL; - - // Make sure that the this is the correct plugin - TInt result = aEntry.GetProperty( property, EPropertyPresenceSubServicePluginId ); - - if ( result == KErrNone && property ) - { - TInt pluginId = 0; - property->GetValue( pluginId ); - - SCPLOGSTRING2( "Presence sub service plugin UID: 0x%x", pluginId ); - - if ( pluginId == KSIPConnectivityPluginImplUid ) - { - return ETrue; - } - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetPresenceSettingsId -// ----------------------------------------------------------------------------- -// -TInt CScpSettingHandler::GetPresenceSettingsId( const CSPEntry& aEntry ) const - { - SCPLOGSTRING( "CScpSettingHandler::GetPresenceSettingsId" ); - - const CSPProperty* property = NULL; - TInt result = aEntry.GetProperty( property, ESubPropertyPresenceSettingsId ); - - if ( property && result == KErrNone ) - { - TInt presenceSettingsId = 0; - result = property->GetValue( presenceSettingsId ); - - if ( result == KErrNone ) - { - return presenceSettingsId; - } - } - - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdateVoIPSettingsL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdateVoIPSettingsL( CScpService& aService ) const - { - SCPLOGSTRING( "CScpSettingHandler::UpdateVoIPSettingsL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - - if ( iSpSettings->FindEntryL( aService.ServiceId(), *entry ) == KErrNone ) - { - if ( AreVoipSettingsValid( *entry ) ) - { - RPointerArray entries; - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( TScpUtility::ResetAndDestroyEntries, - &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aService.ServiceId(), entries ); - - TInt idsCount = entries.Count(); - - if ( idsCount > 0 ) - { - CRCSEProfileEntry* profileEntry = entries[ 0 ]; - - if ( profileEntry && profileEntry->iIds.Count() ) - { - TSettingIds& settingId = profileEntry->iIds[ 0 ]; - - __ASSERT_DEBUG( settingId.iProfileId > 0, - User::Panic( KNullDesC, KErrGeneral ) ); - - if ( iProfileHandler.ProfileExists( settingId.iProfileId ) ) - { - CScpSubService& voipService = aService.AddSubServiceL( ECCHVoIPSub ); - - voipService.SetSipProfileId( settingId.iProfileId ); - } - else - { - User::Leave( KErrNotFound ); - } - } - } - - CleanupStack::PopAndDestroy( &entries ); - } - } - - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::AreVoipSettingsValid -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::AreVoipSettingsValid( const CSPEntry& aEntry ) const - { - SCPLOGSTRING( "CScpSettingHandler::AreVoipSettingsValid" ); - - const CSPProperty* property = NULL; - - // Make sure that the this is the correct plugin - TInt result = aEntry.GetProperty( property, EPropertyVoIPSubServicePluginId ); - - if ( result == KErrNone && property ) - { - TInt pluginId = 0; - property->GetValue( pluginId ); - - SCPLOGSTRING3( "VoIP sub service plugin UID: 0x%x this 0x%x", pluginId, KSIPConnectivityPluginImplUid ); - - if ( pluginId == KSIPConnectivityPluginImplUid ) - { - return ETrue; - } - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdateVmbxSettingsL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdateVmbxSettingsL( CScpService& aService ) const - { - SCPLOGSTRING( "CScpSettingHandler::UpdateVmbxSettingsL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - - if ( iSpSettings->FindEntryL( aService.ServiceId(), *entry ) == KErrNone ) - { - if( AreVmbxSettingsValid( *entry ) ) - { - const CSPProperty* property = NULL; - - // Get sip profile id for the vmbx service - TInt result = entry->GetProperty( property, ESubPropertyVMBXSettingsId ); - - if ( result == KErrNone && property ) - { - TInt sipProfileId( 0 ); - property->GetValue( sipProfileId ); - - __ASSERT_DEBUG( sipProfileId > 0, User::Panic( KNullDesC, KErrGeneral ) ); - - if ( iProfileHandler.ProfileExists( sipProfileId ) ) - { - CScpSubService& vmbxService = aService.AddSubServiceL( ECCHVMBxSub ); - - vmbxService.SetSipProfileId( sipProfileId ); - } - else - { - User::Leave( KErrNotFound ); - } - } - } - } - - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::AreVmbxSettingsValid -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::AreVmbxSettingsValid( const CSPEntry& aEntry ) const - { - SCPLOGSTRING( "CScpSettingHandler::AreVmbxSettingsValid" ); - - const CSPProperty* property = NULL; - - // Make sure that the this is the correct plugin - TInt result = aEntry.GetProperty( property, EPropertyVMBXSubServicePluginId ); - - if ( result == KErrNone && property ) - { - TInt pluginId = 0; - property->GetValue( pluginId ); - - SCPLOGSTRING2( "VMBx sub service plugin UID: 0x%x", pluginId ); - - if ( pluginId == KSIPConnectivityPluginImplUid ) - { - // Make sure that the MWI address is found - result = aEntry.GetProperty( property, ESubPropertyVMBXMWIAddress ); - - if ( result == KErrNone && property ) - { - return ETrue; - } - } - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::ServiceExistsL -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::ServiceExistsL( TUint32 aServiceId ) const - { - SCPLOGSTRING2( "CScpSettingHandler::ServiceExistsL id: %d", aServiceId ); - - TBool serviceExists( EFalse ); - - RIdArray serviceIds; - iSpSettings->FindServiceIdsL( serviceIds ); - - for ( TInt i=0; i& aServiceIds ) const - { - SCPLOGSTRING2( "CScpSettingHandler::GetServiceIds sip id: %d", aSipId ); - - TRAPD( result, GetServiceIdsL( aSipId, aServiceIds ) ); - - return result; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::GetServiceIdsL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::GetServiceIdsL( TUint32 aSipId, - RArray< TUint32 >& aServiceIds ) const - { - SCPLOGSTRING2( "CScpSettingHandler::GetServiceIdsL sip id: %d", aSipId ); - - CleanupClosePushL( aServiceIds ); - - RArray profileIdArray; - CleanupClosePushL( profileIdArray ); - - iRcseProfileRegistry->GetAllIdsL( profileIdArray ); - - TBool found( EFalse ); - - //VoIP profile count - for ( TInt i=0; i < profileIdArray.Count() && !found; i++ ) - { - // profileEntry is reseted by rcse before the search - iRcseProfileRegistry->FindL( profileIdArray[i], - *iRcseProfileEntry ); - - for ( TInt j=0; j < iRcseProfileEntry->iIds.Count(); j++ ) - { - if ( aSipId == iRcseProfileEntry->iIds[j].iProfileId ) - { - aServiceIds.Append( profileIdArray[i] ); - } - } - } - - if ( !aServiceIds.Count() ) - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( &profileIdArray ); - CleanupStack::Pop( &aServiceIds ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::IsVoIPSupported -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::IsVoIPSupported() const - { - return iSpsVoIPUtils->IsVoIPSupported(); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::IsUahTerminalTypeDefinedL -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::IsUahTerminalTypeDefinedL( - TUint32 aServiceId ) const - { - TBool defined( EFalse ); - RPointerArray entries; - - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( TScpUtility::ResetAndDestroyEntries, - &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aServiceId, entries ); - - if ( entries.Count() ) - { - // SIP VoIP User Agent header: terminal type display - defined = entries[0]->iSIPVoIPUAHTerminalType; - } - - CleanupStack::PopAndDestroy( &entries ); - return defined; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::IsUahWLANMacDefinedL -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::IsUahWLANMacDefinedL( - TUint32 aServiceId ) const - { - TBool defined( EFalse ); - RPointerArray entries; - - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( TScpUtility::ResetAndDestroyEntries, - &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aServiceId, entries ); - - if ( entries.Count() ) - { - // SIP VoIP User Agent header WLAN MAC address display - defined = entries[0]->iSIPVoIPUAHeaderWLANMAC; - } - - CleanupStack::PopAndDestroy( &entries ); - return defined; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UahStringLengthL -// ----------------------------------------------------------------------------- -// -TInt CScpSettingHandler::UahStringLengthL( - TUint32 aServiceId ) const - { - TBool length( KErrNone ); - RPointerArray entries; - - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( TScpUtility::ResetAndDestroyEntries, - &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aServiceId, entries ); - - if ( entries.Count() ) - { - // SIP VoIP User Agent header string - length = entries[0]->iSIPVoIPUAHeaderString.Length(); - } - - CleanupStack::PopAndDestroy( &entries ); - return length; - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::UpdateImSettingsL -// ----------------------------------------------------------------------------- -// -void CScpSettingHandler::UpdateImSettingsL( CScpService& aService ) const - { - SCPLOGSTRING( "CScpSettingHandler::UpdateImSettingsL" ); - - CSPEntry* entry = CSPEntry::NewLC(); - - if ( KErrNone == iSpSettings->FindEntryL( aService.ServiceId(), *entry ) ) - { - if ( AreImSettingsValid( *entry ) ) - { - RPointerArray entries; - // Push entries to cleanup stack - CleanupStack::PushL( TCleanupItem( - TScpUtility::ResetAndDestroyEntries, &entries ) ); - - iRcseProfileRegistry->FindByServiceIdL( aService.ServiceId(), - entries ); - TInt idsCount = entries.Count(); - - if ( idsCount > 0 ) - { - CRCSEProfileEntry* profileEntry = entries[ 0 ]; - - if ( profileEntry && profileEntry->iIds.Count() ) - { - TSettingIds& settingId = profileEntry->iIds[ 0 ]; - - __ASSERT_DEBUG( settingId.iProfileId > 0, - User::Panic( KNullDesC, KErrGeneral ) ); - - if ( iProfileHandler.ProfileExists( settingId.iProfileId ) ) - { - CScpSubService& imSubService = aService.AddSubServiceL( - ECCHIMSub ); - imSubService.SetSipProfileId( settingId.iProfileId ); - } - else - { - User::Leave( KErrNotFound ); - } - } - } - - CleanupStack::PopAndDestroy( &entries ); - } - } - - CleanupStack::PopAndDestroy( entry ); - } - -// ----------------------------------------------------------------------------- -// CScpSettingHandler::AreImSettingsValid -// ----------------------------------------------------------------------------- -// -TBool CScpSettingHandler::AreImSettingsValid( const CSPEntry& aEntry ) const - { - SCPLOGSTRING( "CScpSettingHandler::AreImSettingsValid" ); - - const CSPProperty* property( NULL ); - TBool imFeatureEnabled = ( KErrNone == aEntry.GetProperty( - property, ESubPropertyIMLaunchUid ) ) && property; - if ( !imFeatureEnabled ) - { - return EFalse; - } - - // Make sure that this is the correct plugin - TInt result = aEntry.GetProperty( property, - EPropertyIMSubServicePluginId ); - - if ( KErrNone == result && property ) - { - TInt pluginId = 0; - property->GetValue( pluginId ); - - SCPLOGSTRING3( "IM Subservice plugin UID: 0x%x this 0x%x", - pluginId, KSIPConnectivityPluginImplUid ); - - if ( KSIPConnectivityPluginImplUid == pluginId ) - { - return ETrue; - } - } - - return EFalse; - } - -// End of File